蚁群算法初探(ACO)
简介
蚁群算法是模拟蚂蚁觅食的一种算法
基础蚁群算法(ACO)
设蚂蚁数量为
m
m
m,
d
i
j
(
i
,
j
=
1
,
2
,
⋯
,
n
)
d_{ij}(i,j=1,2,\cdots, n)
dij(i,j=1,2,⋯,n)表示城市
i
i
i到城市
j
j
j的距离,
b
i
(
t
)
b_i(t)
bi(t)表示在
t
t
t时刻位于城市
i
i
i的蚂蚁个数,且有
m
=
∑
i
=
1
n
b
i
(
t
)
m=\sum_{i=1}^nb_i(t)
m=∑i=1nbi(t),
τ
i
j
(
t
)
\tau_{ij}(t)
τij(t)表示
t
t
t时刻城市
i
i
i到
j
j
j连线残留的信息素。在初始时刻,
τ
i
j
(
0
)
=
C
\tau_{ij}(0) = C
τij(0)=C。蚂蚁
k
k
k在运行过程中,从城市
i
i
i到城市
j
j
j的概率为
p
i
j
k
=
{
τ
i
j
α
(
t
)
∗
η
i
j
β
(
t
)
∑
s
∈
a
l
l
o
w
e
d
k
τ
i
s
α
(
t
)
∗
η
i
s
β
(
t
)
,
j
∈
a
l
l
o
w
e
d
k
0
,
其它
p_{ij}^k=\begin{cases} \frac{\tau_{ij}^\alpha (t) * \eta_{ij}^\beta(t)}{\sum_{s \in allowed_k} \tau_{is}^\alpha(t)* \eta_{is}^\beta(t)}, \quad j \in allowed_k \\ 0, \quad 其它 \end{cases}
pijk=⎩
⎨
⎧∑s∈allowedkτisα(t)∗ηisβ(t)τijα(t)∗ηijβ(t),j∈allowedk0,其它
其中
η
i
j
=
1
d
i
j
\eta_{ij} = \frac{1}{d_{ij}}
ηij=dij1,
α
\alpha
α为信息素的比重,
β
\beta
β为启发信息的比重
信息素更新为
τ
i
j
(
t
+
1
)
=
(
1
−
ρ
)
τ
i
j
(
t
)
+
△
τ
i
j
△
τ
i
j
=
∑
k
=
1
m
△
τ
i
j
k
\begin{aligned} & \tau_{ij}(t+1) = (1 - \rho)\tau_{ij}(t) + \triangle \tau_{ij} \\ & \triangle \tau_{ij}= \sum_{k=1}^{m} \triangle \tau_{ij}^k \end{aligned}
τij(t+1)=(1−ρ)τij(t)+△τij△τij=k=1∑m△τijk
其中
ρ
\rho
ρ表示信息素
τ
i
j
(
t
)
\tau_{ij}(t)
τij(t)随时间减弱的程度,
ρ
∈
(
0
,
1
)
\rho \in (0,1)
ρ∈(0,1)
△
τ
i
j
k
\triangle \tau_{ij}^k
△τijk有下面的几种模型
- Ant-Cycle System
△ τ i j k = { Q L k , 第 k 只蚂蚁在本次循环中经过 i j 0 , 其他 \triangle \tau_{ij}^k = \begin{cases} \frac{Q}{L_k}, \quad 第k只蚂蚁在本次循环中经过ij \\ 0, \quad 其他 \end{cases} △τijk={LkQ,第k只蚂蚁在本次循环中经过ij0,其他 - Ant-Quantity System
△ τ i j k = { Q d i j , 第 k 只蚂蚁在时刻 t 和 ( t + 1 ) 之间经过 i j 0 , 其他 \triangle \tau_{ij}^k = \begin{cases} \frac{Q}{d_{ij}}, \quad 第k只蚂蚁在时刻t和(t+1)之间经过ij \\ 0, \quad 其他 \end{cases} △τijk={dijQ,第k只蚂蚁在时刻t和(t+1)之间经过ij0,其他 - Ant-Density System
△ τ i j k = { Q , 第 k 只蚂蚁在时刻 t 和 ( t + 1 ) 之间经过 i j 0 , 其他 \triangle \tau_{ij}^k = \begin{cases} Q, \quad 第k只蚂蚁在时刻t和(t+1)之间经过ij \\ 0, \quad 其他 \end{cases} △τijk={Q,第k只蚂蚁在时刻t和(t+1)之间经过ij0,其他
算法描述为
最大最小蚁群系统(MMAS)
有三个方面的改进
- 当所有的蚂蚁完成周游后,仅对蚂蚁发现的最后路径上的信息素进行更新,该方法称为全局信息素更新
- 每条边上的信息素限制在 [ τ m i n , τ m a x ] [\tau_{min}, \tau_{max}] [τmin,τmax]区间内
- 信息素初始化为 τ m a x \tau_{max} τmax
小窗口蚁群算法
限制每个城市可达的 w i n d o w window window个城市(即离最近的 w i n d o w window window个城市)。即为每个城市建立一个cityWin[window],保存window个距离最近的城市,每次移动从cityWin[window]和tabu[k]的交集中选择移动的城市
应用
蚁群聚类算法,有以下几种
- 基于蚂蚁觅食的蚁群聚类
- 基于蚂蚁堆形成的聚类算法
- 基于蚂蚁转移概率的k-means聚类算法
可以用在边缘检测问题上
注意
在计算得到蚂蚁在城市的转移概率 p i j k p_{ij}^k pijk后,到底是选择哪个城市可以使用概率累积和方式来选择哪个城市,先随机给出一个概率 r r r,在候选城市中,计算概率累积和,看 s u m j ∈ a l l o w e d k p i j > r sum_{j \in allowedk}p_{ij} \gt r sumj∈allowedkpij>r,在遍历过程中,选择此时的j即可。类似于matlab中的cumsum