《蚁群算法求解TSP的基本思想(共10页).doc》由会员分享,可在线阅读,更多相关《蚁群算法求解TSP的基本思想(共10页).doc(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上Ch9 蚁群算法9.1生物学知识1、蚁群算法(Ant Colony Algorithm ,ACA)是由意大利M. Dorigo等人于1990到2000发展起来的,模拟进化算法。模拟了自然界蚂蚁群体的觅食行为。2、蚁群社会在昆虫世界中,蚂蚁的组成是一种群居的蓼袭大家庭,称为蚁群。蚁群中除了亲缘上的互助关系外,成蚁划分为世袭制的蚁王和工蚁两个等级,蚁群的大小从几十个到几千万个,蚁群具有高度组织的社会性,彼此间的沟通不仅可以借助触觉的的联系,在大规模的协调行动上,借助外激素之类的生化信息介质。其中每个工蚁具有如下的职能:平时在巢穴附近作无规则行走;一旦发现食物,如果独自能搬
2、的就往回搬,否则就回巢穴搬兵;一路上它会留下外激至少的嗅迹,其强度与食物的品质和数量成正比;其他工蚁遇到嗅迹,就会循迹前进,也会有一定的走失率(选择其他路径),走失率与嗅迹的强度成反比。蚁群的行为表现出一种信息正反馈的现象;某一路径上走过的蚂蚁越多,则后来选择该路径的概率就大,蚂蚁个体间就是通过这种信息的交流达到搜索食物的目的。3、蚁群觅食过程意大利学者M. Dorigo是最早发现蚂蚁的觅食习性的,蚂蚁总能找到巢穴与食物源之间的最短路径。蚂蚁在寻找食物源后,会在其经过的路径上释放一种信息素,并能够感知其他蚂蚁释放的信息素。当某些路径上走过的蚂蚁越来越多时,留下的信息素也会越来越多,以致后蚂蚁选
3、择该路径的概率也越来越高,从而更增加了该路径的吸引强度,逐渐形成了一条它们自己事先并未意识到的最短路线。蚂蚁会以较大的概率优先选择信息素浓度较高的路径,并释放一定量的信息素,以增强该条路径的信息素的浓度,形成一个正反馈。路径上的信息浓度会随时间的推进,而不断挥发,从而不断降低,这似乎也是变异。9.2ACA算法的基本思想30(0.5,0)(0.5,0)(1,0)(1,0)ABCD30 1515(0.5,30)(0.5,30)(1,15)(1,15)ABCD30左图表示初始状态中,在结点A与C有30只蚂蚁,线上的数字(1,0)表示距离为1,信息素为0。此时每条边上的信息素均为0,故蚂蚁按随机行走,
4、A、C出发时,走两边的概率相等。单位时间后,A出发的蚂蚁,15只达到了B、15只经D到达C。C出发的蚂蚁,15只达到了,15只经D到达了A,如右上图所示。各边的信息素如右图所示,A-B有15只蚂蚁走过,留下的信息素是15个单位,C-B也是15只蚂蚁,留下的信息素也是15,此时到B的蚂蚁是15+15=30只。A-D-C的蚂蚁是15只,C-D-A的也是15只,故该条较短路线上的信息素为30个单位。蚂蚁再往前走:A点:由于A-B的信息素是15个单位,A-D是30单位,故A-D的蚂蚁数是A-B的2倍,因此A-B的蚂蚁5只,A-D是10只C点:C-B是5只,C-D是10只B点:B-A是15只,B-C是1
5、5只单位时间后:A点:10+15=25C点:10+15=25B点:5+5=10信息素:A-B为15+15+5=35,C-B为15+15+5=35,A-D=30+10+10=50,C-D为30+10+10=501515(0.5,30)(0.5,30)(1,15)(1,15)ABCD30 2525(0.5,50)(0.5,50)(1,35)(1,35)ABCD10再出发A点:A-B方向=25*35/85=10 A-D方向为15只。 两边各占0.41:0.59C点:C-B是10只,C-D是15只B点:B-A是5只,B-C是5只单位时间后:A点:5+15=20C点:5+15=20B点:10+10=20
6、信息素:A-B为35+10+5=50,C-B为35+5+10=50,A-D=50+15+15=80,C-D为50+15+15=802020(0.5,80)(0.5,80)(1,50)(1,50)ABCD20 2424(0.5,108)(0.5,108)(1,66)(1,66)ABCD12再出发 50/130=0.46 80/130=0.54A点:A-B方向=20*50/130=6 A-D方向为14只。C点:C-B是6只,C-D是14只B点:B-A是10只,B-C是10只单位时间后:A点:10+14=24C点:10+14=24B点:6+6=12信息素:A-B为50+6+10=66,C-B为50+
7、6+10=66,A-D=80+14+14=108,C-D为80+14+14=108两边浓度比为 66/174=0.38 108/174=0.629.3优缺点优点:(1)蚁群算法是一种分布式内在并行算法。单个蚂蚁的搜索过程是彼此独立的,易于局部最优,通过个体间不断的信息交流和传递有利于发现较好解。(2)蚁群算法是一种正反馈算法。路径上的信息素浓度较高,将吸引更多的蚂蚁沿这条路径运动,又使得信息素浓度增加,加快了算法的进化过程。(3)蚁群算法具有较强的自适应性,对其模型稍做修改,可应用于其他问题。(4)易于其他方法组合,以改善算法的效率。缺点: (1)需要较长时间搜索。主要是因为各蚂蚁的运动是随机
8、的,当群体规模稍大时,需要很长时间才能收敛。(2)易出现停滞现象,早熟现象。9.4蚁群算法的研究进展1、20世纪90年代 意大利Dorigo、Maniezzo等人提出该算法。2、1999年,Dorigo提出了蚁群优化(Ant Colony Optimization)的通用框架。3、2002年8月,出版蚁群优化算法的特刊。4、从1998年起,每隔二年在比利时的布鲁塞尔举行一次蚁群算法的国际会议。5、涉及到领域有生物学、物理学、工程学、计算机科学。6、Bichev和parmee提出了求解连续空间的蚁群算法模型。7、2004年李士勇等 蚁群算法的专著8、2005年段海滨蚁群算法原理及应用专著9、20
9、06年吴启迪 智能蚁群算法及应用9.5蚁群算法求解TSP的基本思想1、基本参数、信息素浓度公式、择路概率设蚂蚁的数量为m,城市的数量为n,城市i与城市j之间的距离为dij,t时刻城市i与城市j之间的信息素浓度为tij(t),初始时刻,各个城市间连接路径上的信息素浓度相同,不妨记为tij(0)=t0.蚂蚁k(k=1,2,.,m)根据各城市间连接路径上的信息素浓度,决定其下一个要访问的城市,设Pijk(t)表示t时刻,蚂蚁k从城市i到城市j的概率,其计算公式为如下:其中:hij(t)为启发式函数,hij(t)=1/dij,表示蚂蚁从城市i转移到城市j的期望程序allowk(k=1,2,m)表示蚂蚁
10、k待访问的城市的集合,开始时allowk为其他n-1城市,随着时间推进,其中的元素不断减少,直至为空,表示所有城市访问完,即遍历所有城市。a为信息素的重要程度因子,其值越大,转移中起的作用越大b为启发函数的重要程度因子,其值越大,表示启发函数在转移中的作用越大,即蚂蚁以较大的概率转移到距离短的城市。蚂蚁释放的信息素会随时间的推进而减少,设参数r(0r1)表示信息素的挥发度,当所有蚂蚁完成一次循环后,各个城市间连接路径上的信息素浓度,需要实时更新。tij(t+1)=(1-r)tij(t)+Dtij,Dtij=其中:Dtijk表示蚂蚁k在城市i与城市j的连接路径上,释放的信息素浓度Dtij表示所有
11、蚂蚁在城市i与城市j的连接路径上,释放的信息素浓度。2、Dtijk的计算方法Dorigo曾给出了3种不同的模型,分别如下:(1)ant cycle systemDtijk=其中:Q为常数,表示蚂蚁循环一次释放的信息素的总量dij为第k只蚂蚁经过路径的长度,Length一般选用该模型(2)ant quantity systemDtijk=其中:Q为常数,表示蚂蚁循环一次释放的信息素的总量dij为城市i到城市j的距离。(3)ant density systemDtijk=其中:Q为常数,表示蚂蚁循环一次释放的信息素的总量9.6蚁群算法解决TSP问题的基本步骤1、初始化参数蚂蚁数量m,信息素重要程度
12、a,启发函数重要程度b,信息素挥发因子r,信息素释放总量Q,最大迭代次数iter_max。获取各城市之间的距离dij,为了保证启发式函数hij=1/dij能顺利进行,对于i=j即自己到自己的距离不能给为0,而是给成一个很小的距离,如10-4或10-5。2、构建解空间将各个蚂蚁随机地置于不同出发点,对每个蚂蚁按归照下式,确定下一城市。3、更新信息素计算各个蚂蚁经过的路径长度Lk,记录当前迭代次数中的最优解(即最短路径),根据如下公式更新信息素:tij(t+1)=(1-r)tij(t)+Dtij,Dtij=Dtijk=4、判断是否终止若没有到最大次数,则清空蚂蚁经过路径的记录表,返回步骤2。9.7
13、TSP实例1、访问我国每个省会城市一次也仅一次的最短路径,共有31个2、如果采用枚举法,巡回路径可能1.3261032种。3、城市的坐标citys,这是直角坐标,根据二个城市的坐标值,可以用D=可计算出任意二个城市间的距离。citys = 1304 2312 3639 1315 4177 2244 3712 1399 3488 1535 3326 1556 3238 1229 4196 1004 4312 790 4386 570 3007 1970 2562 1756 2788 1491 2381 1676 1332 695 3715 1678 3918 2179 4061 2370 378
14、0 2212 3676 2578 4029 2838 4263 2931 3429 1908 3507 2367 3394 2643 3439 3201 2935 3240 3140 3550 2545 2357 2778 2826 2370 2975程序清单% 蚁群算法计算旅行商问题(TSP)% 清空环境变量clear allclc% 导入数据load citys_data.mat% 计算城市间相互距离n = size(citys,1); %城市的个数D = zeros(n,n); %n行n列的矩阵,即任意二个城市之间的距离for i = 1:n for j = 1:n if i = j D
15、(i,j) = sqrt(sum(citys(i,:) - citys(j,:).2); else D(i,j) = 1e-4; end end end% 初始化参数m = 50; % 蚂蚁数量alpha = 1; % 信息素重要程度因子beta = 5; % 启发函数重要程度因子rho = 0.1; % 信息素挥发因子Q = 1; % 常系数Eta = 1./D; % 启发函数Tau = ones(n,n); % 信息素矩阵,全1矩阵Table = zeros(m,n); % 路径记录表,全0矩阵,每只蚂蚁依次走过的城市iter = 1; % 迭代次数初值iter_max = 200; %
16、最大迭代次数 Route_best = zeros(iter_max,n); % 各代最佳路径 Length_best = zeros(iter_max,1); % 各代最佳路径的长度 Length_ave = zeros(iter_max,1); % 各代路径的平均长度 % 迭代寻找最佳路径while iter = rand); target = allow(target_index(1); Table(i,j) = target; end end % 计算各个蚂蚁的路径距离 Length = zeros(m,1);%m行1列的矩阵 for i = 1:m Route = Table(i,:
17、);%第i只蚂蚁的路线 for j = 1:(n - 1) %依次计算第i只蚂蚁所走过的各城市间的距离j-j+1 Length(i) = Length(i) + D(Route(j),Route(j + 1); end Length(i) = Length(i) + D(Route(n),Route(1);%加上最后城市到首个城市的距离 end % 计算最短路径距离及平均距离 if iter = 1 min_Length,min_index = min(Length); %各只蚂义中路长的最小值 Length_best(iter) = min_Length; Length_ave(iter)
18、= mean(Length); Route_best(iter,:) = Table(min_index,:);%取取最短路线 else min_Length,min_index = min(Length); %如果不是第一轮,则要与上轮最小路长进行比较 Length_best(iter) = min(Length_best(iter - 1),min_Length); Length_ave(iter) = mean(Length); if Length_best(iter) = min_Length Route_best(iter,:) = Table(min_index,:); else
19、Route_best(iter,:) = Route_best(iter-1),:); end end % 更新信息素 Delta_Tau = zeros(n,n); % 逐个蚂蚁计算 for i = 1:m % 逐个城市计算 for j = 1:(n - 1) Delta_Tau(Table(i,j),Table(i,j+1) = Delta_Tau(Table(i,j),Table(i,j+1) + Q/Length(i); end Delta_Tau(Table(i,n),Table(i,1) = Delta_Tau(Table(i,n),Table(i,1) + Q/Length(i)
20、; end Tau = (1-rho) * Tau + Delta_Tau; % 迭代次数加1,清空路径记录表 iter = iter + 1; Table = zeros(m,n);end% 结果显示Shortest_Length,index = min(Length_best);Shortest_Route = Route_best(index,:);disp(最短距离: num2str(Shortest_Length);disp(最短路径: num2str(Shortest_Route Shortest_Route(1);% 绘图figure(1)plot(citys(Shortest_
21、Route,1);citys(Shortest_Route(1),1),. citys(Shortest_Route,2);citys(Shortest_Route(1),2),o-);grid onfor i = 1:size(citys,1) text(citys(i,1),citys(i,2), num2str(i);endtext(citys(Shortest_Route(1),1),citys(Shortest_Route(1),2), 起点);text(citys(Shortest_Route(end),1),citys(Shortest_Route(end),2), 终点);xl
22、abel(城市位置横坐标)ylabel(城市位置纵坐标)title(蚁群算法优化路径(最短距离: num2str(Shortest_Length) )figure(2)plot(1:iter_max,Length_best,b,1:iter_max,Length_ave,r:)legend(最短距离,平均距离)xlabel(迭代次数)ylabel(距离)title(各代最短距离与平均距离对比)结果最短距离:15828.7082最短路径:15 14 12 13 11 23 16 4 2 5 6 7 8 9 10 3 18 17 19 24 25 20 21 22 26 28 27 30 31 29 1 15依次为城市的序号为了研究参数:蚂蚁数目m,信息素重要程度a,启发式函数b,信息素挥发度r对算法的影响,可以做系列实验固定其他参数,让蚂蚁数目m从550,对于每个m运行20次,记录这20次中每次的最小路径长度,除以20做为平均值,同时记录这20个数中最大与最小值,从而得到一个实验数据表,会发现最短距离出现的位置。其他参数也可同样研究,从而发现规律专心-专注-专业