应用GA和PSO算法求解10城市TSP问题(2)

2020-04-03 10:14

规划路径100规划路径90807060 km5040302010 1020304050km60708090 图4 PSO算法求解的10城市TSP问题的结果 最后的结果编码为(1 4 5 6 7 8 9 10 2 3),解为A-D-E-F-G-H-I-J-B-C,距离为269.0671。

从计算结果可以看出,算法迭代到200步时已经收敛到了局部的最优值。这个局部最优解也是全局最优解。从收敛的速度的平均意义上而言,PSO算法与GA算法比收敛的更快。

附录

% GA算法的代码 % GA算法程序.

data = load('pos10.txt'); a=[data(:,2) data(:,3)]; n=50; % 种群数目 C=1000; % 迭代次数 Pc=0.9; % 交叉概率 Pm=0.2; % 变异概率

% GA算法初始化. [N,NN]=size(D); farm=zeros(n,N); for i=1:n

farm(i,:)=randperm(N);

end

R=farm(1,:);

len=zeros(n,1); fitness=zeros(n,1); counter=0;

% GA算法迭代

while counter

len(i,1)=myLength(D,farm(i,:)); end

maxlen=max(len); minlen=min(len); fitness=len;

for i=1:length(len)

fitness(i,1)=(1-((len(i,1)-minlen)/(maxlen-minlen+0.0001))).^2;

end;

rr=find(len==minlen); R=farm(rr(1,1),:); FARM=farm; %计算适应度函数 nn=0; for i=1:n

if fitness(i,1)>=rand nn=nn+1;

FARM(nn,:)=farm(i,:); end end

FARM=FARM(1:nn,:); % FARM (nn*N) [aa,bb]=size(FARM);%(aa=nn)

% 交叉

FARM2=FARM; for i=1:2:aa

if Pc>rand&&i

if L<=10 %确定交叉宽度

W=9;

elseif ((L/10)-floor(L/10))>=rand&&L>10 W=ceil(L/10)+8; else

W=floor(L/10)+8; end

p=unidrnd(L-W+1);%随机选择交叉范围

for i=1:W

x=find(a==b(1,p+i-1)); y=find(b==a(1,p+i-1));

[a(1,p+i-1),b(1,p+i-1)]=exchange(a(1,p+i-1),b(1,p+i-1)); [a(1,x),b(1,y)]=exchange(a(1,x),b(1,y));

end

FARM(i,:)=A; FARM(i+1,:)=B; end end

% 变异

FARM2=FARM; for i=1:aa

if Pm>=rand FARM(i,:)=mutate(FARM(i,:)); end end

% 群体更新

FARM2=zeros(n-aa+1,N); if n-aa>=1 for i=1:n-aa

FARM2(i,:)=randperm(N); end end

FARM=[R;FARM;FARM2]; [aa,bb]=size(FARM);

if aa>n

FARM=FARM(1:n,:); end

farm=FARM; clear FARM

RR(counter+1)=myLength(D,R) % 统计迭代次数。

counter=counter+1 ; end

% 结果图形显示

figure hold on

plot([a(R(1),1),a(R(10),1)],[a(R(1),2),a(R(10),2)],'ms-','LineWidth',2,'MarkerEdgeColor','k','MarkerFaceColor','g'); scatter(a(:,1),a(:,2),'ms') grid on hold on

for i=2:length(R) x0=a(R(i-1),1); y0=a(R(i-1),2); x1=a(R(i),1); y1=a(R(i),2); xx=[x0,x1]; yy=[y0,y1];

plot(xx,yy,'LineWidth',4,'MarkerEdgeColor','k','MarkerFaceColor','g')

hold on end % 结果输出 R Rlength

% 其他函数

function a=mutate(a) L=length(a); rray=randperm(L);

[a(rray(1)),a(rray(2))]=exchange(a(rray(1)),a(rray(2))); function [x,y]=exchange(x,y) temp=x; x=y; y=temp;

function len=myLength(D,p) [N,NN]=size(D); len=D(p(1,N),p(1,1)); for i=1:(N-1)

len=len+D(p(1,i),p(1,i+1)); end

% PSO算法代码 %% PSO算法代码

data=load('pos10.txt')

cityCoor=[data(:,2) data(:,3)];

n=size(cityCoor,1);

cityDist=zeros(n,n); for i=1:n for j=1:n if i~=j

cityDist(i,j)=((cityCoor(i,1)-cityCoor(j,1))^2+... (cityCoor(i,2)-cityCoor(j,2))^2)^0.5; end

cityDist(j,i)=cityDist(i,j); end end

individual=zeros(indiNumber,n);

% 初始化

nMax=1000; % 迭代次数 indiNumber=50; % 粒子个数

%% 初始化个体和群体最优值

indiFit=fitness(individual,cityCoor,cityDist); [value,index]=min(indiFit);

tourPbest=individual; tourGbest=individual(index,:) ; recordPbest=inf*ones(1,indiNumber); recordGbest=indiFit(index); xnew1=individual;

%% 循环寻找最优路径

L_best=zeros(1,nMax); for N=1:nMax

% 更新最优值

indiFit=fitness(individual,cityCoor,cityDist); for i=1:indiNumber

if indiFit(i)

if indiFit(i)

[value,index]=min(recordPbest); recordGbest(N)=recordPbest(index);


应用GA和PSO算法求解10城市TSP问题(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:东北师大文学院百部经典(目录)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: