1. 蚁群算法概述
1.1. 蚁群算法的概念
蚁群算法(ant colony optimization,ACO)又称为蚂蚁算法,是对自然界蚂蚁寻径方式进行模拟而得出的一种仿生算法,也是一种用来在图中寻找优化路径的机率型算法。
蚂蚁系统是最早提出的群类算法,是对真实蚁群协作过程的模拟,目前所有的蚁群算法的核心思想都是基于蚂蚁系统。
在二十世纪九十年代初期,意大利学者M.Dorigo,V.Maniezzo,A.Colorni等从蚂蚁觅食的自然现象中发现,蚂蚁在觅食过程中留下一种外激素(又叫信息素),以便在回巢时不至于迷路,而且方便找到回巢的最好路径。由此M.Dorigo等人首先提出来一种新的启发式优化算法,又叫蚁群系统(Ant Colony System),这种算法是目前国内外启发式算法中的研究热点和前沿课题,被成功地运用于旅行商问题的求解,蚁群算法在求解复杂优化问题方面具有很大的优越性和广阔的前景。
2. 蚁群算法原理
2.1. 生理学机理
2.1.1. 蚂蚁的社会体制
蚂蚁有复杂的社会体制,在上千万个成员中,等级森严,一般分为蚁后、雄蚁、工蚁和兵蚁四种。
蚁后:体型最大,主要职责是产卵、繁殖后代和统治这个群体大家庭。
雄蚁:负责与蚁后交配的蚂蚁,交配完后不久死掉。
工蚁:没有生殖能力的雌性蚂蚁,负责搜寻食物,照顾蚁卵。
兵蚁:没有生殖能力的雌性蚂蚁,负责抵抗外蚁或打仗。
蚁群算法主要是根据工蚁的觅食行为而提出的。
2.1.2. 蚂蚁觅食
- 蚂蚁没有发育完全的视觉感知系统,甚至很多种类完全没有视觉,他们在寻找食物的过程中是如何选择路径的呢?
- 蚂蚁往往像军队般有纪律、有秩序的搬运食物,他们是通过什么方式进行群体间的交流协作呢?
- 大部分的蚂蚁都是按照途中的最近的路线走,小小的蚂蚁是如何有这么高的智能的呢?
蚂蚁个体之间是利用信息素(pheromone)作为介质来相互交流、合作的。蚂蚁在运动过程中,能够在它所经过的路径上留下该物质,并指导自己的运动方法,蚂蚁倾向于朝着该物质强度高的方向移动。
由大量蚂蚁组成的蚁群的集体行为便表现出一种信息正反馈现象:某一路径上走过的蚂蚁越多,则后来者选择该路径的概率就越大,蚂蚁个体之间就是通过这种信息的交流达到搜索食物的目的。

2.1.3. 简化的蚂蚁觅食过程
如图所示,蚂蚁从蚁巢到食物,有ABD和ACD两条路径,后者距离是前者距离的两倍。
- 假设初始时每条路径上各有一只蚂蚁,用2个时间单位走完ABD路径,即往返一次ABD的时间单位为4,往返一次ACD的时间单位为8。若蚂蚁每走一次留下一个单位的信息素,则经过8个时间单位后,两只蚂蚁均取得食物返回A点。
- 此时路径ABD往返了两趟,留下4个信息素,而路径ACD往返了一趟,留下2个信息素,其比值为2:1。
- 寻找食物的过程继续进行。按照信息素的指导,蚁群在ABD路径上增派一只蚂蚁。
- 再经过8个时间单元后,两条路径上的信息素累计分别为12和4,比值为3:1。
- 若继续进行,最终所有蚂蚁均会放弃ACD路径,而选择ABD路径。

2.2. 蚁群算法原理
蚂蚁觅食和蚁群算法的对应关系:

