蚁群算法原理及实现

1. 蚁群算法

1.1蚁群算法发源及基本原理

蚁群算法是一种源于大自然生物世界的新的仿生进化算法,是由意大利学者. Dorigo , V . Maniezzo 和 A . Colorni 等人于20世纪90年代初期通过模拟自然界中蚂蚁集体寻径行为而提出的一种基于种群的启发式随机搜索算法。蚂蚁有能力在没有任何提示的情形下找到从巢穴到食物源的最短路径,并且能随环境的变化,适应性地搜索新的路径,产生新的选择。其根本原因是蚂蚁在寻找食物时,能在其走过的路径上释放信息素也称外激素,随着时间的推移该物质会逐渐挥发,后来的蚂蚁选择该路径的概率与当时这条路径上的信息素强度成正比。当一条路径上通过的蚂蚁越来越多时,其留下的信息素也越来越多,后来蚂蚁选择该路径的概率也就越高,从而更增加了该路径上的信息素强度。而强度大的信息素会吸引更多的蚂蚁,从而形成一种正反馈机制。通过这种正反馈机制,蚂蚁最终可以发现最短路径。

1.2 蚁群算法的特点

蚁群算法是通过对生物特征的模拟得到的一种优化算法,它本身具有很多优 点:

(1) 蚁群算法是一种本质上的并行算法。每只蚂蚁搜索的过程彼此独立,仅通过信息激素进行通信。所以蚁群算法可以看作一个分布式的多智能体系统,在问题空间的多点同时开始独立的解搜索,不仅增加了算法的可靠性,也使得算法具有较强的全局搜索能力。

(2)蚁群算法是一种自组织的算法。所谓自组织,就是组织力或组织指令来自系统的内部,无需外部指令。如果系统在获得空间、时间或者功能结构的过程中,没有外界的特定干预,就可以说系统是自组织的(自组织就是系统从无序到有序的变化过程)。

(3)蚁群算法具有较强的鲁棒性。相对于其他算法,蚁群算法对初始路线的要求不高,即蚁群算法的求解结果不依赖于初始路线的选择,而且在搜索过程中不需要进行人工的调整。此外,蚁群算法的参数较少,设置简单,因而该算法易于应用到组合优化问题的求解。

(4)蚁群算法是一种正反馈算法。从真实蚂蚁的觅食过程中不难看出,蚂蚁能够最终找到最优路径,直接依赖于其在路径上信息素的堆积,而信息素的堆积是一个正反馈的过程。正反馈是蚁群算法的重要特征,它使得算法进化过程得以进行。

1.3 基本蚁群算法原理

此处以旅行商问题(TSP)为例介绍基本蚁群算法 的原理。算法过程可以归纳为:首先,在算法初始时,将m只蚂蚁随机地放在n个城市之中,每一只蚂蚁都有一张路径表A(包含了该只蚂蚁走过的城市),它的第一个元素为该蚂蚁的起始城市。假设每一个城市间的路径上的信息素是一样的,即,c为一个很小的常数;其次,每只蚂蚁根据路径上存留的信息素和启发式信息(两个城市之间的距离)来选择下一个要去的城市,可以归纳为:在时刻t,蚂蚁k从i城市去往j城市 的概率为

其中,表示蚂蚁k在t时刻允许下一步选择城市的集合(未走过的城市),当所有城市都加入到路径表A中,表明蚂蚁k完成了一次周游,此时蚂蚁k所经过的城市路径就是一个可行解。上式中表示蚂蚁从城市i到城市j的概率。通常情况下,通常取城市i与是之间距离的倒数。通常表示信息素和期望启发式因子的相对重要程度。当所有蚂蚁完成一次周游时,各路径上的信息素更新方式如下:

其中,表示路径上信息素的蒸发概率,表示信息素持久性系数,表示本次迭代中城市i到j的路线上信息素的增量:

其中,表示第k只蚂蚁在本次迭代中留在城市i到j的路线上的信息素,如果蚂蚁k没有经过该路线则,因此:

其中,Q为正常数,表示第k只蚂蚁在本次周游中所走过的路径长度。当然信息素更新还可以自行修改符合自身问题。

1.4 基本蚁群算法流程

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1. 参数初始化, 令时间,循环次数,最大循环次数为G,交m个蚂蚁置于n个元素(城市)之上,令有向图上每条边(i,j)的初始化信息系,c是一个很小的常数,并且初始信息素增量. |
| 2. 循环次数 |
| 3. 蚂蚁的路径表A索引号 |
| 4. 更新蚂蚁数量 |
| 4. 蚂蚁根据式(a)计算选择元素的概率并前进到j城市. |
| 5. 蚂蚁移动到元素j,并将j加入到路径表A中。 |
| 6. 如果,则继续前进,直到所有城市都走完。 |
| 7. 记录本次的最佳路线。 |
| 8. 根据式(b),(c)更新每一条路上的信息素。 |
| 9. 如果,结束,否则清空A,再次从步骤2开始。 |

