https://blog.csdn.net/fashionxu/article/details/5484864
带流程图解释
1. 蚁群算法介绍
转载 wang_s_k博客
蚂蚁在运动过程中,会留下一种称为信息素的东西,并且会随着移动的距离,播散的信息素越来越少,所以往往在家或者食物的周围,信息素的浓度是最强的,而蚂蚁自身会根据信息素去选择方向,当然信息素越浓,被选择的概率也就越大,并且信息素本身具有一定的挥发作用。 蚂蚁的运动过程可以简单归纳如下:
- 当周围没有信息素指引时,蚂蚁的运动具有一定的惯性,并有一定的概率选择其他方向
- 当周围有信息素的指引时,按照信息素的浓度强度概率性的选择运动方向
- 找食物时,蚂蚁留下家相关的A信息素,找家时,蚂蚁留下食物相关的B信息素,并随着移动距离的增加,洒播的信息素越来越少
- 随着时间推移,信息素会自行挥发
一个简单的例子,如果现在有两条通往食物的路径,一条较长路径A,一条较短路径B,虽然刚开始A,B路径上都有蚂蚁,又因为B比A短,蚂蚁通过B花费的时间较短,随着时间的推移和信息素的挥发,逐渐的B上的信息素浓度会强于A,这时候因为B的浓度比A强,越来越多多蚂蚁会选择B,而这时候B上的浓度只会越来越强。如果蚂蚁一开始只在A上呢,注意蚂蚁的移动具有一定小概率的随机性,所以当一部分蚂蚁找到B时,随着时间的推移,蚂蚁会收敛到B上,从而可以跳出局部最优。
2. 蚁群算法的流程步骤
转载 wang_s_k博客
以TSP问题为例,算法设计流程:
步骤1 :
对相关参数进行初始化,包括蚁群规模、信息素因子、启发函数因子、信息素的挥发因子、信息素常数、以及最大迭代次数等,以及将数据读入程序,并进行预处理:比如将城市的坐标信息转化为城市间的距离矩阵。
步骤2 :
随机将蚂蚁放于不同的出发点,对每个蚂蚁计算其下个访问城市,直到有蚂蚁访问完所有的城市。
步骤3 :
计算各蚂蚁经过的路径长度Lk,记录当前迭代次数最优解,同时对路径上的信息素浓度进行更新。
步骤4 :
判断是否到达迭代次数,若否,返回步骤2;是,结束程序。
步骤5 :
输出结果,并根据需要输出寻优过程中的相关指标,如运行时间、迭代次数等。
符号说明:
m:整个蚂蚁群体中蚂蚁数量;
n:城市的数量;
dij:城市ii与城市jj的距离
βij(t):t时刻城市ii和城市jj连接路径上的信息素;
pkij(t):t时刻蚂蚁k从城市ii转移到城市jj的概率;
初始时刻蚂蚁被放在不同的城市,且各城市路径上的信息素浓度为0。
由于蚁群算法涉及到的参数蛮多的,且这些参数的选择对程序又都有一定的影响,所以选择合适的参数组合很重要。蚁群算法有个特点就是在寻优的过程中,带有一定的随机性,这种随机性主要体现在出发点的选择上。蚁群算法正是通过这个初始点的选择将全局寻优慢慢转化为局部寻优的。参数设定的关键就在于在“全局”和“局部”之间建立一个平衡点。
3. 蚁群算法的关键参数
在蚁群算法的发展中,关键参数的设定有一定的准则,一般来讲遵循以下几条:
- 尽可能在全局上搜索最优解,保证解的最优性;
- 算法尽快收敛,以节省寻优时间;
- 尽量反应客观存在的规律,以保证这类仿生算法的真实性。
蚂蚁数量:
设M表示城市数量,m表示蚂蚁数量。m的数量很重要,因为m过大时,会导致搜索过的路径上信息素变化趋于平均,这样就不好找出好的路径了;m过小时,易使未被搜索到的路径信息素减小到0,这样可能会出现早熟,没找到全局最优解。一般上,在时间等资源条件紧迫的情况下,蚂蚁数设定为城市数的1.5倍较稳妥。
信息素因子:
信息素因子反映了蚂蚁在移动过程中所积累的信息量在指导蚁群搜索中的相对重要程度,其值过大,蚂蚁选择以前走过的路径概率大,搜索随机性减弱;值过小,等同于贪婪算法,使搜索过早陷入局部最优。实验发现,信息素因子选择[1,4]区间,性能较好。
启发函数因子:
启发函数因子反映了启发式信息在指导蚁群搜索过程中的相对重要程度,其大小反映的是蚁群寻优过程中先验性和确定性因素的作用强度。过大时,虽然收敛速度会加快,但容易陷入局部最优;过小时,容易陷入随机搜索,找不到最优解。实验研究发现,当启发函数因子为[3,4.5]时,综合求解性能较好。
信息素挥发因子:
信息素挥发因子表示信息素的消失水平,它的大小直接关系到蚁群算法的全局搜索能力和收敛速度。实验发现,当属于[0.2,0.5]时,综合性能较好。
信息素常数:
这个参数为信息素强度,表示蚂蚁循环一周时释放在路径上的信息素总量,其作用是为了充分利用有向图上的全局信息反馈量,使算法在正反馈机制作用下以合理的演化速度搜索到全局最优解。值越大,蚂蚁在已遍历路径上的信息素积累越快,有助于快速收敛。实验发现,当值属于[10,1000]时,综合性能较好。
最大迭代次数:
最大迭代次数值过小,可能导致算法还没收敛就已结束;过大则会导致资源浪费。一般最大迭代次数可以取100到500次。一般来讲,建议先取200,然后根据执行程序查看算法收敛的轨迹来修改取值。
组合参数设计策略:
通常可以按照以下策略来进行参数组合设定:
1. 确定蚂蚁数目,蚂蚁数目与城市规模之比约为1.5;
2. 参数粗调,即调整取值范围较大的α,β及Qα,β及Q;
3. 参数微调,即调整取值范围较小的ρ