一、蚁群算法
蚁群算法是一种用来寻找优化路径的概率型算法。它由Marco Dorigo于1992年在他的博士论文中提出,其灵感来源于蚂蚁在寻找食物过程中发现路径的行为。这种算法具有分布计算、信息正反馈和启发式搜索的特征,本质上是进化算法中的一种启发式全局优化算法。将蚁群算法应用于解决优化问题的基本思路为:用蚂蚁的行走路径表示待优化问题的可行解,整个蚂蚁群体的所有路径构成待优化问题的解空间。路径较短的蚂蚁释放的信息素量较多,随着时间的推进,较短的路径上累积的信息素浓度逐渐增高,选择该路径的蚂蚁个数也愈来愈多。最终,整个蚂蚁会在正反馈的作用下集中到最佳的路径上,此时对应的便是待优化问题的最优解。
二、算法实现步骤(结合本题代码)
设置各种参数(迭代次数、蚁群数量、城市数量、信息素挥发速率等)
根据城市坐标点计算城市之间距离,并且初始化城市间路线上的信息素
判断迭代次数是否达到目标值,若达到目标值则跳出循环,输出当前路线长度最短的最佳路径,程序结束;否则进入步骤4
判断在某次迭代中,判断完成旅行的蚂蚁数量是否达到目标值,若达到目标值则结束当前迭代,并且迭代次数加1,更新最短路径和最短路径值,并且利用蚁环模型更新信息素,进入步骤3。否则进入步骤5
判断当前蚂蚁走过的城市数是否等于所有城市数,若完成旅行,则完成旅行的蚂蚁数量加1,进入步骤4。否则进入步骤6
计算蚂蚁从当前城市到所有未经过的下一个城市的概率,并通过轮盘算法进行选择下一个城市,则当前蚂蚁走过的城市数+1,修改禁忌表,进入步骤5
三、实现代码
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int CityPos[30][2]={ {87,7},{91,38},{83,46},{71,44},{64,60},{68,58},{83,69},{87,76},{74,78},{71,71},{58,69},{54,62},{51,67},{37,84},{41,94},{2,99},{7,64},{22,60},{25,62},{18,54},{4,50},{13,40},{18,40},{24,42},{25,38},{41,26},{45,21},{44,35},{58,35},{62,32}};
#define CITYNUM 20 //城市数量
#define ANTNUM