2. 改进的蚁群算法

基本蚁群算法需要较长搜索时间并容易出现停滞现象,很多研究人员对其做出了相应改进。

2.1 精英蚂蚁

该算法由M.Dorigo等人提出,将已经发现的最好解称为,而该路径在修改信息素时,人工释放额外的信息素以增强正反馈效果:

其中,e是调整影响权重的参数,是已知最优路径的长度。

2.2 最大最小蚂蚁系统

为了克服基本蚁群可能出现的停滞现象,Thomas Stutzle等人提出了最大-最小蚁群系统。与基本蚁群算法相比有以下不同:

1) 与蚁群类似,了了充分利用循环最优解和目前为止白菜出的最优解,在每次循环之后只有一只蚂蚁进行信息素更新。这只 蚂蚁可能是找出当前循环最优解的蚂蚁(当前最优解),也可能是找出从循环开始以来最优解的蚂蚁(全局最优)。而基本蚁群算法中,对所有蚂蚁直过的路径都进行信息素的更新。

2) 为避免搜索停滞,在每个元素(TSP中的是每条边)上的信息素轨迹量的值域范围被限制在。而在基本蚁群算法中,信息素轨迹范围是没有限制的,这导致一些路径上的轨迹量不断增加,远高于其它路径,因此越来越多蚂蚁都沿着信息素最的边行进,阻止了进一步的搜索更优解的行为。

3) 为了使蚂蚁在算法 的初始阶段能够更地的搜索新的解决方案,将信息素初始化为,而基本蚁群算法中初始化的信息素是一个很小的值。

2.3 基于排序的蚁群算法

在该算法中,每个蚂蚁释放的信息素按照它们不同的等级进行挥发,另外类似于精英蚁群算法,精英蚂蚁在每次循环中释放了更多的信息素。在修改信息素路径前,蚂蚁按照它们的旅行长度排序(短的靠前),蚂蚁释放信息素的量要和蚂蚁的排名相乘。在每次循环中,只有排名前w-1位的蚂蚁和精英蚂蚁才允许在路径上头释放,已 知的最优路径经以最强的反馈。则信息素的表示如下:

其中,

其中,是排名第r位的蚂蚁的旅行路径的长度。

2.4 自适应蚁群算法

基于蚁群系统让信息量最大的路径对每次路径的选择和信息量的更新起主要作用,但由于强化了最优信息反馈,就可能导致"早熟"停滞现象。而最大最小蚁群算法将各个路径上的信息量的更新限定在固定的范围内,这虽然在一定程度上避免了"早熟"停滞现象,但在解分布比较分散时会导致收敛速率变慢。以上的方法存在共同的缺点在于:它们都按照一种固定不变的模式去更新信息量和确定每次路径的选择概率。

对于基本蚁群算法进行改进:

(1)在每次循环结束后求出最优解,并将其保留。

(2)自适应地改变值。当问题规模比较大时,由于信息量的挥发系数的存在会使那些未被搜索到的信息量会减小到接近0,会降低算法的全局搜索能力。当过大且解的信息量变大时,以前搜索过的解被选择的可能性过大,会影响到算法的全局搜索能力,通过减小虽然可以提高算法的全局搜索能力,但会降低算法的收敛速率,因此可以自适应地改变值:

其中,的最小值(可以防止它过小而导致算法收敛速率降低)。

相关推荐
Jerry1 小时前
LeetCode 28. 找出字符串中第一个匹配项的下标
算法
Jerry3 小时前
LeetCode 459. 重复的子字符串
算法
海石6 小时前
1500分的题目,确实有实力,不过还是我略胜一筹
算法·leetcode
海石6 小时前
【记忆化搜索】条条大路通AC,走好适合你的那一条,走到后再考虑走得快
算法·leetcode
Jerry8 小时前
LeetCode 151. 反转字符串中的单词
算法
a11177611 小时前
LM 算法迭代过程动画演示(SLAM)
算法
头茬韭菜11 小时前
Context 的生死抉择:四层压缩、截断算法与 Session Memory
算法·ai
Jerry11 小时前
LeetCode 541. 反转字符串 II
算法
Jerry11 小时前
LeetCode 344. 反转字符串
算法
搞科研的小刘选手11 小时前
【香港大学主办&IEEE出版】第六届计算机视觉、应用与算法国际学术会议(CVAA 2026)
算法·计算机视觉·应用·学术会议