蚁群算法原理及在TSP中的应用(附程序)
蚁群算法在旅行商问题优化中的应用方法

蚁群算法在旅行商问题优化中的应用方法旅行商问题(Traveling Salesman Problem,TSP)是指一个旅行商需要经过若干个城市,并返回出发城市,要求在所经过的城市中路径最短的问题。
蚁群算法(Ant Colony Optimization,ACO)是一种模拟蚂蚁觅食行为的算法,通过蚂蚁在路径选择过程中释放信息素来优化路径选择。
蚁群算法在旅行商问题优化中有着广泛的应用。
蚁群算法的基本原理是模拟蚂蚁在寻找食物时释放和感知路径上的信息素。
在旅行商问题中,蚂蚁可以被视为旅行商,城市可以被视为路径上的节点。
蚂蚁选择路径的概率与路径上的信息素浓度有关,信息素浓度越高,路径被选择的概率越大。
蚁群算法在旅行商问题中的应用方法可以分为两个阶段:路径构建和路径优化。
在路径构建阶段,蚂蚁依次选择下一个要访问的城市。
每只蚂蚁根据概率选择下一个城市,概率计算的依据是路径上的信息素浓度和城市之间的距离。
信息素浓度越高、距离越近的城市被选择的概率越大。
一旦蚂蚁选择了下一个城市,它将更新当前路径,并释放信息素到路径上。
在路径优化阶段,蚂蚁在构建路径的同时,释放的信息素会逐渐积累在路径上。
信息素的更新是基于蚂蚁的路径选择和路径上信息素的挥发。
路径选择后,蚂蚁释放的信息素会根据路径的长度进行调整。
较短的路径会释放更多的信息素,较长的路径会释放较少的信息素。
同时,路径上的信息素会随着时间的推移逐渐挥发。
这样,蚂蚁倾向于选择较短的路径,更多的信息素会沿着较短的路径累积,进一步增加这条路径被选择的概率,从而优化整体路径的选择。
蚁群算法在旅行商问题优化中的应用方法包括参数设置、信息素更新策略和蚁群数量等。
首先,参数设置对蚁群算法的性能影响重大。
例如,信息素浓度和距离之间的权重比例决定了选择下一个城市的概率。
合理的参数设置可以加快算法的收敛速度和稳定性。
其次,信息素更新策略决定了信息素的时变规律。
一般来说,信息素的更新有两个过程:局部信息素更新和全局信息素更新。
蚁群算法及案例分析精选全文

群在选择下一条路径的时
候并不是完全盲目的,而是
按一定的算法规律有意识
地寻找最短路径
自然界蚁群不具有记忆的
能力,它们的选路凭借外
激素,或者道路的残留信
息来选择,更多地体现正
反馈的过程
人工蚁群和自然界蚁群的相似之处在于,两者优先选择的都
是含“外激素”浓度较大的路径; 两者的工作单元(蚂蚁)都
正反馈、较强的鲁棒性、全
局性、普遍性
局部搜索能力较弱,易出现
停滞和局部收敛、收敛速度
慢等问题
优良的分布式并行计算机制
长时间花费在解的构造上,
导致搜索时间过长
Hale Waihona Puke 易于与其他方法相结合算法最先基于离散问题,不
能直接解决连续优化问题
蚁群算法的
特点
蚁群算法的特点及应用领域
由于蚁群算法对图的对称性以
及目标函数无特殊要求,因此
L_ave=zeros(NC_max,1);
%各代路线的平均长度
while NC<=NC_max
%停止条件之一:达到最大迭代次数
% 第二步:将m只蚂蚁放到n个城市上
Randpos=[];
for i=1:(ceil(m/n))
Randpos=[Randpos,randperm(n)];
end
Tabu(:,1)=(Randpos(1,1:m))';
scatter(C(:,1),C(:,2));
L(i)=L(i)+D(R(1),R(n));
hold on
end
plot([C(R(1),1),C(R(N),1)],[C(R(1),2),C(R(N),2)])
蚁群算法在解决TSP问题中的应用

