2022年遗传算法解决TSP问题的matlab程序 .pdf
《2022年遗传算法解决TSP问题的matlab程序 .pdf》由会员分享,可在线阅读,更多相关《2022年遗传算法解决TSP问题的matlab程序 .pdf(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1.遗传算法解决TSP 问题(附 matlab 源程序)2.知 n 个城市之间的相互距离,现有一个推销员必须遍访这n 个城市,并且每个城市3.只能访问一次,最后又必须返回出发城市。如何安排他对这些城市的访问次序,可使其4.旅行路线的总长度最短?5.用图论的术语来说,假设有一个图g=(v,e),其中 v 是顶点集,e 是边集,设d=(dij)6.是由顶点 i 和顶点 j 之间的距离所组成的距离矩阵,旅行商问题就是求出一条通过所有顶7.点且每个顶点只通过一次的具有最短距离的回路。8.这个问题可分为对称旅行商问题(dij=dji,任意 i,j=1,2,3,,n)和非对称旅行商9.问题(dij dji
2、,任意i,j=1,2,3,,n)。10.若对于城市 v=v1,v2,v3,vn 的一个访问顺序为t=(t1,t2,t3,ti,tn),其中11.ti v(i=1,2,3,n),且记tn+1=t1,则旅行商问题的数学模型为:12.min l=d(t(i),t(i+1)(i=1,n)13.旅行商问题是一个典型的组合优化问题,并且是一个np 难问题,其可能的路径数目14.与城市数目 n 是成指数型增长的,所以一般很难精确地求出其最优解,本文采用遗传算法15.求其近似解。16.遗传算法:17.初始化过程:用v1,v2,v3,vn代表所选 n 个城市。定义整数pop-size作为染色体的个数18.,并且
3、随机产生pop-size个初始染色体,每个染色体为1 到 18 的整数组成的随机序列。19.适应度 f 的计算:对种群中的每个染色体vi,计算其适应度,f=d(t(i),t(i+1).20.评价函数 eval(vi):用来对种群中的每个染色体vi 设定一个概率,以使该染色体被选中21.的可能性与其种群中其它染色体的适应性成比例,既通过轮盘赌,适应性强的染色体被22.选择产生后台的机会要大,设alpha(0,1),本文定义基于序的评价函数为eval(vi)=al 23.pha*(1-alpha).(i-1)。随机规划与模糊规划 24.选择过程:选择过程是以旋转赌轮pop-size次为基础,每次旋
4、转都为新的种群选择一个25.染色体。赌轮是按每个染色体的适应度进行选择染色体的。26.step1、对每个染色体vi,计算累计概率qi,q0=0;qi=eval(vj)j=1,i;i=1,27.pop-size.28.step2、从区间(0,pop-size)中产生一个随机数r;29.step3、若 qi-1 step4、重复 step2 和 step3 共 pop-size次,这样可以得到pop-size个复制的染色体。30.grefenstette编码:由于常规的交叉运算和变异运算会使种群中产生一些无实际意义的31.染色体,本文采用grefenstette编码遗传算法原理及应用可以避免这种情
5、况的出现32.。所谓的 grefenstette编码就是用所选队员在未选(不含淘汰)队员中的位置,如:33.8 15 2 16 10 7 4 3 11 14 6 12 9 5 18 13 17 1 34.对应:35.8 14 2 13 8 6 3 2 5 7 3 4 3 2 4 2 2 1。36.交叉过程:本文采用常规单点交叉。为确定交叉操作的父代,从到 pop-size重复以下过37.程:从 0,1中产生一个随机数r,如果 r 将所选的父代两两组队,随机产生一个位置进行交叉,如:38.8 14 2 13 8 6 3 2 5 7 3 4 3 2 4 2 2 1 39.6 12 3 5 6 8
6、5 6 3 1 8 5 6 3 3 2 1 1 40.交叉后为:41.8 14 2 13 8 6 3 2 5 1 8 5 6 3 3 2 1 1 42.6 12 3 5 6 8 5 6 3 7 3 4 3 2 4 2 2 1 43.变异过程:本文采用均匀多点变异。类似交叉操作中选择父代的过程,在r 选择多个染色体vi 作为父代。对每一个选择的父代,随机选择多个位置,使其在每位置名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 20 页 -44.按均匀变异(该变异点xk 的取值范围为 ukmin,ukmax,产生一个 0,1 中随机数r,该点45.变异为 xk=ukmin+r(ukm
7、ax-ukmin))操作。如:46.8 14 2 13 8 6 3 2 5 7 3 4 3 2 4 2 2 1 47.变异后:48.8 14 2 13 10 6 3 2 2 7 3 4 5 2 4 1 2 1 49.反 grefenstette编码:交叉和变异都是在grefenstette编码之后进行的,为了循环操作50.和返回最终结果,必须逆grefenstette编码过程,将编码恢复到自然编码。51.循环操作:判断是否满足设定的带数xzome,否,则跳入适应度f 的计算;是,结束遗传52.操作,跳出。53.54.55.56.matlab 代码57.58.59.60.distTSP.txt
8、61.0 6 18 4 8 62.7 0 17 3 7 63.4 4 0 4 5 64.20 19 24 0 22 65.8 8 16 6 0 66.%GATSP.m 67.function gatsp1()68.clear;69.load distTSP.txt;70.distance=distTSP;71.N=5;72.ngen=100;73.ngpool=10;74.%ngen=input(#of generations to evolve=);75.%ngpool=input(#of chromosoms in the gene pool=);%size of genepool 76.
9、gpool=zeros(ngpool,N+1);%gene pool 77.for i=1:ngpool,%intialize gene pool 78.gpool(i,:)=1 randomize(2:N)1;79.for j=1:i-1 80.while gpool(i,:)=gpool(j,:)81.gpool(i,:)=1 randomize(2:N)1;82.end 83.end 84.end 85.86.costmin=100000;87.tourmin=zeros(1,N);名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 20 页 -88.cost=zeros(1,
10、ngpool);89.increase=1;resultincrease=1;90.for i=1:ngpool,91.cost(i)=sum(diag(distance(gpool(i,:),rshift(gpool(i,:);92.end 93.%record current best solution 94.costmin,idx=min(cost);95.tourmin=gpool(idx,:);96.disp(num2str(increase)minmum trip length=num2str(costmin)97.98.costminold2=200000;costminold1
11、=150000;resultcost=100000;99.tourminold2=zeros(1,N);100.tourminold1=zeros(1,N);101.resulttour=zeros(1,N);102.while(abs(costminold2-costminold1);100)&(abs(costminold1-costmin);100)&(increase;500)103.104.costminold2=costminold1;tourminold2=tourminold1;105.costminold1=costmin;tourminold1=tourmin;106.in
12、crease=increase+1;107.if resultcostcostmin 108.resultcost=costmin;109.resulttour=tourmin;110.resultincrease=increase-1;111.end 112.for i=1:ngpool,113.cost(i)=sum(diag(distance(gpool(i,:),rshift(gpool(i,:);114.end 115.%record current best solution 116.costmin,idx=min(cost);117.tourmin=gpool(idx,:);11
13、8.%=119.%copy gens in th gpool according to the probility ratio 120.%1.1 copy twice 121.%=0.9 copy once 122.%;0.9 remove 123.csort,ridx=sort(cost);124.%sort from small to big.125.csum=sum(csort);126.caverage=csum/ngpool;127.cprobilities=caverage./csort;128.copynumbers=0;removenumbers=0;129.for i=1:n
14、gpool,130.if cprobilities(i)1.1 131.copynumbers=copynumbers+1;名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 20 页 -132.end 133.if cprobilities(i)0.9 134.removenumbers=removenumbers+1;135.end 136.end 137.copygpool=min(copynumbers,removenumbers);138.for i=1:copygpool 139.for j=ngpool:-1:2*i+2 gpool(j,:)=gpool(j-1,:);
15、140.end 141.gpool(2*i+1,:)=gpool(i,:);142.end 143.if copygpool=0 144.gpool(ngpool,:)=gpool(1,:);145.end 146.%=147.%when genaration is more than 50,or the patterns in a couple are too close,do mutation 148.for i=1:ngpool/2 149.%150.sameidx=gpool(2*i-1,:)=gpool(2*i,:);151.diffidx=find(sameidx=0);152.i
16、f length(diffidx)1,207.if n=1,208.col=1;209.elseif n1,210.error(x must be a vector!break);211.end%x is a column vectorelseif m=1,212.if n=1,y=x;213.return 214.elseif n1,215.col=0;%x is a row vector endend 216.if dir=1,%rotate left or up 217.if col=0,%row vector,rotate left 218.y=x(2:n)x(1);219.elsei
17、f col=1,名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 20 页 -220.y=x(2:n);x(1);%rotate up 221.end 222.elseif dir=0,%default rotate right or down 223.if col=0,224.y=x(n)x(1:n-1);225.elseif col=1%column vector 226.y=x(n);x(1:n-1);227.end 228.end 229.%=230.function L1,L2=crossgens(X1,X2)231.%Usage:L1,L2=crossgens(X1,X
18、2)232.s=randomize(2:12);233.n1=min(s(1),s(11);n2=max(s(1),s(11);234.X3=X1;X4=X2;235.for i=n1:n2,236.for j=1:13,237.if X2(i)=X3(j),238.X3(j)=0;239.end 240.if X1(i)=X4(j),X4(j)=0;241.end 242.end 243.end 244.j=13;k=13;245.for i=12:-1:2,246.if X3(i)=0,247.j=j-1;248.t=X3(j);X3(j)=X3(i);X3(i)=t;249.end 25
19、0.if X4(i)=0,251.k=k-1;252.t=X4(k);X4(k)=X4(i);X4(i)=t;253.end 254.end 255.for i=n1:n2 256.X3(2+i-n1)=X2(i);257.X4(2+i-n1)=X1(i);258.end 259.L1=X3;L2=X4;遗传算法程序 matlab 1.遗传算法程序:名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 20 页 -2.说明:fga.m 为遗传算法的主程序;采用二进制Gray 编码,采用基于轮盘赌法的非线性排名选择,均匀交叉,变异操作,而且还引入了倒位操作!3.4.function Be
20、stPop,Trace=fga(FUN,LB,UB,eranum,popsize,pCross,pMutation,pInversion,options)5.%BestPop,Trace=fmaxga(FUN,LB,UB,eranum,popsize,pcross,pmutation)6.%Finds a maximum of a function of several variables.7.%fmaxga solves problems of the form:8.%max F(X)subject to:LB=X=UB 9.%BestPop-最优的群体即为最优的染色体群10.%Trace-
21、最佳染色体所对应的目标函数值11.%FUN-目标函数12.%LB-自变量下限13.%UB-自变量上限14.%eranum-种群的代数,取 100-1000(默认 200)15.%popsize-每一代种群的规模;此可取50-200(默认 100)16.%pcross-交叉概率,一般取 0.5-0.85之间较好(默认 0.8)17.%pmutation-初始变异概率,一般取 0.05-0.2之间较好(默认 0.1)18.%pInversion-倒位概率,一般取 0.05 0.3 之间较好(默认 0.2)19.%options-1*2矩阵,options(1)=0二进制编码(默认 0),optio
22、n(1)=0十进制编20.%码,option(2)设定求解精度(默认 1e-4)21.%22.%-23.24.T1=clock;25.if nargin0)32.error(数据输入错误,请重新输入(LBUB):);33./UB):);34.end 35.s=sprintf(程序运行需要约%.4f 秒钟时间,请稍等.,(eranum*popsize/1000);36.disp(s);37.38.global m n NewPop children1 children2 VarNum 39.40.bounds=LB;UB;bits=;VarNum=size(bounds,1);41.precis
23、ion=options(2);%由求解精度确定二进制编码长度42.bits=ceil(log2(bounds(:,2)-bounds(:,1)./precision);%由设定精度划分区间43.Pop=InitPopGray(popsize,bits);%初始化种群44.m,n=size(Pop);名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 20 页 -45.NewPop=zeros(m,n);46.children1=zeros(1,n);47.children2=zeros(1,n);48.pm0=pMutation;49.BestPop=zeros(eranum,n);
24、%分配初始解空间BestPop,Trace 50.Trace=zeros(eranum,length(bits)+1);51.i=1;52.while i=eranum 53.for j=1:m 54.value(j)=feval(FUN(1,:),(b2f(Pop(j,:),bounds,bits);%计算适应度55.end 56.MaxValue,Index=max(value);57.BestPop(i,:)=Pop(Index,:);58.Trace(i,1)=MaxValue;59.Trace(i,(2:length(bits)+1)=b2f(BestPop(i,:),bounds,
25、bits);60.selectpop=NonlinearRankSelect(FUN,Pop,bounds,bits);%非线性排名选择61.CrossOverPop=CrossOver(selectpop,pCross,round(unidrnd(eranum-i)/eranum);62.%采用多点交叉和均匀交叉,且逐步增大均匀交叉的概率63.%round(unidrnd(eranum-i)/eranum)64.MutationPop=Mutation(CrossOverPop,pMutation,VarNum);%变异65.InversionPop=Inversion(MutationPo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年遗传算法解决TSP问题的matlab程序 2022 遗传 算法 解决 TSP 问题 matlab 程序
限制150内