- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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)