蚁群算法(ant colony optimization, ACO)
写文章
点击打开忍者乱太郎的主页
蚁群算法(ant colony optimization, ACO)
吴小宇
吴小宇
微胖的小胖子
关注
10 人赞同了该文章
一, 蚁群算法概述
自然界中有一个神奇的现象,即蚂蚁在没有提示的情况下总是能够找到从巢穴到食物的最短路径,这是为什么呢?原因就是蚂蚁在寻找食物时,能在其走过的路径上释放一种特殊的分泌物——信息素,随着时间的推移该物质会逐渐挥发,后来的蚂蚁会根据信息素的强度来选择要走的路径。由于越短的路径单位时间内蚂蚁走过的次数越多,所以留下的信息素越多,这就导致后来的蚂蚁选择该路径的概率越大,从而形成一种正反馈机制,最终找到最优路径。正式由于对蚂蚁寻找食物的发现与模拟,意大利学者M.Dorigo,V.Maniezzo和A.Colorni等人于20世纪90年代初期,通过模拟自然界中蚂蚁集体寻径行为而提出的一种基于种群的启发式随机搜索算法——蚁群算法。
二, 蚁群算法理论
蚁群算法的信息交互主要是通过信息素来完成的。蚂蚁在运动过程中,能够感知这种物质的存在和强度。初始阶段,环境中没有信息素的遗留,蚂蚁寻找事物完全是随机选择路径,随后寻找该事物源的过程中就会受到先前蚂蚁所残留的信息素的影响,其表现为蚂蚁在选择路径时趋向于选择信息素浓度高的路径。
蚁群算法的基本原理:
1、蚂蚁在路径上释放信息素。
2、碰到还没走过的路口,就随机挑选一条路走。同时,释放与路径长度有关的信息素。
3、信息素浓度与路径长度成反比。后来的蚂蚁再次碰到该路口时,就选择信息素浓度较高路径。
4、最优路径上的信息素浓度越来越大。
5、最终蚁群找到最优寻食路径。
蚁群算法案例 TSP问题:
在tsp中可以模拟蚂蚁在两两城市之间所留下信息素,来搜索最短路径
简单计算下蚂蚁是如何寻找最短路径的:
假设蚂蚁从A点出发,目的是F点,上诉图片中共有三条路径:
A——>B——>D——>F
A——>C——>E——>D——>F
A——>B——>C——>E——>D——>F
上诉三条路径长度分别为L1 =4+10+11=25,L2 = 2+3+4+11=20,L3=4+5+3+4+11=27
蚂蚁访问数量分别为n1=n2=n3=1
初始化个点之间的信息素是相同的,每个点被访问的概率也是相同的(例如A点到B或者到C的概率都是0.5)
那么,三条路径,三只蚂蚁访问后,每个节点留下的信息素如下:
A-C有一只蚂蚁访问,留下信息素为:\dfrac{1}{L_1}\times n_{L_1}=\dfrac{1}{20} \times 1 = 0.05
A-B有两只蚂蚁访问,留下信息素为 :\dfrac{1}{L_2}\times n_{L_2} + \dfrac{1}{L_3}\times n_{L_3}=\dfrac{1}{25} \times 1 + \dfrac{1}{27} \times 1 = 0.077
B-C 1只蚂蚁访问,留下信息素为: \dfrac{1}{L_3}\times n_{L_3}=\dfrac{1}{27} \times 1 = 0.037
B-D 1只蚂蚁访问,留下信息素为: \dfrac{1}{L_2}\times n_{L_2}=\dfrac{1}{25} \times 1 = 0.04
C-E 两只蚂蚁访问,留下信息素为: \dfrac{1}{L_1·}\times n_{L_1} + \dfrac{1}{L_3}\times n_{L_3}=\dfrac{1}{20} \times 1 + \dfrac{1}{27} \times 1 = 0.087
E-D两只蚂蚁访问,留下信息素为: \dfrac{1}{L_1}\times n_{L_1} + \dfrac{1}{L_3}\times n_{L_3}=\dfrac{1}{20} \times 1 + \dfrac{1}{27} \times 1 = 0.087
D-F三只蚂蚁访问,留下信息素为: \dfrac{1}{L_1}\times n_{L_1} +\dfrac{1}{L_2}\times n_{L_2} + \dfrac{1}{L_3}\times n_{L_3}=\dfrac{1}{20} \times 1 +\dfrac{1}{25} \times 1 + \dfrac{1}{27} \times 1 = 0.127
根据信息素,从A到B 、C点的选择概率为: \frac{0.077}{0.05+0.077} = 0.61 、 \frac{0.05}{0.05+0.077} = 0.39 依次类推计算。
我们发现一个问题,最优路径是A-C-E-D-F,而A点出发,B点被选择的概率远大于C点被选择的概率,因此计算信息素时就要加入两个城市之间的距离信息和一些因子。
例如:P_{A-B} =( pheromone_{A-B}){\alpha}*(\frac{1}{distance_{A-B}})\beta
\alpha 信息启发因子,值越大,则蚂蚁选择之前走过的路径可能性就越大,值越小,则蚁群搜索范围就会减少,容易陷入局部最优。
\beta 值越大,蚁群越就容易选择局部较短路径,这时算法收敛速度会加快,但是随机性不高,容易得到局部的相对最优。
信息素更新: NewPheromone =pheromonex_{old} * \gamma + pheromonex_{new}
初始化:[城市之间的距离,信息素, 蚁群,最优解,最大距离,迭代次数]
遍历每一只蚂蚁,移动到下一个城市,直到走过所有城市为止。
与当前最优蚂蚁路径比较,更新最优路径
更新城市之间的信息素(旧信息素衰减加上新迭代信息素)
循环 2-4步骤,直到迭代次数完成或者最优路径更新不在变更
蚁群算法优点
与其他优化算法相比,蚁群算法具有以下几个特点:
(1)采用正反馈机制,使得搜索过程不断收敛,最终逼近最优解。
(2)每个个体可以通过释放信息素来改变周围的环境,且每个个体能够感知周围环境的实时变化,个体间通过环境进行间接地通讯。
(3)搜索过程采用分布式计算方式,多个个体同时进行并行计算,大大提高了算法的计算能力和运行效率。
(4)启发式的概率搜索方式不容易陷入局部最优,易于寻找到全局最优解。
参考资料:
蚁群算法(ant colony optimization, ACO)
智能算法——蚁群算法