• 大小: 2KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-10
  • 语言: Matlab
  • 标签: matlab  tsp  遗传算法  

资源简介

tsp旅行商问题,遗传算法,给出10个 30个城市的实例,成功运行

资源截图

代码片段和文件信息

function gaTSP

CityNum=30;    %输入城市数目,可更改
[dislistClist]=tsp(CityNum);
inn=100; %初始种群大小
gnmax=1000;  %最大代数
pc=0.8; %交叉概率
pm=0.8; %变异概率

%产生初始种群
for i=1:inn
    s(i:)=randperm(CityNum);
end
[fp]=objf(sdislist);

gn=1;
while gn   for j=1:2:inn
      seln=sel(sp);  %选择操作
      scro=cro(sselnpc);  %交叉操作
      scnew(j:)=scro(1:);
      scnew(j+1:)=scro(2:);
      smnew(j:)=mut(scnew(j:)pm);  %变异操作
      smnew(j+1:)=mut(scnew(j+1:)pm);
   end
   s=smnew;  %产生了新的种群
   [fp]=objf(sdislist);  %计算新种群的适应度
   %记录当前代最好和平均的适应度
   [fmaxnmax]=max(f);
   ymean(gn)=1000/mean(f);
   ymax(gn)=1000/fmax;
   %记录当前代的最佳个体
   x=s(nmax:);
   drawTSP(Clistxymax(gn)gn0);
   gn=gn+1;
   %pause;
end
gn=gn-1;

figure(2);
plot(ymax‘r‘); hold on;
plot(ymean‘b‘);grid;
title(‘搜索过程‘);
legend(‘最优解‘‘平均解‘);
end

%------------------------------------------------
%计算适应度函数
function [fp]=objf(sdislist);

inn=size(s1);  %读取种群大小
for i=1:inn
   f(i)=CalDist(dislists(i:));  %计算函数值,即适应度
end
f=1000./f‘;
%计算选择概率
fsum=0;
for i=1:inn
   fsum=fsum+f(i)^15;
end
for i=1:inn
   ps(i)=f(i)^15/fsum;
end
%计算累积概率
p(1)=ps(1);
for i=2:inn
   p(i)=p(i-1)+ps(i);
end
p=p‘;
end

%--------------------------------------------------
function pcc=pro(pc);

test(1:100)=0;
l=round(100*pc);
test(1:l)=1;
n=round(rand*99)+1;
pcc=test(n);   
end

%--------------------------------------------------
%“选择”操作
function seln=sel(sp);

inn=size(p1);
%从种群中选择两个个体
for i=1:2
   r=rand;  %产生一个随机数
   prand=p-r;
   j=1;
   while prand(j)<0
       j=j+1;
   end
   seln(i)=j; %选中个体的序号
end
end

%------------------------------------------------
%“交叉”操作
function scro=cro(sselnpc);

bn=size(s2);
pcc=pro(pc);  %根据交叉概率决定是否进行交叉操作,1则是,0则否
scro(1:)=s(seln(1):);
scro(2:)=s(seln(2):);
if pcc==1
   c1=round(rand*(bn-2))+1;  %在[1bn-1]范围内随机产生一个交叉位
   c2=round(rand*(bn-2))+1;
   chb1=min(c1c2);
   chb2=max(c1c2);
   middle=scro(1chb1+1:chb2);
   scro(1chb1+1:chb2)=scro(2chb1+1:chb2);
   scro(2chb1+1:chb2)=middle;
   for i=1:chb1
       while find(scro(1chb1+1:chb2)==scro(1i))
           zhi=find(scro(1chb1+1:chb2)==scro(1i));
           y=scro(2chb1+zhi);
           scro(1i)=y;
       end
       while find(scro(2chb1+1:chb2)==scro(2i))
           zhi=find(scro(2chb1+1:chb2)==scro(2i));
           y=scro(1chb1+zhi);
           scro(2i)=y;
       end
   end
   for i=chb2+1:bn
       while find(scro(11:chb2)==scro(1i))
           zhi=find(scro(11:chb2)==scro(1i));
           y=scro(2zhi);
           scro(1i)=y;
       end
       while find(scro(21:chb2)==scro(2i))
           zhi=find(scro(21:chb2)==scro(2i));
           y=scro(1zhi);
           scro(2i)=y;
       end
   end
end
end

%--------------------------------------------------
%“变异”操作
function snnew=mut(snewpm);

bn=size(snew2);
snnew=snew;

pmm=pro(pm);  %根据变异概率决定是否进行变

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       5137  2018-01-17 16:45  gaTSP.m

----------- ---------  ---------- -----  ----

                 5137                    1


评论

共有 条评论