基于遗传算法TSP问题解决73417.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于遗传算法的TSP问题解决 —余小欢 概述:TSP问题是一个经典的运筹学的组合优化问题,针对此问题,研究人员提出了个中各样的算法,主要有贪婪算法,遗传算法,混沌搜索算法等。在本文中分别用贪婪算法和遗传算法去解决30个城市的最短路径问题,并把两者得到了最优解进行比较,发现用遗传算法解决TSP问题非常具有优越性,同时在文章的最后提出了对此遗传算法进行改进的方向。 贪婪算法 x=[18 87 74 71 25 58 4 13 18 24 71 64 68 83 58 54 51 37 41 2 7 22 25 62 87 91 83 41 45 44]; y=[54 76 78 71 38 35 50 40 40 40 42 44 60 58 69 69 62 67 84 94 99 64 60 62 32 7 38 46 26 21 35]; a=zeros(30,30); for i=1:30 for j=1:30 a(i,j)=sqrt((x(i)-x(j))^2+(y(i)-y(j))^2); %求取距离矩阵的值 end a(i,i)=1000; %主对角线上的元素置为1000作为惩罚 end b=0; c=zeros(30); for j=1:30 [m,n]=min(a(:,j)); b=b+m; %得到的b值即为贪婪最佳路径的总距离 a(n,:)=1000; %已经选择的最小值对应的行的所有值置为1000作为惩罚 c(j)=n; end x1=zeros(30); y1=zeros(30); for t=1:30 x1(t)=x(c(t)); y1(t)=y(c(t)); end plot(x1,y1,-or); xlabel(X axis), ylabel(Y axis), title(ì°à·?·??); axis([0,1,0,1]); axis([0,100,0,100]); axis on 用贪婪算法得出的最佳路径走遍30个城市所走的路程为449.3845km 其具体的路径图如下: 遗传算法 1主函数部分 clc; clear all; close all; global x y cityfile = fopen( city30.txt, rt ); %取30个城市的样本 cities = fscanf( cityfile, %f %f,[ 2,inf] ); fclose(cityfile); t=30+1; %城市的数目是30个 s=1500; %样本的数目是1400个 G=300; %运算的代数 c=25; %选择算子中每次替代的样本的数量 x=cities(1,:); y=cities(2,:); pc=0.10; %交叉的概率 pm=0.8; %变异的概率 pop=zeros(s,t); %得初始的pop矩阵,矩阵的最后一列表示所在行的样本的路径距离 for i=1:s pop(i,1:t-1)=randperm(t-1); %随机产生1—(t-1)的t-1个数 end for k=1:1:G %GA开始 if mod(k,50)==1 k end pop=distance(pop); %调用距离函数求距离 pop=select(pop,c); %调用选择函数 p1=rand; if p1=pc pop=cross(pop); %调用交叉函数 end p2=rand; if p2=pm pop=mutate(pop); %调用变异函数 end end %GA结束 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% bestL=min(pop(:,t)) J=pop(:,t); fi=1./J; [Oderfi,Indexfi]=sort(fi); %对于fi进行排序 BestS=pop(Indexfi(s),:); %得到最短路 I=BestS; for i=1:1:t-1 x1(i)=x(I(i)); y1(i)=y(I(i)); end x1(t)=x(I(1)); y1(t)=y(I(1)); cities_new=[x1;y1]; disp(Best Route is:);dis

文档评论(0)

hlfy68 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档