自然蚁群和人工蚁群的区别:
- 人工蚁群有一定的记忆能力,能够记忆已经访问过的节点;
- 人工蚁群选择下一条路径的时候是按一定算法规律有意识地寻找最短路径,而不是盲目的。例如在旅行商TSP问题中,可以预先知道当前城市到下一个目的地的距离。
蚁群算法是一种随机搜索算法,通过候选解组成的群体的进化过程来寻求最优解,该过程包括两个阶段:适应阶段和协助阶段。
- 适应阶段:各候选解根据积累的信息不断调整自身结构;
- 协助阶段:候选解之间通过信息交流,以期望产生性能更好的解。
蚁群算法不需要任何先验知识,最初只是随机选择搜索路径,随着对解空间的“了解”,搜索变得有规律,并逐渐逼近直至最终达到全局最优解。蚁群算法对搜索空间的“了解”机制主要包括三个方面:
- 蚂蚁的记忆
- 蚂蚁利用信息素进行相互通信
- 蚂蚁的集群活动
蚁群算法求解旅行商TSP问题:设 是在 t 时刻城市 i 的蚂蚁数,设
为全部蚂蚁数,每个简单蚂蚁具有以下特征:
- 它根据以城市距离和连接边上外激素的数量为变量的概率函数选择下一个城市,设τij(t)为t时刻边e(i,j)上的外激素的强度。
- 规定蚂蚁走合法路线,除非周游完成,不允许转到已访问城市,由禁忌表控制(设tabuk表示第k个蚂蚁的禁忌表,tabuk(s)表示禁忌表中第s个元素)。
- 它完成周游后,蚂蚁在它每一条访问的边上留下外激素。
初始时刻,各条路径上的信息量相等,设τij(0)=c (C为常数)。蚂蚁k(k=1,2,....m)在运动过程中,根据各条路径上信息量决定转移方向,用 表示在t时刻蚂蚁k由城市i转移到城市j的概率,

其中:
- allowedk表示蚂蚁下一步能选择的城市集合
- ηij(t)表示边弧(i,j)的能见度,用某种启发式算法算出,一般等于1/dij,dij表示城市i与城市j之间的距离
- τij(t)表示t时刻路径上的信息素量
- α和β为预先设置的两个参数。α反映轨迹的相对重要性。β反映能见度的相对重要程度。
蚂蚁释放的信息素会随时间的推进而减少,当所有蚂蚁完成一次循环后,各个城市间连接路径上的信息素浓度需要实时更新。

式中:
表示时刻 t 支路 ij 上的信息素量;
表示本次周游中路径 ij 上的信息素增量;
表示第k只蚂蚁在周游过程中释放在路径 ij 上的信息素,其值视蚂蚁表现的优劣程度而定;
𝜌 为信息素的挥发系数,表征信息素的挥发快慢, 0 < 𝜌 < 1;
𝑸 为总信息量,代表蚂蚁遍历一次所释放的信息素总量,一般为常数;
𝑳𝒌 表示本次周游第k只蚂蚁所形成的TSP回路长度。
的表达形式可以不同,要根据具体问题而定。M.Dorigo 曾给出三种不同模型,分别称为ant-cycle system,ant-quantity system和ant-density system,它们的差别在于计算
的公式不同。
1. 在ant-cycle system模型中:

2. 在ant-quantity system模型中:

3. 在ant-density system模型中:

它们的区别在于:后两种模型中,利用的是局部信息,而前者利用的是整体信息,在求解TSP问题时,性能较好,因而通常采用它为基本模型。
2.3. 蚁群算法求解TSP的基本步骤
- nc = 0(nc为迭代步数或搜索次数);将 m 个蚂蚁置于 n 个顶点上;
- 将各蚂蚁的初始出发点置于当前解集中,对每个蚂蚁 k ( k = 1,2....,m ),按概率
移至下一顶点 j 并将顶点 j 置于当前解集,直至每个蚂蚁都完成一次周游;
- 计算各蚂蚁的路径长度 Lk ( k = 1,2,..,m ),并记录当前的最好解;
- 按更新方程修改轨迹强度;
- 对各边弧 (i,j),置 Δτij(t) 为 0,nc = nc + 1;
- 若 nc < 预定的迭代次数且无退化行为则转步骤 2;
- 输出目前最好解。
2.4. 蚁群算法参数分析

