【智能算法第一期】蚁群算法原理和多种改进方法

1. 什么是蚁群算法?

蚁群算法的本身来源于一种生物的自然现象,即蚂蚁在寻找食物过程中发现路径的行为,是一种模拟进化的算法。蚁群算法的寻优快速性是由通过正反馈式的信息传递和积累来实现的,分布式计算特征可以避免算法的早熟收敛,与此同时,具有贪婪式启发搜索特征的蚁群系统还可以在搜索过程的初期阶段寻找到可以接受的问题解答。生物学家的长时间观察发现,蚂蚁是通过分泌空间中的信息素来实现信息的交流从而实现群体行为

2.蚁群算法的基本原理

蚂蚁在觅食过程中能够在其经过的路上留下一种称之为信息素的物质,并在觅食过程中能够感知这些物质的强度,作为指导自己行为的方向,他们一定是朝着该物质强度高的方向移动,因此大量蚂蚁组成的集体觅食就表现为一种对信息素正反馈的现象。

某一条路径越短,路径上经过的蚂蚁越多,其信息素遗留的也就越多,信息素的浓度也就越高,蚂蚁选择这条路径的概率也就越大,由此构成了正反馈过程,从而逼近了最优路径,找到最优路径。当蚂蚁从食物源走到蚁穴,或者从蚁穴走到食物的地方,都会在经过的路上释放信息素,蚂蚁可以感觉出路径上信息素浓度的大小,并且以较高的概率选择信息素浓度较高的路径。

人工蚂蚁搜索包含了3种智能行为:

1. 蚂蚁利用信息素进行相互通信。蚂蚁在所选择的路径上会释放一种信息素的物质,当其他蚂蚁进行路径选择时,会根据路径上的信息素浓度进行选择,这样信息素就会作为蚂蚁之间通信的媒介

2.蚂蚁的记忆行为。一只蚂蚁搜索过的路径在下次搜索时就不再被该蚂蚁选择,因此在蚁群算法种建立禁忌表进行模拟。

3. 蚂蚁的集群活动。通过一只蚂蚁的运动很难达到食物源,但整个蚁群进行搜索就完全不同。当某些路径上通过的蚂蚁越来越多时,路径上留下的信息素数量也就越多,导致信息素强度增大,蚂蚁选择该路径的概率随之增大,从而进一步增加该路径的信息素强度,而通过的蚂蚁较少的路径上的信息素会随着时间的推移而挥发,从而变得越来越少。

3. 蚁群算法实现的重要规则

3.1 避障规则

蚂蚁如果在移动的方向上有障碍物挡住,它会随机选择另一个方向,并且有信息素指引的话,它会按照觅食的规则行为

3.2 播撒信息素规则

每只蚂蚁在刚找到食物或者窝的时候散发的信息素最多,并随着它走远的距离播撒的信息素也越来越少。

3.3 范围

蚂蚁观察到的范围是一个方格世界,蚂蚁有一个参数为速度半径(一般为3),那么他能观察到的范围就是一个3X3个方格世界,并且能移动的距离也在这个范围以内

3.4 移动规则

每只蚂蚁都朝向信息素最多的方向移动,并且当周围没有信息素引导的时候,蚂蚁就会按照自己原来运动的方向惯性移动下去,并且在运动方向有一个随机的小扰动。为了防止蚂蚁原地转圈,它会记住最近刚走过哪些点,如果发现要走的下一个点已经最近走过了,它会刻意去避开。

3.5 觅食规则

在每只蚂蚁能感知的范围内寻找是否有食物,如果有就直接走过去,否则看是否有信息素,并且比较在能感知的范围内哪一点的信息素最多,这样,它就朝信息素多的地方走,并且每只蚂蚁都会以小概率犯错误,从而并不是往信息素最多的点移动。蚂蚁找窝的规则和上面一样,只不过它对窝的信息素做出反应,而对食物信息素没反应。

3.6 环境

蚂蚁所在的环境是一个虚拟的世界,其中有障碍物,有别的蚂蚁,还有信息素,信息素有两种,一种是找到食物的蚂蚁洒下的食物信息素,一种是找到窝的蚂蚁洒下的窝的信息素。每个蚂蚁都仅仅能感知它范围内的环境信息。环境以一定的速率让信息素消失。

根据这几条规则,蚂蚁之间并没有直接的关系,但是每只蚂蚁都和环境发生交互,而通过信息素这个纽带,实际上把各个蚂蚁之间关联起来了。比如,当一只蚂蚁找到了食物,它并没有直接告诉其它蚂蚁这儿有食物,而是向环境播撒信息素,当其他的蚂蚁经过它附近的时候,就会感觉到信息素的存在,进而根据信息素的指引找到了食物。                      

4 蚁群算法的特点

蚁群算法是通过对生物特征的模拟得到的一种计算算法,其本身具有很多特点。

4.1 蚁群算法是一种本质上并行的算法

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

