蚁群优化算法(1.初步了解)
1.生物学原理
1992年,Dorigo 等提出了第一个蚁群算法——蚂蚁系统,受启发于蚂蚁觅食的行为,蚂蚁会在运动过程中在所经过的路径上留下信息素,而且能够感知信息素的强度,信息素的浓度越大,则其他蚂蚁选择该条路径的概率越大,从而该路径上的信息素量被进一步增强。因此,由大量蚂蚁组成的蚁群的集体行为便表现出一种信息正反馈现象。蚂蚁个体之间就是通过这种间接的通信机制达到协同搜索蚁巢到食物源之间的最短路径的目的。
例子:如图2-1所示,A为蚁巢,E为食物源,ABCDE和ABFDE分别为蚁巢和食物源之间的两条通路,各点之间的距离如图2-1(a)所示。假设每个单位时间各有30只蚂蚁离开蚁巢和食物源,每只蚂蚁均以单位时间走1个单元长度的速度往返于蚁巢和食物源之间。
如图2-1(b),假设T=0时有30只蚂蚁分别位于点B和点D,由于此时路径上没有信息素,蚂蚁以相同的概率选择两条路径的任意一条,因而在B,D点各有15只蚂蚁选择往C,其余15只选择往F。当T=1时,由于路径BCD为1个单位长度,因而有30只蚂蚁经过,而路径BFD是2个单位长度,因而只有15只蚂蚁经过。假设蚂蚁在每段路径上释放的信息素量相同,则BCD路径上信息素的浓度是BFD路径上的2倍。此时,又分别有30只蚂蚁离开B点和D点,于是根据连接上的信息素浓度,在B,D点各有20只蚂蚁选择往C,另外10只蚂蚁选择往F,这样就会有更多的信息素留在路径BCD上。重复这一过程,短路径 BCD上的信息素浓度以更快的速度增长,越来越多的蚂蚁会选择这条短路径。
由上例可知,蚂蚁觅食行为的本质是:路径越短,在上面释放的信息素就越多,即信息素更新机制;路径上的信息素浓度越大,被选中的机率就越大,即正反馈路径选择机制。这样,蚁群并不需要知道整个空间的全部知识,通过信息素这种局部的知识也可以搜索出最短路径,这就是蚁群利用信息素实现协同工作的机理。
2.算法框架
2.1 构造解过程
1.将优化问题的解分解成一系列组成部分(例如,将TSP问题中的路径分解为城市A、B、C、D等)
2.将这些组成部分映射为一个由节点和连接组成的解构造图(将点构造成解),所有的解构造图又组成了优化解的空间
3.蚂蚁根据构造图中信息素的分布,采取一个随机局部决策方法,通过逐步选择节点和连接方式来完成对解空间的搜索,并最终完成对解的评估
2.2 更新信息素过程
1.蚂蚁倾向于选择信息素浓度高的节点,同时自身也在该节点(或连接)上释放信息素,从而形成自催化强化学习机制,引导蚂蚁搜索质量更高的解
2.算法通过遗忘的形式,使节点上的信息素随着时间不断挥发,从而驱使蚂蚁探索新的领域,防止求解过程过早的收敛于局部最优解
2.3 后台执行过程
后台执行过程就是执行单一蚂蚁不能完成的集中行动,如邻域(局部)搜索过程以及全局信息的收集等。
// 蚁群优化算法伪代码框架:
procedure ACOMetaheuristic
scheduleActivities
ContructSolution() ; //构造解
PheromoneUpdate(); //更新信息素
DaemonActions() ; //后台操作{可选}
end scheduleActivities
end procedure
3. 经典蚂蚁算法模型
当前存在着大量满足蚁群优化元启发式算法框架的蚁群算法实例模型,这些算法实例模型已经被应用于求解很多不同的组合优化问题,并得到了较好的效果。由于这些算法首先被应用于求解 TSP问题,所以本节将通过求解TSP问题给出几种具有代表性的蚁群算法实例模型。
3.1 蚂蚁系统(AS)
蚂蚁系统(AS)是第一个满足蚁群优化元启发式算法框架的算法,它主要包含构建问题的解和信息素更新两个步骤,其算法的伪代码如下:
procedureAS
InitializePheromone();//初始化信息素
while(不满足停止条件)
ContructSolution();//对每一个蚂蚁均构造解
PheromoneUpdate();//信息素更新
endwhile
end procedure
//根据城市间的信息素浓度得出最终结果
3.1.1构建问题的解
在AS算法中,m只蚂蚁并行构建路径,初始时蚂蚁放置在随机选择的城市上,各个路径上的信息素量相等(初始化为常数)
在路径构建的每一步中,蚂蚁 k ( k = 1 , 2 , … , m ) k(k=1,2,…,m) k(k=1,2,…,m)按照一个称为随机比例规则的概率行为来决定下一步将要访问的城市。依据该规则,蚂蚁 k k k从当前城市 i i i选择下一个要访问的城市 j j j的概率如下公式所示:
p i j = { τ i j α ⋅ η i j β / ∑ s ϵ N i k τ i j α ⋅ η i j β , j ϵ N i k 0 , 否 则 p_{ij}=\begin{cases} \tau_{ij}^\alpha \cdot \eta_{ij}^\beta / \sum_{s\epsilon N_{i}^k}{\tau_{ij}^\alpha \cdot \eta_{ij}^\beta},\quad j\epsilon N_{i}^k\\ 0, \quad\quad\quad\quad\quad\quad\quad\quad\quad\quad否则\end{cases} pij={
τijα⋅ηijβ/∑sϵNikτijα⋅ηijβ,jϵNik0,否则
τ i j \tau_{ij} τij为连接 ( i , j ) (i,j) (i,j)上的信息素强度; η i j \eta_{ij} ηij为连接 ( i , j ) (i,j) (i,j)上的能见度,取为 1 / d i j , 1/d_{ij}, 1/dij