蚁群优化算法ACO原理个人笔记

蚁群优化算法

1.1 回归现实世界 - 蚁群觅食

现实世界中,蚂蚁的觅食通常是基于蚁群进行;具体地,蚁群排成一列,群体合作进行搬运。也由此引出一个问题:它们是如何确定最终排列的这一列的?
实际上,在寻找以及搬运食物的最初,路线一定是不止一条的,但这不影响绝大多数的路线在搬运过程中被淘汰,最后仅留下一条固定的搬运路线。
而蚂蚁实现这一群体交互的方式即其自身分泌的信息素。信息素在运动过程中被留下,从而在协作中实现群体交流。那么,如果我们能通过类似的“信息素”再现这一过程,是否也能在群体控制中达到类似的效果呢?
再现的前提即充分的理解,因此首先我们要理解蚂蚁觅食中的一些决策。

  • 路径觅食路线选择:假设有一群蚂蚁从Start开始到Dest寻找食物,有A,B,C三条路可以走,其中A,B路等长,则能发现,一段时间后,A,B路的蚂蚁数量基本相等,而C路的蚂蚁会越来越少!

在这里插入图片描述

  • 路径选择分析:假设一开始的蚂蚁都不知道全体路况,然后有三只蚂蚁分别探路,它们都随机选择了一条路开始觅食。为了分析便利,此处进行下列几个假设:
    • 每只蚂蚁速度相当且为一个L单位/单位时间;
    • 蚂蚁每一次经过一个点均留下一单位“信息素”(随时间挥发)。
  • 则在这个情况下,当走C的蚂蚁拿到一次食物并搬回时,走A,B路径的蚂蚁已经往返两次,从而A,B两点已经有蚂蚁往返两次所留下的4个单位的“信息素”;而C路径的蚂蚁才实现一次往返,此时C点仅有2个单位的“信息素”,目前“信息素”比例为 2:2:1
  • 因此,其余蚁群大概得到A,B路径比C更快的信息,从而向A,B路径增派一只蚂蚁(此时,A,B路各有2只蚂蚁),C路径则不会有蚂蚁增派,这样再经历8个单位时间后,A,B路径已经有(4+2*4=12)个“信息素”,而C路径只有4个,此时的比例变为3:3:1
  • 按照这样的情况继续搬运,最终所有的蚂蚁都会选择走A,B路径,C路径会在过程中被放弃。

1.2 蚁群活动形式化 - 蚁群算法(Ant Colony Optimization)

  • ACO:适用于在图上搜寻最优路径的解空间搜索方法。

ACO问题抽象化:在解空间中遍历搜寻最优解

觅食过程蚁群优化算法过程
蚁群规模搜索有效解的种群规模
觅食空间问题空间(维度等)
信息素信息浓度变量
所有的路径解空间
最短觅食路径最优解

ACO形式化:

  1. 在路径释放信息素;
  2. 碰到未遍历路径则随机挑选,同时释放与路径长有关的信息素;
  3. 信息素浓度与路径长反比;后续蚂蚁再碰到路口则选择信息素浓度高路径;
  4. 多轮遍历中最优路径的信息素浓度逐渐变高,从而寻得最优路径。

ACO算法流程:解决旅行商问题

旅行商问题(TSP):一位旅者要旅行n个城市,要求为在每个城市仅经历一次后回到出发城市,且在此基础上总路程最短。类似的组合优化问题都可以使用蚁群优化算法进行解决。

  • 算法参数初始化:蚁群规模,信息素及挥发因子,最大迭代次数,启发函数因子等;
  • 问题预处理:传入参数,并将问题空间转化(如不同节点间到达关系转化为图等);
  • 将“蚂蚁”随机置放于不同出发点,对每个“蚂蚁”计算下一个访问点,直至其遍历完全部节点;
  • 计算“蚂蚁”径路长度 l k l_k lk,记录当前迭代次数下最优解同时更新路径信息素浓度;
  • 若到达最大迭代次数或设置早停机制且满足则结束算法,否则开启下一轮迭代。

在这里插入图片描述