蚁群算法在解决TSP问题中的应用作者:陈灵佳来源:《电子技术与软件工程》2017年第10期文章首先对蚁群算法与TSP问题进行简要介绍,在此基础上对蚁群算法在解决TSP问题中的应用进行论述。
期望通过本文的研究能够对TSP问题的解决有所帮助。
【关键词】蚁群算法 TSP问题最优解1 蚁群算法与TSP问题简介1.1 蚁群算法蚁群算法是一种随机的、概率搜索算法,它是目前求解复杂组合优化问题较为有效的手段之一,借助信息反馈机制,能够进一步加快算法的进化,从而更加快速地找到最优解。
蚁群算法可在诸多领域中应用,借助该算法能够求得TSP问题的最短路径。
蚁群寻找最短路径的过程如图1所示。
蚁群算法之所以在多个领域获得广泛应用,与其自身所具备的诸多优点有着密不可分的关联,如自组织性、正负反馈性、鲁棒性、分布式计算等等,其最为突出的优点是能够与其它算法结合使用。
但是在应用实践中发现,虽然蚁群算法的优点较多,其也或多或少地存在一定的不足,如搜索时间较长,规模越大时间越长;容易出现停滞现象等等。
1.2 TSP问题TSP是旅行商的英文缩写形式,这一术语最早出现于1932年,在1948年时,美国兰德公司(RAND)引入了TSP,由此使得TSP广为人知。
从数学领域的角度上讲,TSP问题是NP-完备组合优化问题,这是一个看似简单实则需要天文数字计算能力方可获得最优解的过程,其适用于搜索算法解决不了的复杂与非线性问题。
2 蚁群算法在解决TSP问题中的应用2.1 蚁群算法的改进(1)大量的实验结果表明,标准蚁群算法在TSP问题的求解中,很容易陷入局部最优解。
这是因为,蚁群的转移主要是由各条路径上的信息素浓度及城市间的距离来引导的,信息素浓度最强的路径是蚁群的首选目标,该路径与最优路径极为接近。
然而,各个路径上初始信息素的浓度全部相同,因此,蚁群在对第一条路径进行创建时,主要依赖于城市间的距离信息,这样一来很难确保蚁群创建的路径是最优路径,如果以此为基础,那么信息素便会在该局部最优路径上越积累越多,其上的信息素浓度将会超过其它路径,从而造成全部蚂蚁都会集中于该路径之上,由此便会造成停滞现象,不但会使搜索的时间增长,而且所求得的解也无法达到理想中的效果。
蚁群算法在解决TSP问题中的应用

蚁 群 算法 之所 以在 多个 领域 获得 广泛 应
2 . 2 . I 对算法进行初 始化 对所 有 城 市的坐 标进 行 获取 ,以此 为依 据 ,对距 离矩阵 Di s t ma t r i x进行计 算,同时对 随机发生器状态进行初始 化,并 以随机的形式
其 它 算 法 结合 使 用 。 但 是 在 应 用 实 践 中 发 现 ,
虽然蚁群 算法 的优点较多,其也或多或少地存 在一定 的不足 ,如搜索时间较长 ,规模越 大时
间 越 长 ; 容 易 出现 停 滞 现 象 等 等 。
1 . 2 T S P 问 题
从 n个城市 中选 出初 始的 出发城市,并将该城 优 的遍 历顺序、最优的遍历结果 以及总体运行 时 间输 出,便可完成对 T S P问题 的求解 。 市设定为 :
图1 :蚁群寻找最短路径的演 示图
蚁的数 目 = AK+ 1 。
S t e p 5 :蚂蚁个体按照 A n t — Q S y s t e ms算法 提出的状态转移概率,选择下个城市 j 并前进 。
S t e p 6 : 对 允 许 矩 阵 进 行 更 新 , 使 其 变 为
【 关键词 】蚁群 算法 T S P问题 最优解
a l l o w( A K, j ) - O ,即将蚂蚁所选 城市标号在该矩 阵中对应位置 的值 重新 设定为 0 。
S t e p 7 : 如 果 蚂 蚁 为 遍 历 集 合 C 中 的所
1蚁群算 法与T S P 问题简介
1 . 1蚁群算法
蚁群算法是一种 随机 的、概率搜索算法 , 它是 目前求解 复杂组合优化 问题较为有 效的手
S t e p 4 ,若 是遍 历所有 元素,则可执 行 S t e p 8 。
蚁群算法java实现以及TSP问题蚁群算法求解

蚁群算法java实现以及TSP问题蚁群算法求解蚁群算法java实现以及TSP问题蚁群算法求解1. 蚁群算法简介蚁群算法(Ant Clony Optimization,ACO)是一种群智能算法,它是由一群无智能或有轻微智能的个体(Agent)通过相互协作而表现出智能行为,从而为求解复杂问题提供了一个新的可能性。
蚁群算法最早是由意大利学者Colorni A., Dorigo M. 等于1991年提出。
经过20多年的发展,蚁群算法在理论以及应用研究上已经得到巨大的进步。
蚁群算法是一种仿生学算法,是由自然界中蚂蚁觅食的行为而启发的。
在自然界中,蚂蚁觅食过程中,蚁群总能够按照寻找到一条从蚁巢和食物源的最优路径。
图(1)显示了这样一个觅食的过程。
图(1)蚂蚁觅食在图1(a)中,有一群蚂蚁,假如A是蚁巢,E是食物源(反之亦然)。
这群蚂蚁将沿着蚁巢和食物源之间的直线路径行驶。
假如在A和E之间突然出现了一个障碍物(图1(b)),那么,在B点(或D点)的蚂蚁将要做出决策,到底是向左行驶还是向右行驶?由于一开始路上没有前面蚂蚁留下的信息素(pheromone),蚂蚁朝着两个方向行进的概率是相等的。
但是当有蚂蚁走过时,它将会在它行进的路上释放出信息素,并且这种信息素会议一定的速率散发掉。
信息素是蚂蚁之间交流的工具之一。
它后面的蚂蚁通过路上信息素的浓度,做出决策,往左还是往右。
很明显,沿着短边的的路径上信息素将会越来越浓(图1(c)),从而吸引了越来越多的蚂蚁沿着这条路径行驶。
2. TSP问题描述蚁群算法最早用来求解TSP问题,并且表现出了很大的优越性,因为它分布式特性,鲁棒性强并且容易与其它算法结合,但是同时也存在这收敛速度慢,容易陷入局部最优(local optimal)等缺点。
TSP问题(Travel Salesperson Problem,即旅行商问题或者称为中国邮递员问题),是一种,是一种NP-hard问题,此类问题用一般的算法是很大得到最优解的,所以一般需要借助一些启发式算法求解,例如遗传算法(GA),蚁群算法(ACO),微粒群算法(PSO)等等。
蚁群算法的原理及其应用