4.2 蚁群算法是一种自组织的算法

所谓自组织,就是组织力或组织指令是来自于系统的内部,区别于它组织。如果系统在获得空间的、时间的或者功能结果的过程中,没有外界的特定干预,便说系统是自组织的。简单地说,就是即是系统从无序到有序的变化过程。

以蚂蚁群体优化为例子说明。当算法开始的初期,单个的人工蚂蚁无序的寻找解,算法经过一段时间的演化,人工蚂蚁间通过信息激素的作用,自发地越来越趋向于寻找到接近最优解的一些解,这就是一个无序到有序的过程。

4.3 蚁群算法具有较强的鲁棒性

相对于其他算法,蚁群算法对初始路线要求不高,即蚁群算法的求解结果不依赖于初始线路的选择,而在搜素过程中不需要进行人工的调整。其次,蚁群算法的参数数目少,设置简单,易于蚁群算法应用到其他组合优化问题的求解。

4.4 蚁群算法是一种正反馈的算法

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

5 经典蚁群算法

5.1 蚂蚁系统

蚂蚁系统是最早的蚁群算法,其搜索过程大概如下:在初始时刻,m只蚂蚁随机放置于城市中,各条路径上的信息素初始值相等,设\tau _{ij}(0)=\tau _{0}为信息素初始值,可设\tau _{0}=m/L_{m},L_{m}是由最近邻启发式方法构造的路径长度。其次,蚂蚁k(k=1,2,...,m),按照随机比例规则选择下一步要转移的城市,其选择概率为

【智能算法第一期】蚁群算法原理和多种改进方法_第1张图片

 其中,\tau _{0}为边(i,j)上的信息素;\eta _{ij}=1/d_{ij}为从城市i到城市j的启发式因子;a_{k}为蚂蚁k下一步被允许访问的城市集合。

为了不让蚂蚁选择已经访问过的城市,采用禁忌表ta_{k}来记录蚂蚁k当前所走过的城市。经过t时刻,所有蚂蚁都完成一次周游,计算每只蚂蚁所走过的路径长度,并保存最短的路径长度,同时,更新各边上的信息素。首先是信息素挥发,其次是蚂蚁在它们所经过的边上释放信息素,其公式为

\tau _{ij}=(1-\rho )\tau _{ij}

其中,\Delta \tau _{ij}^{k}是第k只蚂蚁向它经过的边释放的信息素,定义为

 根据上式可知,蚂蚁构建的路径长度d_{ij}越小,则路径上各条边就会获得更多的信息素,则在以后的迭代中就更有可能被其他的蚂蚁选择。

蚂蚁完成一次循环后,清空禁忌表,重新回到初始城市,准备下一次周游。

大量的仿真实验发现,蚂蚁系统在解决小桂妈TSP问题时性能尚可,能较快的发现最优解,但随着测试问题规模的扩大,蚁群系统算法的性能下降的比较严重,容易出现停滞现象。因此,出现了大量的针对其缺点的改进算法。

5.2 精英蚂蚁系统

精英蚂蚁系统是对基本蚁群系统算法的第一次改进,它首先由Dorigo等人中提出,它的设计思想是对算法每次循环之后给予最优路径额外的信息素量,找出这个解的蚂蚁成为精英蚂蚁。

将这条最有路径记为T^{bs}, 针对路径T^{bs}的额外强化是通过向T^{bs}中的每一条边增加e/L^{bs}大小的信息素得到的,其中e是一个参数,它定义了给予路径T^{bs}的权值大小, L^{bs}代表了T^{bs}的长度。这样相应的信息素的更新公式为

 其中, \Delta \tau _{ij}^{k}(t)的定义方法跟以前的相同;\Delta \tau _{ij}^{bs}(t)的定义为

 Dorigo等人的文章列举的计算结果表明,使用经营策略并选取一个适当的e值将使得蚂蚁系统算法不但可以得到更好的解,而且能够在更少的迭代次数下得到一些更好的解。

5.3 最大-最小蚂蚁系统

最大-最小蚂蚁系统是到目前为止解决TSP问题最好的ACA算法方案之一。最大-最小蚂蚁系统算法是在蚂蚁系统算法的基础之上,主要作了如下的改进。

(1)将各条路径可能的外激素浓度限制于[\tau _{min},\tau _{max}],超出这个范围的值被强制设为\tau _{min}或者是\tau _{max},可以避免算法过早收敛于局部最优解,有效地避免某条路径上的信息量远大于其余路径,避免所有蚂蚁都集中到同一条路径上。

(2)信息素的初始值被设定为其取值范围的上界。在算法的初始时刻,\rho取较小的值时,算法有更好的发现较好解的能力。

(3)强调对最优解的利用。每次迭代结束后,只有最优解所属路径上的信息被更新,从而更好地利用了历史信息。

所有蚂蚁完成一次迭代后,对路径上的信息做全局更新,即

