蚁群算法是通过模拟自然界中蚂蚁集体寻径行为而提出来的一种基于种群的启发式随机搜索算法,它是一种用来寻找优化路径的概率型算法,具有分布计算、信息正反馈和启发式搜索的特征,本质上是进化算法中的一种启发式全局优化算法。
本篇文章只讲理论,无代码,少量公式,适合基础入门。
1 算法理论
蚂蚁在寻找食物的过程中,会在路径上释放出一种特殊的信息素,其它蚂蚁能够感知这种信息素的存在和强度,蚁群通过信息素来完成信息交流。
初始阶段,环境中没有信息素,蚂蚁随机行动寻找食物,找到食物就返回并在路径上释放信息素,信息素会随时间挥发,较短的路径往返的用时较少,路径上遗留的信息素则较强,下次出发就会有更多的蚂蚁沿着信息素较强的路径出发,更多的蚂蚁会遗留更多信息素,以此形成一种正反馈,最终找到一条最佳路径。
举个例子,假如2只蚂蚁m1、m2同时从A出发前往B处寻找食物,m1走ACB,m2走ADB,ADB的长度是ACB的2倍,8个单位时间m1到达B,m2只走了1/2,2条路径上的信息素分布如图1(此时假设信息素不挥发),又经过8个单位时间,信息素分布如图2,路径ACB上的信息素是路径ADB上的2倍。
图1 8个单位时间信息素分布
图2 16个单位时间信息素分布
2 算法流程
步骤1 将m只蚂蚁随机放在n座城市
步骤2 让m只蚂蚁基于信息素量t和启发式信息(距离的倒数)独立选择下一座城市,选择基于概率P,走完所有城市
Pij为在时刻t第k只蚂蚁从城市i出发选择访问城市j的概率,其中,j是备选城市集J中的元素,t可以理解为迭代次数,Tij为城市i到城市j路径上的信息素,nij为城市i到城市j之间距离的倒数,a、b为实常数。
步骤3 基于上次m只蚂蚁的路径信息和遗留信息素更新所有路径上的信息素
Tij(t+1)为t+1时刻更新后城市i到城市j路径上遗留的信息素,由2部分组成,上一时刻信息素蒸发后遗留和本次周游新遗留的信息素,关于新遗留的信息素计算式子中X的取值不同,可分为3个模型,依次为ant-cycle、ant-quantity、ant-density,实验证明ant-cycle模型(X=Lk,X为第k只蚂蚁本次周游所走过的路径和)效果最好。
步骤4 重复步骤2、3、4直到满足终止条件
步骤5 输出最终结果
3 算法改进
3.1 精英蚂蚁系统
精英蚂蚁系统为第1次改进,主要是对式子(2)进行了改进,主要思想为在全局最优路径上人工释放额外的信息素,以增强正反馈效果。
其中,e为调整参数Lbs为已知最优路径。
3.2 最大最小蚂蚁系统
为克服系统可能出现的停止现象,采取3中策略:
一是每次循环后,只有1只蚂蚁进行信息素更新。
二是限制每个解元素上的信息素轨迹量的值域范围[Tmin Tmax]。
三是将信息素初始化为Tmax。
3.3 基于排序的一群算法
类似精英蚂蚁系统对式子(2)进行改进,主要策略为对当前循环中每只蚂蚁路径长度排序,短的靠前,只有排名前w-1位的蚂蚁和精英蚂蚁才允许在路径上释放信息素。
其中,w为系数,r为排名。
3.4 自适应蚁群算法
结合基本蚂蚁系统和最大最小蚂蚁系统,克服慢收敛,但也避免了早熟。主要策略
一是每次循环结束求出最优解并保留。
二是对式子(2)中的p进行改进。
随迭代次数增加,自适应改变p值。p初值为1,当算法求得最优值没有明显改进时,降低p为式子(6),以减小信息素挥发,增大全局搜索能力。
4 仿真实例
见下篇。