蚁群数量m:
- m较小时,会使未走过的路径上的信息素减小到接近零,即搜索的随机性减弱,虽然收敛速度加快,但全局性能降低,稳定性较差,且易于过早停滞。m较大时,会使曾被搜索过的路径上的信息素过于平均,收敛速度减慢。一般取m=n。
信息素启发因子α:
- 反映蚂蚁在运动过程中积累的信息素对蚂蚁运动所起的启发作用。值越大,表明蚂蚁选择路径时路径的信息素越重要,信息素积累越多的路径可能性越大。值越小,原信息素的影响越小。若ɑ=0,信息素就不起作用,算法演变为传统的随机贪婪算法,最邻近城市被选中的概率最大。一般ɑ=1~2。
自启发因子β:
反映了启发函数的重要程度。其值越大,表示启发函数在转移中的作用越大,即蚂蚁以较大的概率转移到距离短的城市,算法会很快找到最优解,但易陷入局部最优。其值过小,将导致蚁群陷入随机搜索,很难找到最优解,且收敛速度慢。在一般情况下,β=2~5。
信息素挥发系数ρ:
也称为信息素的蒸发率,体现了蚂蚁的记忆功能。1-ρ称为信息素的残留系数。其值大,说明残留信息减少,随机性增强,利于发现更多最优解,但收敛速度降低。其值减小,残留信息增多,正反馈增强,随机性减弱,易陷入一个范围狭小的搜索空间。虽然收敛速度加快,但搜索质量不高。
禁忌表:
为了避免蚂蚁重复走进同一个城市而设计的数据结构表。设 tabu𝑘 为蚂蚁 k 的禁忌表,则蚂蚁 k 经过城市 i 后,就将该城市加入到自己的禁忌表中,表示下一次不再选择城市 i 。完成一次周游之后,即遍历 n 个城市后,清空禁忌表。
启发函数:
也称为为先验知识能见度,一般定义为距离的倒数。两个城市间的距离越近,能见度越高,被选择的可能性越大,由此引导蚂蚁进行搜索。由于这种信息是固定不变的,故一般称为先验知识或启发信息。
总信息量Q:
蚂蚁遍历一次所释放的信息素总量,其值越大,信息素积累越多,收敛速度越快。
终止条件:
1. 给定一个外循环的最大数目,表明已经有足够的蚂蚁工作。
2. 当前最优解连续 K 次相同而停止。其中 K 是一个给定的整数,表示算法已经收敛,不再需要继续。
3. 目标值控制规则,给定优化问题(目标最小化)的一个下界和一个误差值,当算法得到的目标值同下界值之差小于给定误差时,算法终止。
3. 蚁群算法特点
3.1. 蚁群算法的优点:
- 较强的鲁棒性:对蚁群算法模型稍加修改,便可以应用于其它问题。
- 分布式计算:该算法是一种基于种群的拟生态系统算法,具有本质并行性,易于并行实现。
- 易于与其他方法结合:该算法很容易与多种启发式算法结合,以改善算法的性能。
- 蚁群算法是一种本质上并行的算法。每只蚂蚁搜索的过程彼此独立,仅通过信息激素进行通信。它在问题空间的多点同时开始进行独立的解搜索,不仅增加了算法的可靠性,也使得算法具有较强的全局搜索能力。
3.2. 基本蚁群算法的缺点:
- 需要较长的计算时间,容易出现停滞现象。
- 所有通过路段的搜索路径对应的候选解均会对该路段带来信息素的增量。而实际上,候选解并非都是最好解,这样计算信息素的增量会导致错误的引导信息,从而造成大量的无效搜索,使系统出现停滞现象。
- 采用了信息素均匀分配策略,即对已搜索路径中的所有路段采用同样的信息素增量,与路段的重要性无关,没有考虑当连续空间优化问题转换到有向图搜索问题时,信息素分配给可行解带来的尺度变化对于连续解空间搜索效率的影响。
3.3. 与遗传算法的比较:
- 遗传算法仅使用由目标函数变换来的适应度函数值就可确定进一步搜索的方向和范围,而不需要目标函数的导数值等信息;蚁群算法由释放的信息素和启发式信息选择下一步的路径。
- 蚁群算法比遗传算法具有更强的发现较好解的能力。由于算法本身采用正反馈原理,求解精度更高,加快了进化过程。
- 遗传算法适合求解离散问题,具备数学理论支持,但是存在着 hamming悬崖等问题。蚁群算法适合在图上搜索路径问题,计算开销大,并且容易出现停滞现象。
3.4. 与粒子群算法的比较:
- 粒子群算法是一种单项信息共享机制。而ACO 算法中,每个个体只能感知局部的信息,不能直接使用全局信息。
- 粒子群算法相对于 ACO 算法,粒子只是通过内部速度进行更新,因此原理更简单、参数更少、实现更容易。
- 蚁群算法己经有了较成熟的收敛性分析方法,并且可对收敛速度进行估计;而 PSO 算法这方面的研究还比较薄弱。尽管已经有简化确定性版本的收敛性分析,但将确定性向随机性的转化尚需进一步研究。
- 粒子群算法主要应用于连续问题,包括神经网络训练和函数优化等,而全局 ACO算法除了连续问题之外,还可应用于离散问题,如 TSP 问题、工作车间调度等。
4. 蚁群算法求解空间信息问题
以基于TSP的旅游规划求解问题为例
给定4个城市及两两城市之间的距离,有一旅行商从某一城市出发,访问各城市一次且仅一次后再返回出发城市,要求找到一条最短的巡回路径。