1.3 ACO在旅行商问题中的应用

  • 问题形成

    • N个城市间的有向图 G = ( N , A ) G=(N, A) G=(N,A),其中 N = { 1 , 2 , . . . , n } , A = { ( i , j ) ∣ i , j ∈ N } N=\{1,2,...,n\}, A=\{(i, j)| i, j \in N\} N={1,2,...,n},A={(i,j)i,jN};
    • 城市间距离为 d i j d_{ij} dij,即i到j节点距离;
    • 优化目标 f ( w ) = ∑ l = 1 n d i l − 1 d i l f(w)=\sum_{l=1}^n d_{i_l-1}d_{i_l} fw=l=1ndil1dil,即每个城市都遍历一次的总路程, w = ( i 1 , i 2 , . . . , i n ) w=(i_1, i_2, ..., i_n) w=(i1,i2,...,in)为城市的一个排列(即任意一个可行解);
  • 路径构建

    • 首先,算法会将m只蚂蚁随机放置在n个节点上,同时使其移动。在每一轮移动前,蚂蚁都会根据信息素去计算移动到下一城市概率。如,当前位于节点i的蚂蚁k选择下一个节点为j的概率为: p i j k ( t ) = ( I i j ( t ) ) α ( η i j ( t ) ) β ∑ k ∈ a l l o w e d ( I i j ( t ) ) α ( η i j ( t ) ) β p_{ij}^k(t) = \frac{(I_{ij}(t))^\alpha (\eta_{ij}(t))^\beta} {\sum_{k\in{}allowed} (I_{ij}(t))^\alpha (\eta_{ij}(t))^\beta} pijk(t)=kallowed(Iij(t))α(ηij(t))β(Iij(t))α(ηij(t))β

    • 公式中,利用了类softmax的比例来表示选择概率,也说明了信息素浓度越大则选择概率也越大,即城市间距越短,选择概率越大。在公式内,选择也受到一定的权重控制,即 α β \alpha \beta αβ.

      • I i j ( t ) I_{ij}(t) Iij(t)表示t时刻于边 ( i , j ) (i,j) (i,j)的信息素浓度;
      • η i j ( t ) = 1 / d i j \eta_{ij}(t) = 1/d_{ij} ηij(t)=1/dij 即基于距离的启发信息;
      • α β \alpha \beta αβ为常数,用于控制信息素与启发信息的相对权重。
  • 迭代更新

    • 由于城市间距信息为定值,则若信息素不变,每只蚂蚁在同一城市所会做出的选择就已经固定,因此每轮的更新需要通过更新信息素 I i j ( t ) I_{ij}(t) Iij(t)实现,即对应现实中的信息素挥发。
      • 初始化:初始化全部边信息素浓度为常数 c c c,此处需要注意初始值大小应适当:过小则无法影响启发信息,体现不了信息素的指导作用;过大则覆盖启发信息,容易陷入局部最优;
      • 每一轮迭代后模拟信息素挥发,避免信息素积累同时丢弃早期构建的较长路径;
      • 根据该轮每只蚂蚁的路径长度释放信息素,路径越短则信息素越多;参与轮数越多的蚂蚁获得的信息素也越多。
      • 信息素的更新公式: Δ I i j k = Q L k \Delta_{I_{ij}}^k = \frac{Q}{L_k} ΔIijk=LkQ I i j ( t + 1 ) = δ I i j ( t ) + Δ I i j I_{ij}(t+1) = \delta I_{ij}(t)+\Delta_{I_{ij}} Iij(t+1)=δIij(t)+ΔIij Δ I i j = ∑ k = 1 m Δ I i j k \Delta_{I_{ij}}=\sum_{k=1}^m \Delta_{I_{ij}}^k ΔIij=k=1mΔIijk
      • Q为常数, L k L_k Lk为蚂蚁在该轮走过的路径长度, Q / L k Q/L_k Q/Lk即为第k只蚂蚁在路径上留下的平均信息素, δ \delta δ为小于1的常数(即体现信息素的挥发)。
      • 则,信息素的更新即,新的信息素浓度等于上一时刻信息素浓度的 δ \delta δ倍(挥发),再加上本轮迭代中蚂蚁在该路径新释放的信息素浓度和。

个人笔记,侵删。

参考链接:【智能优化算法】蚁群算法ACO
参考链接:蚁群优化算法(ACO)详细介绍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值