TSP问题的几种解法对比_精品文档资料下载.pdf
《TSP问题的几种解法对比_精品文档资料下载.pdf》由会员分享,可在线阅读,更多相关《TSP问题的几种解法对比_精品文档资料下载.pdf(36页珍藏版)》请在冰豆网上搜索。
基于自然界蚂蚁觅食的最短路径原理,建立模型,通过MATLAB程序,得出最短旅行距离为427.8971。
关键词关键词模拟退火算法线性规划蚁群算法一问题重述一个人要到30个不同的城市游玩,每两个城市i和j之间的距离为,如何选择一条路径使得此人走遍所有城市后又回到起点,要求所走路径最短。
二.符号说明S解空间C代价函数P接受概率城市i和j之间的距离N城市的数量三问题分析与处理便于我们说明和解决问题,先将题中给出的城市编号:
城市编号X坐标Y坐标城市编号X坐标Y坐标城市编号X坐标Y坐标14194116460218776237841218542218403576413226023134042562148346248275764159138256232629916253826583576858172442274521871441858692841269546219717129443510836920747830450表一30座城市的坐标3.1模拟退火方法这是一个典型的TSP组合优化问题1,并且是一个N-P难问题。
传统的解决此类问题的方法包括:
分枝定界法、线性规划法和动态规划法等等。
随着人工智能的发展,一些智能优化的算法逐渐产生,这其中模拟退火算法因具有高效、稳定、通用、灵活的优点备受专家和学者的青睐。
将模拟退火算法引入STP问题求解,可以有效的避免在求解过程中陷入局部最优。
下面就是我们用模拟退火算法具体解决这个问题。
算法设计步骤:
(1)问题的解空间和初始值城市旅行问题的解空间S是遍访36个城市恰好一次的所有回路,是所有城市排列的集合。
本问题的解空间S可表示为1,2,3,36的所有排列的集合,即:
12361236S=,|,1,236cccccc为,的排列组合其中,每一排列表示遍访n个城市的一个路径,=j表示第i个访问城市j。
由于模拟退火算法的最优解和初始状态没有很大的依赖关系,故初使解为随机函数生成的一个1,2,36的随机排列0。
(2)目标函数设定目标函数即为访问36座城市的路径总长度,也可称之为代价函数,即:
3612361136i=1C,=d(c,c)+d(c,c)iiccc
(1)(3)新解的产生新解可通过分别或者交替使用一下两种方法来产生:
二变换法:
任选序号,(设n),变换,之间的访问顺序;
三变化法:
任选序号,(设),将,之间的路径插到之后访问。
(4)目标函数差计算变换前的和变换后的目标函数的插值:
C=C(S)-C(S)ii
(2)(5)Metreoplis接受准则以新解与当前解的目标函数差定义接受概率,即10P=exp(/T),0CC(3)(6)算法流程图图1(7)程序编写,在MTALAB上运行(代码见附录1)得出结果:
城市遍历顺序10117814152425262728291617222330121345612391819202110所求最短距离422.134表二Matlab程序计算结果(8)结果分析f(s*)n调用改进的抽样过程得到最优解和当前状态s(k),s(i)=s(k)yynn我们用的模拟退火算法得出的城市遍历顺序,可以在此基础上做局部最优处理,看结果是否有变化。
3.1线性规划方法对TSP的数学描述:
引入0-1变量():
=1表示路线从i到j;
=0表示不走ij这条路。
则TSP可表示为:
=,.xij=1,i=1,2,n,ji,nj=1xij=1,j=1,2ni=1,n,ij,xij=0,1,i,j=1,2,n不含子巡回(4)上述约束条件中的前三个类似指派型问题,只是TSP的必要条件;
因此我们针对第四条约束条件用下列数学表达式来实现:
增加变量(=1,2,),并且+1;
0,=1,2,=2,3,ij(5)于是TSP问题转化成了一个混合整数线性规划模型,我们利用Lingo编程(代码和原始结果见附录2),得到如下结果:
城市遍历顺序1654131230232217162928272625241514871110212019189321所求最短距离422.1300表三lingo程序计算结果3.3蚁群算法3.3.1蚁群算法数学模型蚂蚁在觅食时,能在走过的路径上释放一种蚂蚁特有的分泌物信息激素,使得一定范围内的其他蚂蚁能够察觉到并由此影响他们以后的行为路径,当一些路径上的蚂蚁越来越多,使得蚁群对这条路的选择概率也越来越高,从而更增加了该路径的信息激素强度。
(1)符号说明m整个蚂蚁群体中蚂蚁的数量t时刻城市i与城市j连接路径上的信息素浓度(t)t时刻蚂蚁k从城市i转移到城市j的概率ij(t)蚂蚁从城市i到城市j的期望程度(启发函数)蚂蚁k待访问的城市集合启发函数因子信息素因子信息素的挥发程度
(2)模型建立初始状态下,=0,蚂蚁选择路线会受到其他蚂蚁留下的信息素浓度和访问某城市的期望的影响,所以我们对(t)的定义为:
(t)=()()()(),0,(6)蚂蚁在遍历各城市的过程中,各个城市的连接路径上的信息素浓度在逐渐消失,当所有蚂蚁完整的走完一遍所有城市之后,各城市连接路径之间的信息素浓度为:
(t+1)=
(1)(t)+,0=tfforr=1:
Markov_lengthif(rand0.5)ind1=0;
ind2=0;
while(ind1=ind2)ind1=ceil(rand.*amount);
ind2=ceil(rand.*amount);
endtmp1=sol_new(ind1);
sol_new(ind1)=sol_new(ind2);
sol_new(ind2)=tmp1;
elseind1=0;
ind3=0;
while(ind1=ind2)|(ind1=ind3).|(ind2=ind3)|(abs(ind1-ind2)=1)ind1=ceil(rand.*amount);
ind3=ceil(rand.*amount);
endtmp1=ind1;
tmp2=ind2;
tmp3=ind3;
if(ind1ind2)&
(ind2ind3);
elseif(ind1ind3)&
(ind3ind2)ind2=tmp3;
ind3=tmp2;
elseif(ind2ind1)&
(ind1ind3)ind1=tmp2;
ind2=tmp1;
elseif(ind2ind3)&
(ind3ind1)ind1=tmp2;
ind2=tmp3;
ind3=tmp1;
elseif(ind3ind1)&
(ind1ind2)ind1=tmp3;
elseif(ind3ind2)&
(ind2ind1)ind1=tmp3;
ind2=tmp2;
endtmplist1=sol_new(ind1+1):
(ind2-1);
sol_new(ind1+1):
(ind1+ind3-ind2+1)=.sol_new(ind2):
(ind3);
sol_new(ind1+ind3-ind2+2):
ind3)=.tmplist1;
endE_new=0;
fori=1:
(amount-1)E_new=E_new+.dist_matrix(sol_new(i),sol_new(i+1);
endE_new=E_new+.dist_matrix(sol_new(amount),sol_new
(1);
ifE_newE_currentE_current=E_new;
sol_current=sol_new;
ifE_newE_bestE_best=E_new;
sol_best=sol_new;
endelseifrandexp(-(E_new-E_current)./t)E_current=E_new;
elsesol_new=sol_current;
endendendt=t.*a;
enddisp(最优解为)disp(sol_best)disp(最短距离为)disp(E_best)最优解为:
Columns1through25101178141524252627282916172223301213456123Columns26through30918192021最短距离:
422.1344附录附录22利用lingo求解:
代码:
MODEL:
SETS:
CITY/1.30/:
U;
!
cities;
link(CITY,CITY):
dist,x;
endsetsdata:
dist=file(dist.txt);
enddatan=size(city);
goal:
;
min=sum(link:
dist*x);
for(city(k):
sum(city(i)|i#ne#k:
x(i,k)=1;
sum(city(j)|j#ne#k:
x(k,j)=1;
);
for(city(a):
for(city(j)|j#GT#1#and#a#NE#j:
u(a)-u(j)+n*x(a,j)=n-1);
增加的约束条件;
u(a)=n-1);
for(link:
bin(x);
END运行结果:
Feasiblesolutionfound.Objectivevalue:
422.1300Objectivebound:
413.5400Infeasibilities:
0.000000Extendedsolversteps:
51765Totalsolveriterations:
2049250VariableValueX(1,1)0.000000X(1,2)0.000000X(1,3)0.000000X(1,4)0.000000X(1,5)0.000000X(1,6)1.000000X(1,7)0.000000X(1,8)0.000000X(1,9)0.000000X(1,10)0.000000X(1,11)0.000000X(1,12)0.000000X(1,13)0.000000X(1,14)0.000000X(1,15)0.000000X(1,16)0.000000X(1,17)0.000000X(1,18)