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