启发式算法之蚁群算法
Posted 柳小葱
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了启发式算法之蚁群算法相关的知识,希望对你有一定的参考价值。
😻今天我们来学习启发式算法中的蚁群算法,据说,蚁群算法是路径规划算法中’最好’的群智能算法。快让我们开始吧!
目录
1. 蚁群算法基本介绍
1.1 算法简介
蚁群优化算法 (Ant Colony Opt imization, ACO)作为一种全局最优化搜索方法 , 同遗传算法一样来源于自然界的启示,并有着良好的搜索性能 。 不同的是,蚁群算法通过模拟蚂蚁觅食的过程,是一种天然的解决离散组合优化问题的方法,在解决典型组合优化问 题,如旅行商问题 (TSP ) 、车辆路径问题 CVRP ) 、车间作业调度问题 CJSP) 时具有明显的优越性 。 目前针对蚁群算法在数学理论、算法改进、实际应用等方面的研究是计算智能领域的热点,取得了一定的进展。
1.2 算法原理
蚂蚁在寻找食物的过程中往往是随机选择路径的 ,但它们能感知当前地 面上的信息素浓度,并倾向于往信息素浓度高的方向行进 。 信息素由蚂蚁自身释放,是实 现蚁群内间接通信的物质 。 由于较短路径上蚂蚁的往返时间比较短,单位时间内经过该路径的蚂蚁多,所以信息素的积累速度比较长路径快 。 因此,当后续蚂蚁在路口时,就能 感知先前蚂蚁留下的信息,并倾向 于选择一条较短的路径前行 。 这种正反馈机制使得越来越多的蚂蚁在巢穴与食物之间的最短路径上行进 。 由于其他路径上的信息素会随着时间蒸发,最终所有的蚂蚁都在最优路径上行进 。 蚂蚁群体的这种自组织工作机制适应环境的能力特别强 ,假设最优路径上突然出现障碍物 ,蚁群也能够绕行并且很快重新探索出一条新的最优路径。
2.蚁群算法的基本流程
AS 算法对 TSP 的求解流程主要有两大步骤 : 路径构建和信息素更新 。已知 n 个城市的集合 C = ( c 1 , c 2 , … , c n ) C = (c1 , c2 , …, cn) C=(c1,c2,…,cn)任意两个城市之间均有路径连接, d i j ( i , j = 1 , 2 , … , n ) d_ij(i,j =1,2, … , n) dij(i,j=1,2,…,n)表 示 城市i与j之间的距离,它是已知的(或者城市的坐标集合为已知, d i j d_ij dij即为城市i与j之间的欧几里德距离)。TSP 的目的是找到从 某个城市 c i c_i ci出发 ,访问所有城市且只访问一次 ,最后回到 c i c_i ci的最短封闭路线。
2.1 路径构建
每只蚂蚁都随机选择一个城市作为其出发城市,并维护一个路径记忆向量 ,用来存放该蚂蚁依次经过的城市。蚂蚁在构建路径的每一步中,按照一个随机比例规则选择下一个要到达的城市 。
AS 中的随机比例规则 (random proportional) : 对于每只蚂蚁 k,路径记忆向量
R
k
R^k
Rk 按照访问顺序记录了所有 k 已经经过的城市序号 。 设蚂蚁
k
k
k当前所在城市为
i
i
i,则其选择城市
j
j
j作为下一个访问对象的概率为:
p
k
(
i
,
j
)
=
[
τ
(
i
,
j
)
]
α
[
η
(
i
,
j
)
]
β
∑
u
∈
J
k
(
i
)
[
τ
(
i
,
u
)
]
α
[
η
(
i
,
u
)
]
β
,
j
∈
J
k
(
i
)
0
,
其他
\\beginequation* p_k(i,j)= \\begincases \\frac[\\tau(i,j)]^\\alpha[\\eta(i,j)]^\\beta\\sum_u\\in J_k(i)[\\tau(i,u)]^\\alpha[\\eta(i,u)]^\\beta, & j \\in J_k(i) \\\\ \\\\ \\text0, & \\text其他 \\endcases \\endequation*
pk(i,j)=⎩
⎨
⎧∑u∈Jk(i)[τ(i,u)]α[η(i,u)]β[τ(i,j)]α[η(i,j)]β,0,j∈Jk(i)其他
其中 , J k ( i ) J_k(i) Jk(i)表示从城市 i i i可以直接到达的且又不在蚂蚁访问过的城市序列 R k R^k Rk中的城市集合。 η ( i , j ) \\eta(i,j) η(i,j)是一个启发式信息 ,通常由 η ( i , j ) = 1 / d i j \\eta(i,j)=1/d_ij η(i,j)=1/dij直接计算。 τ ( i , j ) \\tau(i,j) τ(i,j)表示边 ( i , j ) (i,j) (i,j)上的信息素量 。 由上述公式可知,长度越短、信息素浓度越大的路径被蚂蚁选择的概率越大, α \\alpha α和 β \\beta β是两个预先设置的参数 , 用来控制启发式信息与信息素浓度作用的权重关系 。 当 α = 0 \\alpha=0 α=0时 ,算法演变成传统的随机贪婪算法 ,最邻近城市被选中的概率最大 。 当 β = 0 \\beta=0 β=0时,蚂蚁完全只根据信息素浓度确定路径,算法将快速收敛,这样构建出的最优路径往往与实际目标有着较大的差异,算法的性能比较糟糕。实验表明,在 AS 中设置 α = 1 , β = 2 ∼ 5 \\alpha=1,\\beta=2\\sim5 α=1,β=2∼5比较合适 。
2.2 蚂蚁信息素的更新
在算法初始化时,问题空间中所有的边上的信息素都被初始化为
τ
0
\\tau_0
τ0。 如果
τ
0
\\tau_0
τ0太小,算法容易早熟,即蚂蚁很快就全部集中在一条局部最优的路径上 。 反之 ,如果
τ
0
\\tau_0
τ0太大,信息素对搜索方向的指导作用太低,也会影响算法性能 。 对 AS 来说 , 我们使用
τ
0
=
m
/
C
m
\\tau_0=m/C^m
τ0=m/Cm是蚂蚁的个数 ,
C
m
C^m
Cm是由贪婪算法构造的路径的长度 。
当所有蚂蚁构建完路径后 ,算法将会对所有的路径进行全局信息素的更新 。 注意 , 我 们所描述的是 AS 的 ant-cycle 版本,更新是在全部蚂蚁均完成了路径的构造后才进行的 , 信息素的浓度变化与蚂蚁在这一轮中构建的路径长度相关 , 实验表明 ant-cycle 比 ant-density 和 ant-quantity 的性能要好很多 。
信息素的更新也有两个步骤:首先 ,每一轮过后,问题空间中的所有路径上的信息素都会发生蒸发,我们为所有边上的信息素乘上一个小于 1 的常数 。 信息索蒸发是自然界本身固有的特征 ,在算法中能够帮助避免信息素的无限积累,使得算法可以快速丢弃之前构建过的较差的路径 。 随后所有的蚂蚁根据自己构建的路径长度在它们本轮经过的边上释放信息素 。 蚂蚁构建的路径越短、释放的信息素就越多; 一条边被蚂蚁爬过的次数越 多、它所获得的信息素也越多 。 AS 中城市
i
i
i与城市
j
j
j的相连边上的信息素
τ
(
i
,
j
)
\\tau(i,j)
τ(i,j)按照如下公式进行更新:
τ
(
i
,
j
)
=
(
1
−
ρ
)
+
∑
k
=
1
m
△
τ
k
(
i
,
j
)
\\tau(i,j)=(1-\\rho)+\\sum_k=1^m\\triangle\\tau_k(i,j)
τ(i,j)=(1−ρ)+k=1∑m△τk(i,j)
△
τ
k
(
i
,
j
)
=
(
C
k
)
−
1
,
i
,
j
∈
R
k
0
,
其他
\\beginequation* \\triangle\\tau_k(i,j)= \\begincases \\ (C_k)^-1, & i,j \\in R^k \\\\ \\\\ \\text0, & \\text其他 \\endcases \\endequation*
△τk(i,j)=⎩
⎨
⎧ (Ck)−1,0,i,j∈Rk其他
这里,m 是蚂蚁个数 ρ \\rho ρ是信息素的蒸发率 0 < ρ ⩽ 1 0<\\rho\\leqslant1 0<启发式算法之蚁群算法