整理蚁群算法实现TSP.docx
- 文档编号:7952790
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:13
- 大小:151.62KB
整理蚁群算法实现TSP.docx
《整理蚁群算法实现TSP.docx》由会员分享,可在线阅读,更多相关《整理蚁群算法实现TSP.docx(13页珍藏版)》请在冰豆网上搜索。
整理蚁群算法实现TSP
蚁群算法求解TSP问题
蚁群算法求解TSP问题
摘 要:
蚁群算法是通过蚂蚁觅食而发展出的一种新的启发算法,该算法已经成功的解决了诸如TSP问题。
本文简要学习探讨了蚂蚁算法和TSP问题的基本内容,尝试通过matlab仿真解决一个实例问题。
关键词:
蚁群算法;TSP问题;matlab。
一、引言
TSP(TravellingSalesmanProblem)又称货郎担或巡回售货员问题。
TSP问题可以描述为:
有N个城市,一售货员从起始城市出发,访问所有的城市一次,最后回到起始城市,求最短路径。
TSP问题除了具有明显的实际意义外,有许多问题都可以归结为TSP问题。
目前针对这一问题已有许多解法,如穷举搜索法(ExhaustiveSearchMethod),贪心法(GreedyMethod),动态规划法(DynamicProgrammingMethod)分支界定法(Branch-And-Bound),遗传算法(GeneticAgorithm)模拟退火法(simulatedannealing),禁忌搜索。
本文介绍了一种求解TSP问题的算法—蚁群算法,并通过matlab仿真求解31个省会城市之间的最短距离,经过仿真试验,证明是一种解决TSP问题有效的方法。
20世纪90年代,意大利学者M.Dorigo等人在新型算法研究的过程中,通过模拟自然界蚂蚁的觅食过程:
即通过信息素(pheromone)的相互交流从而找到由蚁巢至食物的最短路径,提出了一种基于信息正反馈原理的新型模拟进化算法——蚁群算法(AntColonyalgorithm)。
蚁群算法是继遗传算法、人工神经网络等算法之后的又一种启发式算法,它的基本原理借鉴了这样一个客观事实:
蚂蚁由自组织的合作能力所产生的群体智能来寻找路径,它被认为是用于解决组合优化问题的又一种新方法。
蚁群算法是一种适应性好、鲁棒性强,具有正反馈结构的并行算法。
这些初步研究已显示出蚁群算法在求解复杂优化问题(特别是离散优化问题)方面的一些优越性,证明它是一种很有发展前景的方法。
蚂蚁算法在各个领域的应用,说明该算法有着广泛的适应性,但由于该算法出现的较晚,对其研究还处于起步阶段,远不如遗传算法、人工神经网络和模拟退火算法那样成熟。
二、蚁群算法原理
蚁群算法的基本原理来源于自然界蚂蚁觅食的最短路径原理,根据昆虫学家的观察,发现自然界的蚂蚁虽然视觉不发达,但它可以在没有任何提示的情况下找到从食物源到巢穴的最短路径,并且能在环境发生变化(如原有路径上有了障碍物)后,自适应地搜索新的最佳路径。
蚂蚁是如何做到这一点的呢?
原来,单个的蚂蚁为了避免自己迷路,它在爬行时,同时也会释放一种特殊的分泌物——信息素(Pheromone),而且它也能觉察到一定范围内的其它蚂蚁所分泌的信息素,并由此影响它自己的行为。
当一条路上的信息素越来越多(当然,随着时间的推移会逐渐减弱),后来的蚂蚁选择这条路径的概率也就越来越大,从而进一步增加了该路径的信息素浓度,这种选择过程称为蚂蚁的自催化过程,其原理是一种正反馈机制。
这里我们可以用一个图来说明蚂蚁觅食的最短路径选择原理,如图2-1所示。
图2-1蚁群觅食原理
如图2-1(a)所示,我们假设A点是食物,而E点是蚂蚁的巢穴,当A、E两点间没有任何障碍物阻挡时,蚂蚁不存在路径选择的问题,这种情况最简单:
由于两点间直线距离最短,蚂蚁们搬运食物时,会以直线的形式往返爬行。
但在图2-1(b)中的情形有所变化,若某时刻忽然有一个障碍物出现在蚂蚁经过的路径中,原有的路径被切断,那么从A点到E点的蚂蚁就必须在B点决定应该往左还是往右走,而从E点到A点的蚂蚁也必须在D点决定选择走哪条路径;这种决定会受到各条路径上以往蚂蚁留下的信息素浓度(即残留信息素浓度)的影响。
如果往右走的路径上的信息素浓度比较大,那么右边的路径被蚂蚁选中的可能性也就大一些;但是对障碍出现后第一个到达B点或D点的蚂蚁而言,因为没有信息素的影响,所以它们选择向左或者向右的可能性是一样的,(b)图所表示的正是此时的情况。
若以从A点到E点的蚂蚁为例进行说明(对于从E点到A点的蚂蚁而言,过程也基本是一样的),由于路径BCD比路径BHD要短,因此选择BCD路径的第一只蚂蚁要比选择BHD的第一只蚂蚁早到达D点;此时,从D点向B点看,路径DCB上的信息素浓度要比路径DHB上的信息素浓度大。
因此从下一时刻开始,从E点经D点到A点的蚂蚁,它们选择DCB路径的可能性要比选择DHB路径的可能性大得多,从而使路径BCD(或DCB)上信息素浓度与路径BHD(或DHB)上信息素浓度的差变大;而信息素浓度差变大的结果是选择路径BCD(或DCB)的蚂蚁进一步增加,这又导致信息素浓度差进一步加大。
如图2-1(c)所示,随着时间的推移,几乎所有的蚂蚁都会选择路径BCD搬运食物,而我们同时也会发现:
BCD路径也正是事实上的最短路径。
这种蚁群寻径的原理可简单理解为:
对于单个的蚂蚁来说,它并没有要寻找到最短路径的主观上的故意;但对于整个蚁群系统来说,它们又确实达到了寻找到最短路径的客观上的效果。
在自然界中,蚁群的这种寻找路径的过程表现为一种正反馈的过程,与蚁群算法中人工蚁群的寻优算法极为一致。
例如,我们把只具备了简单功能的工作单元视为“蚂蚁”,那么上述寻找路径的过程可以用于解释蚁群算法中人工蚁群的寻优过程。
三、蚁群算法解决TSP问题
我们来介绍一下如何用蚁群算法求解n个城市的TSP设
为城市i,j之间的几何距离,
=
。
设
表示t时刻位于城市i的蚂蚁的个数,蚂蚁总数m=
,
表示t时刻在ij连线上残留的信息量,初始时刻各条路径上的信息量为
=C(C为常数)。
用参数
表示信息量的保留度,则经过n个时刻后,路径ij上的信息量根据下式作调整:
⑴
⑵
表示第k只蚂蚁在本次循环中留在路径ij上的信息量,
表示本次循环所有经过的蚂蚁留在ij上的信息量。
=
⑶
定义
=1/
。
蚂蚁k(k=1,2,…,m)在运动过程中,
表示在t时刻蚂蚁k由位置i转移到位置j的概率:
=
⑷
我们用
记录蚂蚁k目前已经走过的城市集合,allow
表示蚂蚁k下一步允许选择的城市集合,它等于全部的城市集合除去第k只蚂蚁已走过的集合
。
定义
为第k只蚂蚁在本次循环中走过的路径和。
用蚁群算法解决TSP问题是一个递推过程,当t=0时,将蚂蚁放在各城市,设定每条路径上的信息量初值
=C,每只蚂蚁根据公式⑷决定的概率从城市i到城市j。
表示曾经有多少蚂蚁经过路径(i,j);
说明较近的城市有更大的可能性被选中。
α,β用来控制两者对蚂蚁选择的影响力程度。
经过一个循环后,根据公式⑴⑵⑶计算更新每条路径的信息量
。
将所有的
复原,最后求出本次循环的最短路径min
。
这个过程不断重复,直到所有的蚂蚁都选择同样的路径,或者循环次数达到预先设定的最高次数
。
四、解决n个城市的TSP问题的算法步骤
1.初始化:
设定t=0,循环计数器nc=0,对每条路径设定初始信息量
=C,
=0将m只蚂蚁放在n个城市上(为了使问题简化,设定m=n)。
2.设定taub集合的索引s=1,对k从1到m,把第k只蚂蚁放在起始位置,对应的设定集合
3.重复下面的步骤,直到集合tabu满为止(这一步将重复n-1次):
设定s=s+1;对k从1到m,根据公式⑷确定的概率,选择下一步移动的目标城市j{在时间t时,第k只蚂蚁所在的城市是i=
};将第k只蚂蚁移到城市j;把j加入到集合
中。
4.对k从1到m:
将第k只蚂蚁从
移动到
;计算第k只蚂蚁所走过的路程和
,并更新最小路径min
;对每条路径(i,j):
=
5.对每条路径(i,j)根据
计算
;设定t=t+n;设定NC=NC+1;对每条路径(i,j),设定
=0。
6.如果NC<
,则清空所有的集合tabu,转到第二步;否则,得出最短的路径。
算法的流程如下图:
五、仿真结果
参考文献:
[1]黄丽韶,朱喜基.基于MATLAB的蚁群算法求解旅行商问题[J].计算机世界.
[2]李志伟.基于群集智能的蚁群优化算法研究[J].计算机工程与设计,2003,08.[3]王源.蚂蚁算法求解TSP问题.
[4]杨殿生.TSP问题的蚁群算法求解.鄂州大学报.
[5]尹晓峰,刘春煌.基于MATLAB的混合型蚁群算法求解旅行商问题[J].铁路计算机应用,2005,09.
附录
附录一:
Matlab实现程序如下:
%一始化变量
clear;
Alpha=1;%信息素重要程度的参数(对路径选择有很大影响)
Beta=5;%启发式因子重要程度的参数(对路径选择有很大影响)
Rho=0.95;%信息素蒸发系数
NC_max=200;%最大迭代次数(循环多结果更优适度即可)
Q=100;%信息素增加强度系数(对结果影响小)
CityNum=31;%问题的规模(城市个数)
[dislist,Clist]=tsp(CityNum);
m=CityNum;%蚂蚁个数
Eta=1./dislist;%Eta为启发因子,这里设为距离的倒数
Tau=ones(CityNum,CityNum);%Tau为信息素矩阵
Tabu=zeros(m,CityNum);%存储并记录路径的生成
NC=1;%迭代计数器
R_best=zeros(NC_max,CityNum);%各代最佳路线
L_best=inf.*ones(NC_max,1);%各代最佳路线的长度
L_ave=zeros(NC_max,1);%各代路线的平均长度
figure
(1);
whileNC<=NC_max%停止条件之一:
达到最大迭代次数
%二将m只蚂蚁放到CityNum个城市上
Randpos=[];
fori=1:
(ceil(m/CityNum))
Randpos=[Randpos,randperm(CityNum)];
end
Tabu(:
1)=(Randpos(1,1:
m))';
%三m只蚂蚁按概率函数选择下一座城市,完成各自的周游
forj=2:
CityNum
fori=1:
m
visited=Tabu(i,1:
(j-1));%已访问的城市
J=zeros(1,(CityNum-j+1));%待访问的城市
P=J;%待访问城市的选择概率分布
Jc=1;
fork=1:
CityNum
ifisempty(find(visited==k,1))
J(Jc)=k;
Jc=Jc+1;
end
end
%计算待选城市的概率分布
fork=1:
length(J)
P(k)=(Tau(visited(end),J(k))^Alpha)*(Eta(visited(end),J(k))^Beta);
end
P=P/(sum(P));
%按概率原则选取下一个城市
Pcum=cumsum(P);
Select=find(Pcum>=rand);
to_visit=J(Select
(1));
Tabu(i,j)=to_visit;
end
end
ifNC>=2
Tabu(1,:
)=R_best(NC-1,:
);
end
%四记录本次迭代最佳路线
L=zeros(m,1);
fori=1:
m
R=Tabu(i,:
);
L(i)=CalDist(dislist,R);
end
L_best(NC)=min(L);
pos=find(L==L_best(NC));
R_best(NC,:
)=Tabu(pos
(1),:
);
L_ave(NC)=mean(L);
drawTSP(Clist,R_best(NC,:
),L_best(NC),NC,0);
NC=NC+1;
%五更新信息素
Delta_Tau=zeros(CityNum,CityNum);
fori=1:
m
forj=1:
(CityNum-1)
Delta_Tau(Tabu(i,j),Tabu(i,j+1))=Delta_Tau(Tabu(i,j),Tabu(i,j+1))+Q/L(i);
end
Delta_Tau(Tabu(i,CityNum),Tabu(i,1))=Delta_Tau(Tabu(i,CityNum),Tabu(i,1))+Q/L(i);
end
Tau=(1-Rho).*Tau+Delta_Tau;
%六禁忌表清零
Tabu=zeros(m,CityNum);
%pause;
tauji(NC)=Tau(1,2);
end
%七输出结果
Pos=find(L_best==min(L_best));
Shortest_Route=R_best(Pos
(1),:
);
Shortest_Length=L_best(Pos
(1));
figure
(2);
plot([L_bestL_ave]);
legend('最短距离','平均距离');
附录二:
function[DLn,cityn]=tsp(n)
ifn==31
city31=[13042312;36391315;41772244;37121399;34881535;33261556;32381229;41961004;
4312790;4386570;30071970;25621756;27881491;23811676;1332695;37151678;
39182179;40612370;37802212;36762578;40292838;42632931;34291908;35072367;
33942643;34393201;29353240;31403550;25452357;27782826;23702975];%31citiesd'=423.741byDBFogel
fori=1:
31
forj=1:
31
DL31(i,j)=((city31(i,1)-city31(j,1))^2+(city31(i,2)-city31(j,2))^2)^0.5;
end
end
DLn=DL31;
cityn=city31;
end
附录三:
functionm=drawTSP(Clist,BSF,bsf,p,f)
CityNum=size(Clist,1);
fori=1:
CityNum-1
plot([Clist(BSF(i),1),Clist(BSF(i+1),1)],[Clist(BSF(i),2),Clist(BSF(i+1),2)],'ms-','LineWidth',2,'MarkerEdgeColor','k','MarkerFaceColor','g');
holdon;
end
plot([Clist(BSF(CityNum),1),Clist(BSF
(1),1)],[Clist(BSF(CityNum),2),Clist(BSF
(1),2)],'ms-','LineWidth',2,'MarkerEdgeColor','k','MarkerFaceColor','g');
[例题-2006年真题]下列关于建设项目环境影响评价实行分类管理的表述,正确的是( )title([num2str(CityNum),'城市TSP']);
(1)资质等级。
评价机构的环评资质分为甲、乙两个等级。
环评证书在全国范围内使用,有效期为4年。
iff==0
text(1000,200,['第',int2str(p),'步','最短距离为',num2str(bsf)]);
[答疑编号502334050101]else
1.规划环境影响评价的技术依据text(1000,100,['最终搜索结果:
最短距离',num2str(bsf)]);
end
内涵资产定价法基于这样一种理论,即人们赋予环境的价值可以从他们购买的具有环境属性的商品的价格中推断出来。
holdoff;
pause(0.05);
附录四:
functionF=CalDist(dislist,s)
(4)是否满足环境功能区划和生态功能区划标准。
DistanV=0;
大纲要求n=size(s,2);
fori=1:
(n-1)
二、安全预评价DistanV=DistanV+dislist(s(i),s(i+1));
(3)环境影响分析、预测和评估的可靠性;end
一、环境影响评价的基础DistanV=DistanV+dislist(s(n),s
(1));
F=DistanV;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 整理 算法 实现 TSP
![提示](https://static.bdocx.com/images/bang_tan.gif)