【智能算法第一期】蚁群算法原理和多种改进方法_第2张图片

 允许更新的路径可以时全局最优解,或本次迭代的最优解。实践证明逐渐增加全局最优解的使用频率,会使该算法获得较好的性能。

5.4 基于排序的蚁群算法

基于排序的蚂蚁系统是对蚂蚁系统算法的一种改进。其改进思想是:在每次迭代完成后,蚂蚁所经路径将按从小到大的顺序排列,即L^{1}(t)\leqslant L^{2}(t)\leq ... L^{m}(t), 算法根据路径长度赋予不同的权重,路径长度越短,权重越大。全局最优解的权重为w,第r个最优解的权重为,则ASrank的信息素更新规则为

 其中

5.5 蚁群系统

蚁群系统是由Dorigo等人提出来的改进的蚁群算法,它与蚂蚁系统的不同之处主要体现在以下3个方面。

(1)除了全局信息素更新规则外,还采用了局部信息素更新规则。

(2)信息素挥发和信息素释放动作只在至今最优路径的边上执行,即每次迭代之后只有至今最优蚂蚁被允许释放信息素。

(3)采用不同的路径选择规则,能更好地利用蚂蚁所积累的搜索经验。

在蚁群系统中,位于城市i的蚂蚁k,根据伪随机比例规则选择城市j作为下一个访问的城市。路径选择规则的公式为

【智能算法第一期】蚁群算法原理和多种改进方法_第3张图片

 其中,q是均匀分布在区间[0,1]中的一个随机变量;q_{0}(0\leq q_{0}\leq 1)是一个参数;J是根据以上公式给出的概率分布产生出来的一个随机变量(其中\alpha =1)。

蚁群系统的全局信息素更新规则为

蚁群系统的局部信息素更新规则定义如下:

在路径构建过程中,蚂蚁每经过一条边(i,j),都将立刻调用这条规则更新该边上的信息素,即

\tau _{ij}=(1-\rho )\tau _{ij}+\xi \tau_{0}

其中,\xi\tau _{0}是两个参数,\xi满足0< \xi < 1\tau _{0}是信息素量的初始值。局部更新的作用在于,蚂蚁每一次经过边(i,j),该边的信息素\tau _{ij}将会减少,从而使得其他蚂蚁选中该边的概率相对减少。

6 自适应蚁群算法

蚁群算法在构造解的过程中,利用随机选择策略,这种选择策略使得进化速度较慢,正反馈原理旨在强化性能较好的解,却容易出现停滞现象。

在选择策略方面采用确定性选择和随机选择相结合的选择策略,并且在搜索过程中动态的调整确定性选择的概率。当进化到一定代数后,进化方向已经基本确定,这时对路径上信息量做动态调整。

缩小最好和最差路径上的信息量的差距,并且适当放大随机选择的概率,以小于1对解空间的更完全搜索,可以有效地克服基本蚁群算法的不足,此算法属于自适应算法。

蚂蚁在行进过程中常常选择信息量较大的路径,但当许多蚂蚁选中同一条路径是,该路径中的信息量就会陡然增大,从而使得多只蚂蚁集中到某一条路径上,造成一种堵塞和停滞现象,表现在使用蚁群算法解决问题时就容易导致早熟和局部收敛。

自适应蚁群算法建立了一种新的自适应的信息量更新策略。

当问题规模较大时,由于信息量挥发系数的存在,使那些从未被搜索过的路径上的信息量减少到接近于0,从而降低了算法在这些路径上的搜索能力;反之,当某条路径中信息量较大时,这些路径中的信息量增大,搜索过的路径再次被选择的机会就会变得较大。

搜素过的路径被再次选择的机会变大,会影响算法的全局搜索能力,此时通过固定地变化挥发系数虽然可以提高全局搜索能力,但却使得算法的收敛速度降低。

自适应蚁群算法提出一种自适应的变化\tau值的方法,将信息素更新的公式为

 其中,\varphi _{m}为连续收敛次数m/c,是一个于收敛次数m成正比的函数,收敛次数m越多,\varphi _{m}的取值越大(c为常数)。

根据解的分布情况自适应地进行信息量的更新,从而动态地调整各路径上的信息量强度,使蚂蚁既不过分集中也不过分分散,从而避免了早熟和局部收敛,提高全局搜索能力。

 改进的蚁群算法的代码框架描述如下:

【智能算法第一期】蚁群算法原理和多种改进方法_第4张图片

 上述算法程序根据解的分布情况自适应地进行信息量的更新,从而动态地调整了路径上的信息量强度,增加了解空间的多样性,提高了全局搜索能力,避免了局部收敛和早熟现象。

改进后的蚁群算法具有比传统蚁群算法和MMAS蚁群算法更强的搜索全局最优解的能力,并具有更好的稳定性和收敛性。

注明:本博客内容取自某些书籍或者网络其他来源,如有侵权请联系博主进行删除,谢谢

你可能感兴趣的:(智能算法,算法)