随机优化算法-蚁群算法

随机优化算法-蚁群优化算法

摘要:蚁群算法是一种用来寻找优化路径的概率型算法。它由Marco Dorigo于1992年在他的博士 论文中提出,其灵感来源于蚂蚁在寻找食物过程中发现路径的行为。这种算法具有分布计算、信息正反馈和启发式搜索的特征,本质上是进化算法中的一种启发式全局优化算法。

一、简介

蚁群算法(ant colony optimization, ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型算法。它由Marco Dorigo于1992年在他的博士论文中提出,其灵感来源于蚂蚁在寻找食物过程中发现路径的行为。蚁群算法是一种模拟进化算法,初步的研究表明该算法具有许多优良的性质。针对PID控制器参数优化设计问题,将蚁群算法设计的结果与遗传算法设计的结果进行了比较,数值仿真结果表明,蚁群算法具有一种新的模拟进化优化方法的有效性和应用价值。

二、定义

各个蚂蚁在没有事先告诉他们食物在什么地方的前提下开始寻找食物。当一只找到食物以后,它会向环境释放一种挥发性分泌物pheromone (称为信息素,该物质随着时间的推移会逐渐挥发消失,信息素浓度的大小表征路径的远近)来实现的,吸引其他的蚂蚁过来,这样越来越多的蚂蚁会找到食物。有些蚂蚁并没有像其它蚂蚁一样总重复同样的路,他们会另辟蹊径,如果另开辟的道路比原来的其他道路更短,那么,渐渐地,更多的蚂蚁被吸引到这条较短的路上来。最后,经过一段时间运行,可能会出现一条最短的路径被大多数蚂蚁重复着。

蚁群算法是一种仿生学算法,是由自然界中蚂蚁觅食的行为而启发的。在自然界中,蚂蚁觅食过程中,蚁群总能够按照寻找到一条从蚁巢和食物源的最优路径。图(1)显示了这样一个觅食的过程。
《随机优化算法-蚁群算法》
在图1(a)中,有一群蚂蚁,假如A是蚁巢,E是食物源(反之亦然)。这群蚂蚁将沿着蚁巢和食物源之间的直线路径行驶。假如在A和E之间突然出现了一个障碍物(图1(b)),那么,在B点(或D点)的蚂蚁将要做出决策,到底是向左行驶还是向右行驶?由于一开始路上没有前面蚂蚁留下的信息素(pheromone),蚂蚁朝着两个方向行进的概率是相等的。但是当有蚂蚁走过时,它将会在它行进的路上释放出信息素,并且这种信息素会议一定的速率散发掉。信息素是蚂蚁之间交流的工具之一。它后面的蚂蚁通过路上信息素的浓度,做出决策,往左还是往右。很明显,沿着短边的的路径上信息素将会越来越浓(图1(c)),从而吸引了越来越多的蚂蚁沿着这条路径行驶。

三、流程步骤

这里以TSP问题为例,算法设计的流程如下:
步骤1:对相关参数进行初始化,包括蚁群规模、信息素因子、启发函数因子、信息素挥发因子、信息素常数、最大迭代次数等,以及将数据读入程序,并进行预处理:比如将城市的坐标信息转换为城市间的距离矩阵。
步骤2:随机将蚂蚁放于不同出发点,对每个蚂蚁计算其下个访问城市,直到有蚂蚁访问完所有城市。
步骤3:计算各蚂蚁经过的路径长度Lk,记录当前迭代次数最优解,同时对路径上的信息素浓度进行更新。
步骤4:判断是否达到最大迭代次数,若否,返回步骤2;是,结束程序。
步骤5:输出结果,并根据需要输出寻优过程中的相关指标,如运行时间、收敛迭代次数等。

四、几个主流的蚁群算法

随着研究的深入,学者们提出了多种ACO(Ant Colony Optimization):Ant System、Max-Min Ant System, Ant Colony System。这几类的不同,主要体现在信息素的更新公式、过程不一样。可以参加此论文的第6~7页,详细讲述了三类蚁群系统的信息素公式以及更新过程:
https://www.researchgate.net/profile/Thomas_Stuetzle/publication/308953674_Ant_Colony_Optimization/links/0046353a2c1908b287000000/Ant-Colony-Optimization.pdf

五、Max-Min AS蚁群算法的实现

过程:
(1)每条路径上的信息素浓度都有一个最大最小值,最小信息素增加对于更优解探索的可能性,最大信息素浓度保证经验对于蚁群的启发性。
(2)对于蚂蚁的下一次选择使用轮盘赌的方式进行选择,每条路径的权重是根据启发公式进行计算,合适的alpha beta能够加速算法的收敛,这是经验性的参数
(3)蚂蚁的数量一般不宜过多,一般与城市数量差不多就可以了。经过多次迭代可以发现,当前的最优可行解就是信息素最大的那条路径。
(4)挥发系数的确定:在每轮迭代过程中,每一次迭代完毕后,下一次的路径的信息素的浓度会随着时间挥发。smell_new=smell_old*挥发系数+smell_added。在计算的同时要保证 smell_new在[smell_lowbound,smell_upbound]范围内,即信息素的浓度有边界

主要参数:

point_num = 40 # 商旅问题的点数
rou = 0.05 # 蚁群算法中的蒸发系数
alpha = 0.8 # 有关于信息素的权重系数
beta = 2 # 有关于距离的权重系数
MaxIterTimes = 10000; # 允许的最大迭代次数
Q = 15 # 单个蚂蚁所携带的信息素的总量,用于走完以后更新每条走过的边的信息素 delta=Q/L L:路径长度
anti_num = 50; # 蚂蚁的数量
tao_min = 0.1/point_num
tao_max = 1

实现过程图:
下图中,左边蓝色图,代表右边实时给出的路径方案;右边红色图,红色线条的粗细浓度代表该条路径上的信息素的浓度。
(1)当遍历点为20个时候
《随机优化算法-蚁群算法》

《随机优化算法-蚁群算法》

观察可以发现,大概第120次左右的迭代后,路径趋于稳定;
(2)当遍历点为50个时:
《随机优化算法-蚁群算法》
《随机优化算法-蚁群算法》

观察可以发现,大概第180次左右的迭代后,路径趋于稳定;

六、附件本实验的source code

https://pan.baidu.com/s/1bqYuMj9

    原文作者:蚁群算法
    原文地址: https://blog.csdn.net/Chenming_Hnu/article/details/79294771
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