简介

蚁群算法是模拟蚂蚁觅食的一种算法

基础蚁群算法(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时刻城市iiijjj连线残留的信息素。在初始时刻,τ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= sallowedkτisα(t)ηisβ(t)τijα(t)ηijβ(t),jallowedk0,其它
其中η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=1mτ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 rsumjallowedkpij>r,在遍历过程中,选择此时的j即可。类似于matlab中的cumsum

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