蚁群算法(ACO)(2)

42 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第三十一天,点击查看活动详情

总结:此文为12月更文计划第三十一天第四十六篇。

在蚁群算法(ACO)中,使用了一个代码文件来实现。核心思路是建立信息素矩阵,计算蚂蚁从 i 城市 到 j 城市之间的期望距离。使用轮盘赌的方式来计算蚂蚁走的路径,从城市 1 开始。建立计算距离矩阵的函 数,计算每只蚂蚁的距离矩阵,建立循环将每一次的距离保存到数组中,依次比较每一次的距离,选取最短的 那一次作为结果输出。其中信息素浓度计算方法为信息素强度 Q/dij 为信息素浓度,所以较短的路径对蚂蚁 更有吸引力。部分实现代码如下所示:

  1. 初始化代码模块,创建所需要的变量,如 data 表示各地点的坐标,autnum 为蚁群的大小,alpha 为 信息素浓度,beta 为启因子,itera 为循环次数。使用欧氏距离计算城市距离矩阵

  2. 使用轮盘赌的方式选择蚂蚁走的路径。蚁群算法中的终止条件:是否达到迭代次数。一次迭代就是指 m 只蚂蚁都走完所有的城市,即存在 m 个搜索路径。将所有路径进行比较,选择长度最短的路径,

  3. 依据信息素浓度确定最短距离

image.png

image.png

image.png

3 运行结果

使用的数据集为 Berlin52 数据集,输出的结果如下所示。由结果可以看到,最短路径约为 8636,相对于

遗传算法(GA)来说误差更大,而且收敛曲线来看在循环了 50 多次之后曲线便开始趋于平稳

image.png