一、基本介绍
蚁群算法(Ant Colony Optimization,ACO)通过蚂蚁在寻找“事物”的过程中留下的“信息素”以确定下一个即将访问的“点”,循环往复,直至得到问题的最终解。
1.起源
\quad
蚁群算法由Dorigo于1992年在他的博士论文中提出,灵感来源于蚂蚁在寻找事物过程中发现路径的行为。
① 寻优的快速性:通过正反馈式的信息传递和积累
② 避免算法的早熟性:通过其分布式计算特征
③ 通过分泌于空间中的信息素进行信息交流,进而实现群体行为。
2.重要规则
\quad
① 避障规则
蚂蚁移动方向有障碍物时,它会随机选择另一个方向,并按照觅食的规则行为。
② 播撒信息素规则
每只蚂蚁在刚找到事物或者窝的时候散发的信息素最多,并随着它走的越远,播撒的信息素越少。
③ 范围
蚂蚁观察的范围是一个方格世界。
④ 移动规则
每只蚂蚁都朝着信息素最多的方向移动。当周围没有信息素指引时,会按照自己原来运动方向惯性的运动下去。在运动过程中存在一个随机的小的扰动。
⑤ 觅食规则
在感知范围内朝信息素多的地方走,并且每只蚂蚁都会以小概率犯错误。
⑥ 环境
信息素有两种:找食物的蚂蚁洒下的食物信息素和找窝的蚂蚁洒下的窝的信息素。环境以一定的速率让信息素消失。
3.特点
- 一种本质上并行的算法。每只蚂蚁搜索的过程彼此独立。
- 一种自组织的算法。系统从无序到有序的变化过程。
- 具有较强的鲁棒性。不依赖于子初始路线的选择,在搜索过程中不需要进行人工的调整,且参数数目少。
- 一种正反馈的算法。
4.专业术语
\quad
伪随机比例:长度越短,信息素浓度越大的路径被蚂蚁选择的概率越大.
自适应算法:自适应算法的核心思想是通过在线地学习从数据中自动提取特征,从而实现对数据的自适应处理。核心概念包括:
- 在线学习:自适应算法通过在线地学习从数据中自动提取特征,从而实现对数据的自适应处理。
- 自动特征学习:自适应算法可以自动学习特征,并且不需要人工设计特征。
- 多层神经网络:自适应算法通过多层神经网络来进行自动特征学习。
鲁棒性:即稳定性,英文robust,指模型在陌生环境或噪声干扰下依旧能够完成预期任务的能力。
正反馈现象:某一条路径越短,路径上经过的蚂蚁越多,其信息素遗留的额也就越多,信息素浓度就越高,蚂蚁选择这条路径的几率就越高。
二、过程原理
1.基本原理
蚂蚁在觅食过程中能够在其经过的路径上留下一种称之为信息素物质,并在觅食过程中能够感知这种物质的强度,并指导自己行动方向,它们总是朝着该物质强度高的方向移动,因此大量蚂蚁组成的集体觅食就表现为一种对信息素的正反馈现象。
人工蚂蚁的搜索主要包括3中智能行为:
- 蚂蚁利用信息素进行相互通信。通过信息素作为蚂蚁之间通信的媒介。
- 蚂蚁的记忆行为。一只蚂蚁搜索过的路径在下次搜索时就不再被该蚂蚁选择。
- 蚂蚁的集群活动。整个蚁群进行搜索。
2.五种蚁群算法过程
① 蚂蚁系统
在初始时刻,
m
m
m只蚂蚁随机放置于城市中,各条路径上的信息素初始值相等。
(i) 设
τ
i
j
(
0
)
=
τ
0
\tau_{ij}(0)=\tau_0
τij(0)=τ0为信息素初始值,可设
τ
0
=
m
L
m
\tau_0=\frac{m}{L_m}
τ0=Lmm,
L
m
L_m
Lm是由最近邻启发式方法构造的路径长度。
(ii)蚂蚁
k
(
k
=
1
,
2
,
.
.
.
,
m
)
k(k=1,2,...,m)
k(k=1,2,...,m)按照随机比例规则选择下一步要转移的城市,其选择概率为
p
i
j
k
(
t
)
=
{
[
τ
i
j
(
t
)
]
α
[
η
i
j
(
t
)
]
β
∑
s
∈
a
k
[
τ
i
s
(
t
)
]
α
[
η
i
s
(
t
)
]
β
,
j
∈
a
k
0
,
其他情况
p_{ij}^k(t)=\begin{cases} \frac{[\tau_{ij}(t)]^\alpha[\eta_{ij}(t)]^\beta}{\sum\limits_{s\in a_k}[\tau_{is}(t)]^\alpha[\eta_{is}(t)]^\beta},\quad &j\in a_k \\ 0,\quad &其他情况 \end{cases}
pijk(t)=⎩
⎨
⎧s∈ak∑[τis(t)]α[ηis(t)]β[τij(t)]α[ηij(t)]β,0,j∈ak其他情况
其中,
τ
i
j
\tau_{ij}
τij为边
(
i
,
j
)
(i,j)
(i,j)上的信息素;
η
i
j
=
1
d
i
j
\eta_{ij}=\frac{1}{d_{ij}}
ηij=dij1为从城市
i
i
i 转移到城市
j
j
j 的启发因子;
a
k
a_k
ak为蚂蚁
k
k
k 下一步被允许访问的城市集合。
(iii)为了不让蚂蚁选择已经访问过的城市,采用禁忌表 t a k ta_k tak 来记录蚂蚁 k k k 当前所走过的城市,经过 t t t 时刻,所有蚂蚁都完成一次周游。
(v)计算每只蚂蚁所走过的路径长度,并保存最短的路径长度,同时,更新各边上的信息素。
蚂蚁在它们所经过的边上释放信息素,其公式为
τ
i
j
=
(
1
−
ρ
)
τ
i
j
\tau_{ij}=(1-\rho)\tau_{ij}
τij=(1−ρ)τij
其中,
ρ
\rho
ρ 为信息挥发系数,且
0
<
ρ
≤
0
0<\rho≤0
0<ρ≤0。
τ
i
j
=
τ
i
j
+
∑
k
=
1
m
Δ
τ
i
j
k
\tau_{ij}=\tau_{ij}+\sum\limits_{k=1}^{m}\Delta\tau_{ij}^k
τij=τij+k=1∑mΔτijk
其中,
Δ
τ
i
j
k
\Delta\tau_{ij}^k
Δτijk 是第
k
k
k 只蚂蚁向它经过的边释放的信息素,定义为
Δ
τ
i
j
k
=
{
1
d
i
j
,
如果边
(
i
,
j
)
在路径
T
k
上
0
,
其他情况
\Delta\tau_{ij}^k=\begin{cases} \frac{1}{d_{ij}},\quad & 如果边(i,j)在路径T^k上 \\ 0,\quad &其他情况 \end{cases}
Δτijk={dij1,0,如果边(i,j)在路径Tk上其他情况
(vi) 蚂蚁完成一次循环后,清空禁忌表,重新回到初始城市,准备下一次周游。
② 精英蚂蚁系统
设计思想:对算法每次循环之后给予最优路径额外的信息素,找出这个解的蚂蚁称为精英蚂蚁。
将这条最优路径记为
T
b
s
T^{bs}
Tbs 。
针对路径
T
b
s
T^{bs}
Tbs 的额外强化是通过向
T
b
s
T^{bs}
Tbs 中的每一条边增加
e
L
b
s
\frac{e}{L_{bs}}
Lbse 大小的信息素得到的。
其中,
e
e
e 是一个参数,它定义了路径
T
b
s
T^{bs}
Tbs 的权值大小。
L
b
s
L^{bs}
Lbs 代表了
T
b
s
T^{bs}
Tbs 的长度。
这样相应的信息素更新公式为
τ
i
j
(
t
+
1
)
=
(
1
−
ρ
)
τ
i
j
(
t
)
+
∑
k
=
1
m
Δ
τ
i
j
k
(
t
)
+
e
Δ
τ
i
j
b
s
(
t
)
\tau_{ij}(t+1)=(1-\rho)\tau_{ij}(t)+\sum\limits_{k=1}^{m}\Delta\tau_{ij}^k(t)+e\Delta\tau_{ij}^{bs}(t)
τij(t+1)=(1−ρ)τij(t)+k=1∑mΔτijk(t)+eΔτijbs(t)
Δ
τ
i
j
b
s
(
t
)
\Delta\tau_{ij}^{bs}(t)
Δτijbs(t) 的定义为
Δ
τ
i
j
b
s
(
t
)
=
{
1
L
b
s
,
(
i
,
j
)
∈
T
b
s
0
,
其他情况
\Delta\tau_{ij}^{bs}(t)=\begin{cases} \frac{1}{L_{bs}},\quad & (i,j)\in T^{bs} \\ 0,\quad &其他情况 \end{cases}
Δτijbs(t)={Lbs1,0,(i,j)∈Tbs其他情况
优点:使用精英策略并选取一个适当的 e e e 值,不但可以得到更好的解,而且能够在更少迭代次数下得到一些更好的解。
③ 最大-最小蚂蚁系统
最大-最小蚂蚁系统是在蚂蚁系统算法的基础上,主要做出如下改进:
(i)将各条路径可能的外激素浓度限值在
[
τ
m
i
n
,
τ
m
a
x
]
[\tau_{min},\tau_{max}]
[τmin,τmax] ,超出这个范围的值将被强制设为
τ
m
i
n
\tau_{min}
τmin 或者是
τ
m
a
x
\tau_{max}
τmax.——避免过早收敛于局部最优解,避免某条路径上的信息量远大于其余路径,避免所有蚂蚁都集中到同一路径上。
(ii)信息素的初始值被设定为其取值范围的上界。——
ρ
\rho
ρ 取较小值时,算法有更好的发现较好解的能力。
(iii)强调对最优解的利用。每次迭代结束后,只有最优解所属路径上的信息被更新。
所有蚂蚁完成一次迭代后,对路径上的信息做全局更新,即
τ
i
j
(
t
+
1
)
=
(
1
−
ρ
)
τ
i
j
(
t
)
+
Δ
τ
i
j
b
e
s
t
(
t
)
,
ρ
∈
(
0
,
1
)
\tau_{ij}(t+1)=(1-\rho)\tau_{ij}(t)+\Delta\tau_{ij}^{best}(t), \rho\in (0,1)
τij(t+1)=(1−ρ)τij(t)+Δτijbest(t),ρ∈(0,1)
Δ
τ
i
j
b
e
s
t
(
t
)
=
{
1
L
b
e
s
t
,
如果边
(
i
,
j
)
包含在最优路径中
0
,
其他情况
\Delta\tau_{ij}^{best}(t)=\begin{cases} \frac{1}{L_{best}},\quad & 如果边(i,j)包含在最优路径中 \\ 0,\quad &其他情况 \end{cases}
Δτijbest(t)={Lbest1,0,如果边(i,j)包含在最优路径中其他情况
④ 基于排序的蚁群算法
基于排序的蚂蚁系统是对蚂蚁系统算法的一种改进。
改进思想:
(i)在每次迭代完成后,蚂蚁所经路径按从小到大排序,即
L
1
(
t
)
≤
L
2
(
t
)
≤
⋯
L
m
(
t
)
L^1(t)\le L^2(t)\le \cdots L^m(t)
L1(t)≤L2(t)≤⋯Lm(t) .
(ii)根据路径长度赋予不同的权重,路径长度越短权重越大。
(iii)全局最优解的权重为
w
w
w ,第
r
r
r 个最优解的权重为
m
a
x
{
0
,
w
−
r
}
max\{0,w-r\}
max{0,w−r}
则信息素更新规则为
τ
i
j
(
t
+
1
)
=
(
1
−
ρ
)
τ
i
j
(
t
)
+
∑
r
=
1
w
−
1
(
w
−
r
)
Δ
τ
i
j
r
(
t
)
+
Δ
τ
i
j
g
b
(
t
)
,
ρ
∈
(
0
,
1
)
\tau_{ij}(t+1)=(1-\rho)\tau_{ij}(t)+\sum\limits_{r=1}^{w-1}(w-r) \Delta \tau_{ij}^r(t)+\Delta\tau_{ij}^{gb}(t), \rho\in (0,1)
τij(t+1)=(1−ρ)τij(t)+r=1∑w−1(w−r)Δτijr(t)+Δτijgb(t),ρ∈(0,1)
其中
Δ
τ
i
j
r
(
t
)
=
1
L
r
(
t
)
,
Δ
τ
i
j
g
b
(
t
)
=
1
L
g
b
\Delta \tau_{ij}^r(t)=\frac{1}{L^r(t)}, \Delta \tau_{ij}^{gb}(t)=\frac{1}{L^{gb}}
Δτijr(t)=Lr(t)1,Δτijgb(t)=Lgb1
⑤ 蚁群系统
它与蚂蚁系统的不同之处主要有:
(i)除了全局信息素更新规则外,还采用了局部信息素更新规则。
(ii)信息素挥发和信息素释放动作只在至今最优路径的边上执行,即每次迭代之后只有至今最优蚂蚁被允许释放信息素。
(iii)采用不同的路径选择规则。
在蚁群系统中,位于城市
i
i
i 的蚂蚁
k
k
k ,根据伪随机比例规则选择城市
j
j
j 作为下一个访问城市。路径选择规则的公式为
j
=
{
a
r
g
m
a
x
l
∈
a
l
l
o
w
e
d
d
{
τ
i
l
[
η
i
l
]
β
}
,
q
≤
q
0
J
,
其他情况
j=\begin{cases}\mathop{argmax}\limits_{l\in allowed_d}\{{\tau_{il}[\eta_{il}]^\beta}\},\quad & q\le q_0 \\ J,其他情况 \end{cases}
j=⎩
⎨
⎧l∈alloweddargmax{τil[ηil]β},J,其他情况q≤q0
p
i
j
k
(
t
)
=
{
[
τ
i
j
(
t
)
]
α
[
η
i
j
(
t
)
]
β
∑
s
∈
a
k
[
τ
i
s
(
t
)
]
α
[
η
i
s
(
t
)
]
β
,
j
∈
a
k
0
,
其他情况
p_{ij}^k(t)=\begin{cases} \frac{[\tau_{ij}(t)]^\alpha[\eta_{ij}(t)]^\beta}{\sum\limits_{s\in a_k}[\tau_{is}(t)]^\alpha[\eta_{is}(t)]^\beta},\quad &j\in a_k \\ 0,\quad &其他情况 \end{cases}
pijk(t)=⎩
⎨
⎧s∈ak∑[τis(t)]α[ηis(t)]β[τij(t)]α[ηij(t)]β,0,j∈ak其他情况
其中,
q
q
q 是均匀分布在区间 [0,1] 中的一个随机变量;
q
0
(
0
≤
q
0
≤
1
)
q_0(0\le q_0\le 1)
q0(0≤q0≤1) 是一个参数;
J
J
J 是根据以上公式给出的概率分布产生出来的一个随机变量(其中
α
=
1
\alpha=1
α=1)
全局信息素更新规则为
τ
i
j
=
(
1
−
ρ
)
τ
i
j
+
ρ
Δ
τ
i
j
b
s
,
∀
(
i
,
j
)
∈
T
b
s
\tau_{ij}=(1-\rho)\tau_{ij}+\rho\Delta\tau_{ij}^{bs},{\forall}(i,j)\in T^{bs}
τij=(1−ρ)τij+ρΔτijbs,∀(i,j)∈Tbs
Δ
τ
i
j
b
s
=
1
C
b
s
\Delta\tau_{ij}^{bs}=\frac{1}{C^{bs}}
Δτijbs=Cbs1
局部信息素更新规则为蚂蚁每经过一条边
(
i
,
j
)
(i,j)
(i,j) ,都将立刻调用这条规则更新该边上的信息素,即
τ
i
j
=
(
1
−
ρ
)
τ
i
j
+
ξ
τ
0
\tau_{ij}=(1-\rho)\tau_{ij}+\xi\tau_0
τij=(1−ρ)τij+ξτ0
其中,
ξ
(
0
<
ξ
<
1
)
\xi(0<\xi<1)
ξ(0<ξ<1) ,
τ
0
\tau_0
τ0 是信息素量的初始值。
3.自适应蚁群算法
\quad
自适应蚁群算法建立了一种新的自适应地信息量更新策略。
根据解的分布情况自适应地进行信息量的更新。选择策略方面选择确定性选择和随机选择相结合的选择策略,并在搜索过程中动态调整确定性选择的概率。
自适应蚁群算法提出一种自适应的改变
τ
\tau
τ 值的方法。信息素更新公式为
{
τ
i
j
(
t
+
1
)
=
(
1
−
ρ
)
1
+
φ
(
m
)
+
Δ
τ
i
j
,
τ
≥
τ
m
a
x
τ
i
j
(
t
+
1
)
=
(
1
−
ρ
)
1
−
φ
(
m
)
+
Δ
τ
i
j
,
τ
<
τ
m
a
x
\begin{cases}\tau_{ij}(t+1)=(1-\rho)^{1+\varphi(m)}+\Delta \tau_{ij},\quad \tau\ge\tau_{max} \\ \tau_{ij}(t+1)=(1-\rho)^{1-\varphi(m)}+\Delta \tau_{ij},\quad \tau <\tau_{max} \end{cases}
{τij(t+1)=(1−ρ)1+φ(m)+Δτij,τ≥τmaxτij(t+1)=(1−ρ)1−φ(m)+Δτij,τ<τmax
其中,
φ
m
\varphi_m
φm 为连续收敛次数
m
/
c
m/c
m/c 。