蚁群算法(Ant Colony Optimization, ACO)
一、概述:
又称蚂蚁算法,是一种用来在图中寻找优化路径的概率型型算法。
灵感来源于蚂蚁在寻找食物的过程中发现路径的行为,即这是一种模拟进化算法。
车间作业调度、网络路由、车辆路径、数据挖掘、航迹规划、图像处理、生命科学、布局优化等领域均有广泛应用。
具有稳定性好,全局搜索,并行分布式计算,易于其他问题结合等优点。
二、基本思想:
蚂蚁在爬行中会在路径中释放外激素:蚂蚁倾向于朝外激素强度高的方向移动。
某路径经过的蚂蚁越多,则后来者选择该路径的概率就越大。
挥发率使得有些路径上最后信息素的浓度几乎为0。
三、基本步骤:
1、核心:路径中的信息素以一定的比例挥发减少,而某蚂蚁经过的路径,信息素以一定的比例释放增加。
2、算法过程:m只蚂蚁,最大迭代次数为k。
(1)信息素的初始化。
初值太小:算法易早熟,蚂蚁很快会全部集中到一条局部最优路径中。
初值太大:信息素对搜索方向的指导作用太低,影响算法技能。
一般: i,j之间的信息素浓度和dist(表示i, j之间的距离)成反比,和蚂蚁的个数成正比。
(2)路径构建。选择路径的概率:
α和β为权值调节因子,一般α=1,β=2。
(3)信息素更新。
Vij(k) 表示第k只蚂蚁在城市i, j的边释放的信息素。该值往往取这只蚂蚁经过的整个的路径长度的(^1或^2或^3)的倒数。
Ρ表示挥发率,提出者建议用0.5。
(4)2、3步迭代K次或最短路径不再变化。
四、代码实现:
Proceure AS: int bestRoute; for each edge set initial pheromone value t0 //初始化信息素 end for while not stop //迭代次数 for each ant k //对每只蚂蚁 randomly choose an initial city //随机选择一个初始城市 for i=1 to n // choose next city with probability end for compute the length Ck of the tour constructed by the kth ant //计算当前蚂蚁的路径长度 compare to update bestRoute // 比较更新最优路径长度 for each edge //更新每条路径的信息素浓度 update the pheromone value end for end for end while //最短路径不再变化 或者 到达迭代次数 print result //输出最后得到的最优路径长度 end procedure
五、优势分析:
在数学领域,根据问题本身的复杂度是有分类的。
简单来说,问题分为P问题,NP问题,NPC问题,NP-hard问题。
P是多项式这个单词的首写字母,即Polynomial,【这里指多项式时间】
P问题意为 总能找到相应的经典算法 在多项式时间 里面得出最优解。
NP问题意为 不能确定是否能找到相应算法 能够在多项式时间内 得出最优解。
NPC问题可以理解成NP问题中最难(复杂度最高)的问题,也就是说很难找到相应算法 能够在多项式时间内得出最优解。
NP-hard问题可以简单理解成找不到相应算法 能够在多项式时间内得出最优解。
简单来说就是,传统的经典算法能够解决P类问题,而NP问题,特别是NPC问题,则束手无策,于是科学家们开始想办法了,既然不能在多项式时间里得出
一个最优解,那么咱们得一个较优解吧,用先验的经验知识作为启发算子,于是启发式算法诞生了,但启发式算法只能针对特定问题(比如,prime算法和
kruskal算法都是经典启发式算法,在最小生成树领域比较好的效果),启发式算法不适合跨领域,但NP问题又如此之多,怎么办,于是各种仿生学理论开
始引入计算机的算法领域,诞生了所谓的蚁群,粒子群,遗传,神经网络算法这些统称智能优化算法(元启发式算法)的东东来求较优解。
也就是说,我们在有限的时间内,无法求得最优解的情况下,转而求较优解。而且这个算法跨领域应用很广泛。这就是蚁群算法的优势吧。
【起因是准备无线传感器课堂的share,讲完觉得大家内心毫无波动甚至还想把我赶下去,然后就被神奇的赵老师praise了一下。哈哈哈...
这也成了这学期唯一听的一节无线传感器课。23333.
生活中的很多东西,背后的道理好像挺有趣的。比如,把饭卡放进微波炉转一圈能多100块?gg...有点难...】