最大最小蚁群算法的理解

蚁群算法

维基百科

蚁群算法(Ant Colony Optimization, ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的几率型算法。它由Macro Dorigo 与1992年的博士论文中提出,其灵感来源于蚂蚁在寻找食物过程中发现路径的行为。蚁群算法是这一种模拟进化算法,初步的研究表明该算法具有许多优良的性质。

自然界中,蚂蚁的食物总是随机散布于蚁巢周围。仔细观察就会发现,经过一段时间后,蚂蚁总能找到一条从蚁巢到食物源的最短路径。

主要原理:蚂蚁在一开始时,会以相同的概率选择路线,在运动过程中,能够在其经过的路径上留下信息素,而且能感知这种物质的存在以及强度,并以此指导自己的运动方向,蚂蚁倾向于往信息素浓度高的方向移动。在相等时间内,较短路径上的信息量就遗留的比较多,则选择较短路径的蚂蚁也随之增多。蚂蚁群体行为表现出了一种信息正反馈现象,即某一路径上走过的蚂蚁越多,则后来者选择该路径的概率就越大,蚂蚁个体之间就是通过这种信息交流机制来搜索食物,并最终沿着最短路径行进。

蚁群算法模型的建立

  • 蚂蚁个体的抽象
  • 问题空间的描述
  • 寻找路径的抽象
  • 信息素挥发的抽象
  • 启发因子的引入

蚁群算法解决TSP(Travelling Salesman Problem)

假设n为城市规模, i i i j j j为任意两个城市, d i j d_{ij} dij表示城市之间的距离, b i ( t ) b_i(t) bi(t)表示t时刻在城市 i i i蚂蚁的数量,则 m = ∑ i = 1 n b i ( t ) m=\sum_{i=1}^nb_i(t) m=i=1nbi(t)表示蚂蚁的总数量。在遍历过程中,把蚂蚁经过一个城市称为一次迭代,遍历n个城市需要n次迭代(每只蚂蚁下次总是走之前没走过的城市,有个禁忌表记录走过的城市)。蚂蚁系统采用 τ i j ( t ) \tau_{ij}(t) τij(t)来模仿 t t t时刻路径 i i i j j j上面的信息素残留量。类似于蚂蚁觅食过程,每条路径上面的信息素会挥发,如果有蚂蚁经过的时候,信息素的浓度会相应的增加。因此,蚂蚁系统中的信息素浓度的更新公式为:
τ i j ( t + n ) = ρ ⋅ τ i j ( t ) + Δ τ i j \tau_{ij}(t+n) = \rho \cdot \tau_{ij}(t) + \Delta\tau_{ij} τij(t+n)=ρτij(t)+Δτij
式中, ρ \rho ρ是一个0到1的数字,(1- ρ \rho ρ)为挥发因子。另外, Δ τ i j \Delta\tau_{ij} Δτij表示一次旅行(遍历所有城市)后,所有路径 i i i j j j的蚂蚁留下的信息素的总量,即:
Δ τ i j = ∑ k = 1 m Δ τ i j k \Delta\tau_{ij}=\sum_{k=1}^m\Delta\tau_{ij}^k Δτij=k=1mΔτijk
式中, Δ τ i j k \Delta\tau_{ij}^k Δτijk表示第k只蚂蚁在路径 i i i j j j上面留下的信息素量。如果第k只蚂蚁经过路径 i i i j j j,则
Δ τ i j = Q / L k \Delta\tau_{ij} = Q/L_k Δτij=Q/Lk
式中,Q为一个常数, L k L_k Lk为蚂蚁已经走过路径的总长度。否则,第K只蚂蚁在 i i i j j j上面留下来的信息量为0。
然后就是启发因子的引入, η i j = 1 / d i j \eta_{ij}=1/d_{ij} ηij=1/dij。通过结合信息素和启发因子,可以得到蚂蚁选择路径 i i i j j j的概率为:
p i j k ( t ) = { [ τ i j ( t ) ] α [ η i j ] β ∑ k ∈ a l l o w e d [ τ i k ( t ) ] α [ η i k ] β j ∈ a l l o w e d k 0 e l s e p^k_{ij}(t) = \begin{cases} \frac{[\tau_{ij}(t)]^\alpha[\eta_{ij}]^\beta}{\sum_{k\in allowed }[\tau_{ik}(t)]^\alpha[\eta_{ik}]^\beta} &j\in allowed_{k} \\ 0 & else \end{cases} pijk(t)={ kallowed[τik(t)]α[ηik]β[τij(t)]α[ηij]β0jallowedkelse
式中 α \alpha α β \beta β是调节因子,调节 τ i j ( t ) \tau_{ij}(t) τij(t) η i j \eta_{ij} ηij的作用大小。 a l l o w e d k allowed_{k} allowedk表示蚂蚁k还没有走过的路径。所以如果信息浓度 τ i j ( t ) \tau_{ij}(t) τij(t)越大、路径长度越短(对应 η i j \eta_{ij} ηij越大),则路径被选择的概率就越大
求解TSP问题的蚁群算法中的人工蚂蚁具有以下特点:

  1. 他们概率性地选择下一条路径,该概率与路径长度和路径上的信息素浓度有关;
  2. 为了保证解的逻辑可行,蚂蚁不允许选择已经走过的路径(通过禁忌表实现);
  3. 蚂蚁走过一条路径时会在该路径上面分泌一种叫做信息素的物质。

蚁群算法求解TSP问题的直观理解就是:

  1. m只蚂蚁遍历禁忌表Tabu(mxn)分别走遍n个城市,称为一次迭代
  2. 每只蚂蚁根据信息素浓度和启发式因子计算概率p来选择下一座城市
  3. 禁忌表Tabu(mxn)经过一次迭代就更新一次
  4. 信息素浓度Tau(nxn)经过一次迭代就更新一次

最大最小蚁群算法

最大最小蚁群算法与普通蚁群算法区别不大,主要是每条路径上的信息素浓度都有个最大值最小值,每次更新都保证信息素浓度在[min,max]区间范围内。最小信息素能增加对最优解探索的可能性(exploration),而最大信息素浓度保证经验对于蚂蚁的启发性(exploitation)。
每次都蒸发,但是每次蒸发后只有最优路径上的信息素会增加。这样的收敛速度会更快

参考

  1. https://zh.wikipedia.org/wiki/%E8%9A%81%E7%BE%A4%E7%AE%97%E6%B3%95
  2. 段海滨. 蚁群算法原理及其应用[M]. 科学出版社, 2005.
  3. https://zhuanlan.zhihu.com/p/95782157
  4. https://blog.csdn.net/acsunqi/article/details/76060669

猜你喜欢

转载自blog.csdn.net/Fei20140908/article/details/108502568