蚁群算法的原理及其应用1. 蚁群算法的介绍蚁群算法(Ant Colony Optimization, ACO)是一种启发式优化算法,它模拟了蚂蚁在寻找食物路径时的行为。
蚁群算法通过模拟蚂蚁在信息素的引导下进行行为选择,来寻找最优解。
蚁群算法的核心思想是利用分布式的信息交流和反馈机制来完成问题的求解。
2. 蚁群算法的原理蚁群算法的原理可简述为以下几个步骤:1.创建蚁群:随机生成一定数量的蚂蚁,将其放置在问题的初始状态上。
2.信息素初始化:对于每条路径,初始化其上的信息素浓度。
3.蚂蚁的移动:每只蚂蚁根据一定的规则,在解空间中移动,并根据路径上的信息素浓度决定移动的方向。
4.信息素更新:每只蚂蚁在移动到目标位置后,根据路径的质量调整经过路径上的信息素浓度。
5.更新最优路径:记录当前找到的最优路径,并更新全局最优路径。
6.蚂蚁迭代:重复进行2-5步骤,直到满足终止条件。
3. 蚁群算法的应用蚁群算法被广泛应用于许多优化问题的求解,特别是在组合优化、路径规划、图着色等领域。
3.1 组合优化问题蚁群算法在组合优化问题中的应用主要包括旅行商问题(TSP)、背包问题(KP)、调度问题等。
通过模拟蚂蚁的移动和信息素的更新,蚁群算法可以找到全局最优解或接近最优解的解决方案。
3.2 路径规划问题在路径规划问题中,蚁群算法常被用于解决无人车、无人机等的最优路径规划。
蚁群算法能够在搜索空间中寻找最短路径,并考虑到交通拥堵等实际情况,提供合适的路径方案。
3.3 图着色问题蚁群算法可以用于解决图着色问题,即给定一个图,用尽可能少的颜色对其顶点进行着色,使得相邻顶点的颜色不同。
蚁群算法通过模拟蚂蚁的移动和信息素的更新,能够找到一种较好的图着色方案。
4. 蚁群算法的优缺点4.1 优点•收敛性好:蚁群算法能够在相对较短的时间内找到较优解。
•分布式计算:蚂蚁的并行搜索使得蚁群算法能够处理大规模复杂问题。
•鲁棒性强:蚁群算法对问题的可行域和约束条件的适应性较强。
(转载)ACO蚁群算法(算法流程,TSP例子解析)
(转载)ACO蚁群算法(算法流程,TSP例⼦解析)1. 背景——蚁群的⾃组织⾏为特征⾼度结构化的组织——虽然蚂蚁的个体⾏为极其简单,但由个体组成的蚁群却构成⾼度结构化的社会组织,蚂蚁社会的成员有分⼯,有相互的通信和信息传递。
⾃然优化——蚁群在觅⾷过程中,在没有任何提⽰下总能找到从蚁巢到⾷物源之间的最短路径;当经过的路线上出现障碍物时,还能迅速找到新的最优路径。
信息正反馈——蚂蚁在寻找⾷物时,在其经过的路径上释放信息素(外激素)。
蚂蚁基本没有视觉,但能在⼩范围内察觉同类散发的信息素的轨迹,由此来决定何去何从,并倾向于朝着信息素强度⾼的⽅向移动。
⾃催化⾏为——某条路径上⾛过的蚂蚁越多,留下的信息素也越多(随时间蒸发⼀部分),后来蚂蚁选择该路径的概率也越⾼。
2. 算法基本思想:(1)根据具体问题设置多只蚂蚁,分头并⾏搜索。
(2)每只蚂蚁完成⼀次周游后,在⾏进的路上释放信息素,信息素量与解的质量成正⽐。
(3)蚂蚁路径的选择根据信息素强度⼤⼩(初始信息素量设为相等),同时考虑两点之间的距离,采⽤随机的局部搜索策略。
这使得距离较短的边,其上的信息素量较⼤,后来的蚂蚁选择该边的概率也较⼤。
(4)每只蚂蚁只能⾛合法路线(经过每个城市1次且仅1次),为此设置禁忌表来控制。
(5)所有蚂蚁都搜索完⼀次就是迭代⼀次,每迭代⼀次就对所有的边做⼀次信息素更新,原来的蚂蚁死掉,新的蚂蚁进⾏新⼀轮搜索。
(6)更新信息素包括原有信息素的蒸发和经过的路径上信息素的增加。
(7)达到预定的迭代步数,或出现停滞现象(所有蚂蚁都选择同样的路径,解不再变化),则算法结束,以当前最优解作为问题的最优解。
3. 信息素及转移概率的计算:4. 算法步骤算法流程图如下:5. 举例分析我们假设5个城市的TSP问题,然由于某种原因,城市道路均是单⾏道,即A->B和B->A的距离不相同,也就是说这是⼀个不对称的TSP问题。
现在城市距离信息如下表:设置参数:m=5,α=1,β=1,ρ=0.5,τ_ij(0)=2。
蚁群算法及其在TSP中的应用
蚂蚁TSP
ij t ij t
Pijk
ik t
ik
, j tabuk
k tabuk
0,
j tabuk
其中:ij 为先验知识或称为能见度,在TSP问题中为城市i转移到城市j的启发 信息,一般地取ij =1/dij , 为在路径上残留信息的重要程度; 为启发信息的 重要程度;与实际蚁群不同,人工蚁群系统具有记忆能力,tabu 用以记录蚂 蚁K当前所走过的城市,称为禁忌表(下一步不充许选择的城市),集合 tabu 随着进化过程进行动态调整。
蚂蚁TSP
为了模拟实际蚂蚁的行为, 首先引进如下记号: 设m是蚁群中蚂蚁的数, dij(i,j=1,2,...,n)表示城市i 和城市j 之间的距离, Tij(t)表示t 时刻在城市i,j 连线上残留的信息素。初始
时刻,各条路径上的信息素相等,设 Tij(0) 蚂蚁 k(1,2,3..m) 在运动过程中,根据各条路径上的信息 素决定转移方向。 Pij(t)表示在 时刻蚂蚁 由城市i转移到城市j的概率:
最后,设置周游次数计数器NC,当达到设定值时结束,最短路径为;
Lmin min Lk minl l 1, 2, , NC
Gambardella
蚁群算法
20 世纪90 年代初,意大利学者Dorigo 等受 蚂蚁觅食行为的启发,提出了蚁群算法,是一种 仿生算法。
蚂蚁在觅食过程中可以找出巢穴到食物源的最短 路径,为什么? (1)信息素(pheromone) (2)正反馈现象:某一路径上走过的蚂蚁越 多,则后来者选择该路径的概率就越大。
蚁群算法及其在tsp中的应用macrodorigogambardella蚁群算法?20世纪90年代初意大利学者dorigo等受蚂蚁觅食行为的启发提出了蚁群算法是一种20世纪90年代初意大利学者dorigo等受蚂蚁觅食行为的启发提出了蚁群算法是一种仿生算法
蚁群优化算法在解决TSP问题中的应用
还有页眉没有添加,页眉上写章标题,把我给你标注的问题改完就可以打印了摘要根据蚂蚁生态学提出的蚁群算法是一种新颖的用于求解复杂组合优化问题的模拟进化算法,具有典型的群体智能特征,表现出较强的学习能力和适应能力。
本文阐述了该算法的基本原理、算法模型和在TSP( Traveling Salesman Problem,旅行商)问题中的具体应用过程,并对算法进行了总结和展望。
关键词:蚁群算法,旅行商问题,外激素目录摘要Ⅰ目录II第一章引言 (1)第二章蚁群算法的基本原理和模型 (2)2.1 蚁群算法的基本原理 (2)2.2 蚁群算法的模型 (3)第三章基于蚁群算法的TSP求解 (5)3.1 TSP问题的描述 (5)3.2 基于蚁群算法的TSP求解 (5)3.3 蚁群算法的局限性 (6)第四章蚁群算法的改进 (8)4.1 优选参数m (8)4.2 参数 的调整 (8)4.3 信息素的更新 (8)4.4 信息素链表L 和禁忌链表TL 的构建 (9)第五章改进的算法基本流程 (10)第六章结论 (11)参考文献 (12)第一章引言研究群居性昆虫行为的科学家发现,昆虫在群落一级上的合作基本上是自组织的,在许多场合中尽管这些合作可能很简单,但它们却可以解决许多复杂的问题。
蚁群算法就是利用群集智能解决组合优化问题的典型例子。
蚁群算法(Ant Colony Algorithm, ACA)是由意大利学者M.Dorigo,V.Mzniezzo,A.Colorni 等人在20世纪90年代初首先提出来的。
它是继模拟退火算法、遗传算法、禁忌搜索算法、人工神经网络算法等元启发式搜索算法以后的又一种应用于组合优化问题的启发式搜索算法。
蚁群算法不仅能够智能搜索、全局优化,而且具有稳健性A、鲁棒性B、正反馈、分布式计算、易与其它算法结合等特点。
利用正反馈原理,可以加快进化过程;分布式计算使该算法易于并行实现,个体之间不断进行信息交流和传递,有利于找到较好的解,不容易陷入局部最优;该算法易与多种启发式算法结合,可改善算法的性能;由于鲁棒性强,故在基本蚁群算法模型的基础上进行修改,便可用于其它问题。
用蚁群算法解决TSP问题
用蚁群算法解决TSP 问题一、引言蚁群算法是一种受自然界生物行为启发而产生的“自然”算法,产生于对蚂蚁行为的研究。
蚁群中的蚂蚁以“信息素”为媒介,间接异步的相互联系。
蚂蚁在行动中,会在他们经过的地方留下一些化学物质,称为“信息素”。
这些物质能被同一种群众后来的蚂蚁感受到,并作为一种信号影响后者的行动,具体表现在后到的蚂蚁选择有这些物质的路径的可能性比选择没有这些物质的路径的可能性大的多。
后者留下的信息素会对原有的信息素进行加强,并循环下去。
这样,经过蚂蚁多的路径,后到蚂蚁选择这条路径的可能性就越来越大。
由于在一定的时间内,越短的路径会被越多的蚂蚁访问,因而积累的信息素就越多,在下一个时间内被其他的蚂蚁选中的可能性也越大。
这个过程会持续到所有的蚂蚁都走到最短的那一条路径为止。
二、关键技术(1) 解的表达形式在应用蚁群优化算法时,只需要建立一个虚拟的始终点,相当于蚁群的巢穴和食物所在地,这样一个所经过城市的路径的排列就构成了一个解;(2) 信息素的记忆和更新在算法开始时,由于从来没有蚂蚁去寻找过路径,因此可以认为是没有任何先验信息,即每条路上的信息相等。
客观地将,信息素应该都为0,但是由于在蚁群算法中,信息素决定了蚂蚁选择这条路径的概率,因此可以认为初始信息素矩阵为:1/(*(1))0ij N N p -⎧=⎨⎩i j i j ≠=其中N 为城市数 当算法运行过程中,每次放出m 支蚂蚁,每只蚂蚁按照信息素选择路径,将其中路径最短的记录下来,对这条最短路进行信息素的加强;而对于其他路径,因为信息素的挥发,信息素浓度将会降低,更新后的信息素矩阵为: 11(1)//(1)/k ij k ij k ij p N p p ρρρ--⎧-+⎪=⎨-⎪⎩i j i j →→经过路径不经过路径其中N 为城市数,ρ为挥发系数 (3) 蚁群的规模在一般应用中,蚁群中蚂蚁的个数m 是固定数,不超过TSP 图的节点数。
三、算法实现步骤1 设定蚁群规模m ,计算次数n ,挥发系数ρ,初始化信息素矩阵,设定变量best =+∞记录全局最优解;步骤2 若n =0,推出并输出结果;否则n=n-1,分别放出m 只蚂蚁,按照信息素概率选择路径,并找出m 条路径中的当代最优路径cubest ; 步骤3 根据当代最有路径更新信息素;步骤4 如果cubest<best ,best=cubest ,执行步骤2;否则直接执行步骤2;四、结果及分析通过五个城市节点的TSP 问题的求解,其城市间的距离矩阵为:01015621008139158020156132005291550⎛⎫ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎝⎭蚁群算法找到的最优路径为A C B D E →→→→,总路程为43;通过试验结果发现,对于小规模的TSP问题,蚁群算法和禁忌搜索、模拟退火算法的计算结果相似,而且耗时很短,因此该算法是合理的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
蚁群算法原理及在TSP 中的应用1 蚁群算法(ACA )原理1.1 基本蚁群算法的数学模型以求解平面上一个n 阶旅行商问题(Traveling Salesman Problem ,TSP)为例来说明蚁群算法ACA (Ant Colony Algorithm )的基本原理。
对于其他问题,可以对此模型稍作修改便可应用。
TSP 问题就是给定一组城市,求一条遍历所有城市的最短回路问题。
设()i b t 表示t 时刻位于元素i 的蚂蚁数目,()ij t τ为t 时刻路径(,)i j 上的信息量,n 表示TSP 规模,m 为蚁群的总数目,则1()ni i m b t ==∑;{(),}ij i i t c c C τΓ=⊂是t 时刻集合C 中元素(城市)两两连接ij t 上残留信息量的集合。
在初始时刻各条路径上信息量相等,并设 (0)ij const τ=,基本蚁群算法的寻优是通过有向图(,,)g C L =Γ实现的。
蚂蚁(1,2,...,)k k m =在运动过程中,根据各条路径上的信息量决定其转移方向。
这里用禁忌表(1,2,...,)k tabu k m =来记录蚂蚁k 当前所走过的城市,集合随着k tabu 进化过程作动态调整。
在搜索过程中,蚂蚁根据各条路径上的信息量及路径的启发信息来计算状态转移概率。
()kij p t 表示在t 时刻蚂蚁k 由元素(城市)i 转移到元素(城市)j 的状态转移概率。
()*()()*()()0k ij ij k kij ij ij s allowed t t j allowed t t p t αβαβτητη⊂⎧⎡⎤⎡⎤⎣⎦⎣⎦⎪∈⎪⎡⎤⎡⎤=⎨⎣⎦⎣⎦⎪⎪⎩∑若否则(1)式中,{}k k allowed C tabuk =-表示蚂蚁k 下一步允许选择的城市;α为信息启发式因子,表示轨迹的相对重要性,反映了蚂蚁在运动过程中所积累的信息在蚂蚁运动时所起作用,其值越大,则该蚂蚁越倾向于选择其他蚂蚁经过的路径,蚂蚁之间协作性越强;β为期望启发式因子,表示能见度的相对重要性,反映了蚂蚁在运动过程中启发信息在蚂蚁选择路径中的重视程度,其值越大,则该状态转移概率越接近于贪心规则;()ij t η为启发函数,其表达式如下:1()ij ijt d η=(2)式中,ij d 表示相邻两个城市之间的距离。
对蚂蚁k 而言,ij d 越小,则()ij t η越大,()kij p t 也就越大。
显然,该启发函数表示蚂蚁从元素(城市) i 转移到元素(城市) j 的期望程度。
为了避免残留信息素过多引起残留信息淹没启发信息,在每只蚂蚁走完一步或者完成对所有n 个城市的遍历(也是一个循环结束)后,要对残留信息进行更新处理。
这种更新策略模仿了人类大脑记忆的特点,在新信息不断存入大脑的同时,存储在大脑中的旧信息随着时间的推移逐渐淡化,甚至忘记。
由此,t n +时刻在路径(,)i j 上的信息量可按如下规则进行调整:()(1)*()()ij ij ij t n t t τρττ+=-+∆ (3)1()()mkij ij k t t ττ=∆=∆∑ (4)式中ρ表示信息挥发系数,则1ρ-表示信息素残留因子,为了防止信息的无限积累,ρ的取值范围为:[0,1)ρ⊂;()ij t τ∆表示本次循环中路径(,)i j 上的信息素增量,初始时刻()0ij t τ∆=,()kij t τ∆表示第k 只蚂蚁在本次循环中留在路径(,)i j 上的信息量。
根据信息素更新策略的不同,Dorigo M 提出了三种不同的基本蚁群算法模型,分别称之为Ant-Cycle 模型、Ant-Quantity 模型及Ant-Density 模型,其差别在于()k ij t τ∆求法的不同。
在Ant-Cycle 模型中,k i j ()0kkij QL t τ⎧⎪∆=⎨⎪⎩若第只蚂蚁在本次循环中经过(,),否则(5)式中,Q 表示信息素强度,它在一定程度上影响算法的收敛速度;k L 表示k 只蚂蚁在本次循环中所走路径的总长度。
在Ant-Quantity 模型中,k i j ()0kijij Q d t τ⎧⎪∆=⎨⎪⎩若第只蚂蚁在t 和t+1之间经过(,),否则(6)在Ant-Density 模型中,k i j ()0kij Q t τ⎧∆=⎨⎩若第只蚂蚁在t 和t+1之间经过(,),否则(7)区别:式(6)和式(7)中利用的是局部信息,即蚂蚁完成一步后更新路径上的信息素;而式(5)中利用的是整体信息,即蚂蚁完成一个循环后更新所有路径上的信息素,在求解TSP 时性能较好,因此通常采用式(5)作为蚁群算法的基本模型。
1.2 基本蚁群算法的实现以下是解决TSP 问题的蚁群算法的基本流程描述,其中的参数设置来自于Dorigo 等人的试验。
基本蚁群算法的具体实现步骤如下:(1) 参数初始化。
令时间t=0和循环次数0c N =,设置最大循环次数max c N ,将m 蚂蚁置于n 个元素(城市)上,另有向图上每条边(,)i j 的初始化信息量()ij t const τ=,其中const 表示常数,且初始时刻(0)0ij τ∆=。
(2) 循环次数1c c N N ←+。
(3) 蚂蚁等禁忌表索引号k=1。
(4) 蚂蚁数目1k k ←+。
(5) 蚂蚁个体根据状态转移概率公式(1)计算的概率选择元素(城市)j 并前进,{}k j C tabu ∈-(6) 修改禁忌表指针,即选择好之后将蚂蚁移动到新的元素(城市),并把该元素(城市)移动到该蚂蚁个体的禁忌表中。
(7) 若集合C 中元素(城市)未遍历完,即k<m ,则跳转到第(4)步,否则执行第(8)步。
(8) 根据公式(3)和(4)更新每条路径上的信息量。
(9) 若满足结束条件,即如果循环次数max c c N N ≥,则循环结束并输出程序计算结果,否则清空禁忌表并跳转到第(2)步。
2 程序实现(城市为中国各省省会城市)2.1数据列表TSP 问题中的城市选为中国各省省会城市,其实际地理位置的经纬度如表1所示。
表1 中国各省省会城市所在地理位置的经纬度2.2程序实现程序说明:程序是在GreenSim团队编写的程序的基础上进行修改得到,区别在于在程序中加入了更多的说明,便于MATLAB初学者以及对蚁群算法不是很熟悉的读者理解;对程序进行了略微的修改,加入了主程序和真实城市坐标数据。
其中主程序名称为ACAmain_city.m,其是可直接运行的程序。
运行结果如图1-图3所示,结果经过略微调整。
图2为将省会城市改成相应的省(或直辖市、特别行政区)后的图形。
结果均为一次运行所得,但由于算法的随机性,每次运行结果可能会不同。
另外,算法的初始条件对运行结果有很大影响,各种初始条件取值在附录中的程序已给出。
图1 ACA找到的最佳的中国环游路径(省会城市)图2 ACA找到的最佳的中国环游路径(省)图3 ACA迭代收敛曲线附录:(程序)注意:程序是直接从MATLAB中复制过来,拷贝到Word中可能会自动换行,再拷贝到MATLAB中运行时,应作相应调整。
函数文件应放到新的m文件中,并以相应的文件名命名,可运行的只有主程序。
A: 主程序%% 蚁群算法求解最短路径问题:ACAmain_city.mclc; close all; clear all; tic%% 中国各省省会城市23+5(直辖市4,特别行政区2)所在地理位置的经纬度(东经-北纬)C=[ 117.17 31.52; 119.18 26.05; 103.51 36.04; 113.14 23.08; 106.42 26.35; 110.20 20.02; 114.30 38.02; 113.40 34.46; 126.36 45.44; 114.17 30.35; 112.59 28.12; 125.19 43.54; 118.46 32.03; 115.55 28.40; 123.25 41.48; 101.48 36.38; 117.00 36.40; 112.3337.54; 108.57 34.17; 104.04 30.40; 102.42 25.04; 120.10 30.16; 121.30 25.03; 108.19 22.48; 111.41 40.48; 106.16 38.27; 90.08 29.39; 87.36 43.45; 121.29 31.14; 116.24 39.55; 117.12 39.02; 106.33 29.35; 115.07 21.33; 115.12 21.23];T=[ '合肥','福州','兰州','广州','贵阳','海口','石家','郑州','哈尔','武汉','长沙','长春','南京','南昌','沈阳','西宁','济南','太原','西安','成都','昆明','杭州','台北','南宁','呼和','银川','拉萨','乌鲁','上海','北京','天津','重庆','澳门','香港'];%% 参数初始化NC_max=150; m=34; Alpha=1; Beta=5; Rho=0.1; Q=100;%% 绘制找到的最优路径[R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ACATSP(C,NC_max,m,Alpha, Beta,Rho,Q); %函数调用figure(1); DrawCity(C,T,Shortest_Route); %绘制找到的最优路径toc %计算运行时间%% 绘制收敛曲线figure(2); iter=1:length(L_best);plot(iter,L_best,'-m*',iter,L_ave,':rp','LineWidth',2)xlabel('迭代次数'); legend('各代最佳路线的长度','各代路线的平均长度');grid on; tocB: 函数文件1%% 利用蚁群算法解决TSP问题的函数文件ACATSP.mfunction[R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ACATSP(C,NC_max,m,Alpha,Beta,Rho,Q)%% Ant Colony Algorithm for Traveling Salesman Problem%% 主要符号说明%% C n个城市的坐标,n×2的矩阵%% NC_max 最大迭代次数%% m 蚂蚁个数%% Alpha 表征信息素重要程度的参数%% Beta 表征启发式因子重要程度的参数%% Rho 信息素蒸发系数%% Q 信息素增加强度系数%% R_best 各代最佳路线%% L_best 各代最佳路线的长度%% NC_max=150; m=25; Alpha=1; Beta=5; Rho=0.1; Q=100;%%===================================================== ===========%% 第一步:变量初始化n=size(C,1); % n表示问题的规模(城市个数)D=zeros(n,n); % D表示完全图的赋权邻接矩阵for i=1:nfor j=1:nif i~=jD(i,j)=((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5; % 计算两城市之间的距离elseD(i,j)=eps; % eps = 2.2204e-016,i=j,则距离为0endD(j,i)=D(i,j); % 距离矩阵为对称均值(n*n的矩阵)endendEta=1./D; %Eta为启发因子,这里设为距离的倒数(n*n的矩阵)Tau=ones(n,n); %Tau为信息素矩阵,初始化全为1,Tabu=zeros(m,n); %存储并记录路径的生成tabu:踏步(停止,禁忌表)(m*n的矩阵)NC=1; %迭代计数器R_best=zeros(NC_max,n); %各代最佳路线(行数为最大迭代次数NC_max,列数为城市个数n)L_best=inf.*ones(NC_max,1); %各代最佳路线的长度(inf:无穷大)L_ave=zeros(NC_max,1); %各代路线的平均长度%%while NC<=NC_max %停止条件之一:达到最大迭代次数%% 第二步:将m只蚂蚁放到n个城市上Randpos=[];for i=1:(ceil(m/n)) %ceil表示向无穷方向取整Randpos=[Randpos,randperm(n)]; %randperm(n):随机产生一个整数排列endTabu(:,1)=(Randpos(1,1:m))'; %每只蚂蚁(m只)都对应有一个位置,Tabu(:,1)为每只蚂蚁的走过的第一个城市%% 第三步:m只蚂蚁按概率函数选择下一座城市,完成各自的周游for j=2:n %城市从第二个开始for i=1:mvisited=Tabu(i,1:(j-1)); %已访问的城市J=zeros(1,(n-j+1)); %待访问的城市P=J; %待访问城市的选择概率分布(初始化)Jc=1; %循环下标for k=1:n %利用循环求解待访问的城市,如果第k个城市不属于已访问的城市,则其为待访问的城市if isempty(find(visited==k, 1))% if length(find(visited==k))==0J(Jc)=k;Jc=Jc+1; %下标加1,便于下一步存储待访问的城市endend%下面计算待访问城市的概率分布for k=1:length(J) %length(J)表示待访问的城市的个数P(k)=(Tau(visited(end),J(k))^Alpha)*(Eta(visited(end),J(k))^Beta); %概率计算公式中的分子end %Tau为信息素矩阵,Eta为启发因子矩阵P=P/(sum(P)); %概率分布:长度为待访问城市个数%按概率原则选取下一个城市Pcum=cumsum(P); %cumsum求累加和: cumsum([1 1 1])= 1 2 3,求累加的目的在于使Pcum的值总有大于rand的数Select=find(Pcum>=rand); %当累积概率和大于给定的随机数,则选择个被加上的最后一个城市作为即将访问的城市to_visit=J(Select(1)); %to_visit表示即将访问的城市Tabu(i,j)=to_visit; %将访问过的城市加入禁忌表中endendif NC>=2 %如果迭代次数大于等于2,则将上一次迭代的最佳路线存入Tabu的第一行中Tabu(1,:)=R_best(NC-1,:);end%% 第四步:记录本次迭代最佳路线L=zeros(m,1);for i=1:mR=Tabu(i,:);for j=1:(n-1)L(i)=L(i)+D(R(j),R(j+1)); %求路径距离endL(i)=L(i)+D(R(1),R(n)); %加上最后一个城市与第一个城市之间的距离endL_best(NC)=min(L); %最优路径为距离最短的路径pos=find(L==L_best(NC)); %找出最优路径对应的位置:即是哪只个蚂蚁R_best(NC,:)=Tabu(pos(1),:); %确定最优路径对应的城市顺序L_ave(NC)=mean(L); %求第k次迭代的平均距离NC=NC+1;%% 第五步:更新信息素Delta_T au=zeros(n,n); %Delta_Tau(i,j)表示所有的蚂蚁留在第i个城市到第j个城市路径上的信息素增量for i=1:mfor j=1:(n-1) %建立了完整路径后路径后在释放信息素:蚁周系统Q/L Delta_T au(Tabu(i,j),T abu(i,j+1))=Delta_Tau(Tabu(i,j),T abu(i,j+1))+Q/L(i);endDelta_T au(Tabu(i,n),T abu(i,1))=Delta_T au(Tabu(i,n),T abu(i,1))+Q/L(i);endTau=(1-Rho).*T au+Delta_T au; %信息素更新公式%% 第六步:禁忌表清零Tabu=zeros(m,n); %每迭代一次都将禁忌表清零end%% 第七步:输出结果Pos=find(L_best==min(L_best)); %找到L_best中最小值所在的位置并赋给Pos Shortest_Route=R_best(Pos(1),:); %提取最短路径Shortest_Length=L_best(Pos(1)); %提取最短路径的长度C: 函数文件2%% 绘制各个位置坐标即利用ACA找到的最优路径的函数DrawCity.mfunction DrawCity(C,T,R)%% C Coordinate 节点坐标,由一个N×2的矩阵存储%% T text 各城市的说明%% R Route 路线%%================================================== ==================N=length(R);scatter(C(:,1),C(:,2),'*','LineWidth',3);hold on; %绘制散点图scatter(C(:,1),C(:,2),'r','LineWidth',2);hold on; %绘制散点图%[C(R(1),1),C(R(N),1)]最佳路径第一个城市和最后一个城市的横坐标plot([C(R(1),1),C(R(N),1)],[C(R(1),2),C(R(N),2)],'m','LineWidth',2);hold on;for ii=2:N %绘制其他城市之间的连线plot([C(R(ii-1),1),C(R(ii),1)],[C(R(ii-1),2),C(R(ii),2)],'-','LineWidth',2); hold on; endfor k=1:length(C(:,1)) %城市标注text(C(k,1)+0.2,C(k,2)+0.3,T(2*k-1:2*k)); hold on;end% xlim([85 130]); ylim([15 50]); %限定横纵坐标显示范围xlabel('东经'); ylabel('北纬'); title('ACA找到的最佳路径'); grid on %绘制网络线。