2023.11.1学习-蚁群算法
蚁群算法(Ant Colony Algorithm, ACA)
算法背景
模拟自然界中蚂蚁的觅食行为:蚂蚁在寻找食物源时,会在其经过的路上释放信息素,并能够感知其他蚂蚁释放的信息素,蚂蚁会以较大概率优先选择信息素浓度较高的路径。
若蚂蚁要从出发点A到达目的地E,中间存在障碍物,初始时由于没有信息素(或信息素相等),蚂蚁向左和向右走的概率是相等的,且都会留下信息素;但是,由于信息素浓度会随时间的推进而逐渐衰减,C侧路径的残余信息素浓度会高于H侧,导致吸引蚂蚁的概率更高,从而这条较短路径上积累的信息素浓度越来越高,又使得选择该路径的蚂蚁个数也越来越多,形成了正反馈;最终,所有蚂蚁都会集中到这条最佳的路径上。
从蚁群的行为上可以得到结论:信息素的浓度的大小表征路径的远近,信息素的浓度越高,表示对应的路径越短。
使用蚁群算法解决优化问题的基本思路:用蚂蚁的行走路径表示待优化问题的可行解,整个蚂蚁群体的所有路径构成待优化问题的解空间。由于正反馈机制,随着时间的推进,最终,所有蚂蚁都会集中到最佳的路径上,此时对应的便是问题的最优解。
蚁群算法最早在解决旅行商问题(Travelling salesman problem, TSP)较为有效。
(旅行商问题:给定一系列城市和每对城市之间的距离,求解访问每一座城市一次并回到起始城市的最短回路。)
TSP问题可以表达为:求解遍历图G=(V,E,C),所有的节点一次并且回到起始节点,使得连接这些节点的路径成本最低。
旅行商问题的算法流程图:
蚁群算法原理
设整个蚁群的蚂蚁数量为m,城市数量为n,城市 i 与城市 j 之间的相互距离为dij(i, j = 1, 2, …, n),t时刻城市 i 与城市 j 连接路径上的信息素浓度为τij(t)。初始时刻,各个城市之间连接路径上的信息素浓度相同,τij(0) = τ0。
蚂蚁k(k = 1, 2, …, m)根据各个城市间连接路径上的信息素浓度决定下一个访问城市,设其在t时刻从城市 i 转移到城市 j 的概率为Pk:
其中,τij表示边(i, j)上的信息素量;ηij是一个启发函数,通常由ηij= 1/ dij直接计算,表示蚂蚁从城市 i 到城市 j 的期望程度;α为信息素重要程度因子,其值越大,表示信息素的浓度在转移中起的作用越大;β为启发函数重要程度因子,其值越大,表示启发函数在转移中的作用越大,即蚂蚁会以较大的概率转移到距离短的城市。
Jk(k = 1, 2, …, m)为蚂蚁k待访问的城市的集合;**禁忌表tabuk**记录了蚂蚁k当前走过的城市,当所有n座城市都加入禁忌表tabuk中时,蚂蚁k便完成了一次周游,此时蚂蚁k所走过的路径便是TSP问题的一个可行解。
在蚂蚁行走并释放信息素的同时,各个城市间连接路径上的信息素逐渐自然消失,设参数ρ(0 < ρ <1)表示信息素的挥发程度。当所有蚂蚁完成一次周游后,各路径上的信息素根据下式更新:
τ
i
j
(
t
+
n
)
=
(
1
−
ρ
)
⋅
τ
i
j
(
t
)
+
Δ
τ
i
j
\tau_{ij}(t+n)=(1-\rho)·\tau_{ij}(t)+\Delta \tau_{ij}
τij(t+n)=(1−ρ)⋅τij(t)+Δτij
Δ τ i j = ∑ k = 1 m Δ τ i j k \Delta \tau_{ij} = \sum \limits^m \limits_{k = 1}\Delta \tau^k_{ij} Δτij=k=1∑mΔτijk
其中,表示所有蚂蚁在城市 i 与城市 j 连接路径上释放的信息素浓度之和。
M.Dorigo 3种蚁群算法模型
(1)ant-cycle模型
其中,Q为常数,表示蚂蚁循环一次所释放的信息素总量,Lk为第k只蚂蚁经过路径的长度。
(2)ant-quantity模型
(3)ant-density模型
蚁群算法步骤
核心步骤:路径构建、信息素更新
(1)初始化参数
蚁群规模m、信息素重要程度因子α、启发函数重要程度因子β、信息素挥发因子ρ、信息素释放总量Q、最大迭代次数iter_max。
(2)构建解空间
将各个蚂蚁随机地置于不同出发点,对每个蚂蚁k(k = 1, 2, …, m),计算其下一次待访问的城市,直到所有蚂蚁访问完所有的城市。
(3)更新信息素
计算各个蚂蚁经过的路径程度Lk(k = 1, 2, …, m),记录当前迭代次数中的最优解(最短路径),同时对各个城市间连接路径上的信息素浓度进行更新。
(4)判断是否终止
若iter < iter_max,则iter = iter + 1,并清空蚂蚁经过路径的信息表,返回步骤(2);否则终止计算,输出最优解。
蚁群算法的特点
(1)采用正反馈机制,使搜索过程不断收敛至最优解。
(2)每个个体可以通过释放信息素改变周围环境,感知周围环境,个体间通过信息素间接通讯,
(3)搜索过程采用分布式计算,多个个体同时进行并行计算,提高了算法的计算能力和运行效率。
(4)启发式的概率搜索,不容易陷入局部最优,易于找到全局最优解。