以旅行商问题(TSP)说明蚁群算法的基本原理:
四个城市A、B、C、D之间的位置和距离矩阵如下:

假设蚂蚁种群的规模m=3,参数ɑ=1,β=5,ρ=0.1。
Step1:初始化参数。
初始化所有边上的信息素 ;
Step2:构建解空间
Step2.1选择出发城市:首先将所有蚂蚁随机放到某个城市,每只蚂蚁的禁忌表为蚂蚁当前所在城市,禁忌表体现了蚂蚁的记忆力,使得蚂蚁不会走重复道路,提高效率。为每只蚂蚁随机选择出发城市,假设蚂蚁1选择城市C,蚂蚁2选择城市B,蚂蚁3选择城市C。
Step2.2为每只蚂蚁选择下一个城市:
长度越短、信息素浓度越大的路径被蚂蚁选择的概率越大。
在t时刻蚂蚁k从城市i转移到城市j的概率为 :

式中,
表示蚂蚁当前能选择的城市集合;
为先验知识能见度或称启发函数,在TSP问题中为城市转移到城市的启发信息,一般取
,
表示路径 ij 的长度;
表示 t 时刻路径上的信息素量,在 t=0 时刻,各条路径上的信息素相等,即
;
α和β为预先设置的两个参数。α反应路径ij上残留信息的重要程度,表示蚂蚁在运动过程中所积累的信息量对蚂蚁运动所起的启发作用。β反映启发信息的重要程度,表示蚂蚁在运动过程中启发信息对蚂蚁运动所起的作用。
选择第二个访问城市:

以蚂蚁 1 为例,当前城市 i=C,可访问城市集合 J1(i)={A,B,D}。按上述城市转移公式计算蚂蚁 1 选择 A,B,D 作为下一访问城市的概率:

以 蚂蚁2 为例,当前城市 i=B,可访问城市集合 J2(i)={A,C,D}。按上述城市转移公式计算 蚂蚁2 选择 A,C,D 作为下一访问城市的概率:

以 蚂蚁3 为例,当前城市 i=C,可访问城市集合 J3(i)={A,B,D}。按上述城市转移公式计算 蚂蚁3 选择 A,B,D 作为下一访问城市的概率:

用轮盘赌法选择下一城市。
产生的随机数 q1=random(0,1)=0.9005,则 蚂蚁1 将会选择城市 D。即 蚂蚁1 现在走过 C→D。
用同样的方法为 蚂蚁2和3 选择下一访问城市,随机数 q2=0.3201,蚂蚁2 选择城市 A。即 蚂蚁2现在走过 B→A。
随机数 q3=0.6233,蚂蚁3 选择城市B。即 蚂蚁3 现在走过C→B。
Step2.3构建完整路径:当前 蚂蚁1 所在城市 i=D,路径记忆向量 R1=(CD),可访问城市集合 J(i)={A,B}。计算 蚂蚁1 选择 A,B 作为下一城市的概率:

产生的随机数 q=random(0,1)=0.67,则 蚂蚁1 将会选择城市B,此时 蚂蚁1 经过路径为 C→D→B。
用同样的方法为 蚂蚁2(当前在 A 城市)选择下一访问城市。

假设蚂蚁2选择了城市C,此时蚂蚁2经过路径为B→A→C。
为蚂蚁3(当前在B城市)选择下一访问城市。

假设蚂蚁3选择了城市D,此时经过蚂蚁3经过路径为C→B→D。
实际上此时路径已经构造完毕,蚂蚁1构建的路径为(CDBAC),蚂蚁2构建的路径为(BACDB),蚂蚁3构建的路径为(CBDAC)
Step3信息素更新:
1)信息素挥发(evaporation):信息素的挥发过程是每个连接上的信息素痕迹的浓度自动逐渐减弱的过程,由 表示,这个挥发过程主要用于避免算法过快地向局部最优区域集中,有助于搜索区域的扩展。
2)信息素增强(reinforcement):增强过程是蚁群优化算法中可选的部分,分为离线更新方式和在线更新方式。第一种是在某只蚂蚁或蚁群完成n个城市的访问后,统一对残留信息进行更新处理。第二种是蚂蚁每行走一步,立即回溯并且更新行走路径上的信息素。
信息素增强过程体现在观察蚁群中每只蚂蚁所找到的路径,并选择其中最优路径上的弧进行信息素的增强,挥发过程是所有弧都进行的,与蚂蚁数量无关。
蚂蚁释放的信息素会随时间的推进而减少,当所有蚂蚁完成一次循环后,各个城市间连接路径上的信息素浓度需要实时更新。

式中 表示时刻 t 支路 ij 上的信息素量;
表示本次周游中路径 ij 上的信息素增量;
为信息素的挥发系数,表征信息素的挥发快慢,
;
表示第 k 只蚂蚁在周游过程中释放在路径 ij 上的信息素,其值视蚂蚁表现的优劣程度而定。
路径越短释放的信息素就越多,即:

式中,Q 为总信息量,代表蚂蚁遍历一次所释放的信息素总量, 一般为常数;
表示本次周游第 k 只蚂蚁所形成的回路长度。
先计算每只蚂蚁目前构建的路径长度:

再根据信息素更新公式更新每条边上的信息素:

蚂蚁路径长度:;
蚂蚁行走路径:R1=(CDBAC),R2=(BACDB),R3=(CBDAC)
则有:


此时信息素矩阵为:

至此第一次迭代完成。
Step4判断是否满足结束条件:则输出全局最优结果并结束程序,否则清空蚂蚁经过路径的记录表,返回Step2.1继续执行。
本例迭代120次的结果如下图所示:


迭代结果A->C->D->B对应为长沙->景德镇->南京->武汉。

4233

被折叠的 条评论
为什么被折叠?



