Ln(i,1)=fitness1(D,family(i,:)); %计算每条染色体的适应度值 End
MinLn(kg)=min(Ln); minLn=MinLn(kg); rr=find(Ln==minLn);
Gt=family(rr(1,1),:); %更新最短路径 Family=family; kg; minLn;
%--------------------------------选择复制------------------------------- K=30; aa=0;bb=0; [aa,bb]=size(Family); Family2=Family; Ln2=Ln; [Ln]=sort(Ln); for i=1:aa
tt=find(Ln2==Ln(i,1)); Family(i,:)=Family(tt(1,1),:); end for i=1:K j=aa+1-i;
Family(j,:)=Family(i,:); end
%---------------------------------交叉--------------------------------- [aa,bb]=size(Family); Family2=Family; for i=1:2:aa
if Pc>rand&&i
%-------------------------------变异----------------------------------- Family2=Family; for i=1:aa
if Pm>=rand %变异条件 Family(i,:)=mutate(Family(i,:)); End end
Family=[Gt;Family]; %保留上一代最短路径 [aa,bb]=size(Family); if aa>n
Page 6 of 8
Family=Family(1:n,:); end
family=Family; clear Family end toc Gt
RL=fitness1(D,Gt) plot(time,MinLn);
xlabel('times');ylabel('MinLn');
(1)适应度函数
function len=fitness1(D,p) N=8; len=0; for i=1:(N-1)
len=len+D(p(i),p(i+1)); end
len=D(N,p(1))+len+D(p(N),N); b=0; total=[0 0]; volume=8;
demand=[1 2 1 2 1 4 2 2 0]; b=find(p==8); if b==1 total(1)=0; for i=2:N
total(2)=demand(p(i))+total(2); end elseif b==9 total(2)=0; for i=1:(N-1)
total(1)=demand(p(i))+total(1); end else
for i=1:(b-1)
total(1)=demand(p(i))+total(1); end for i=(b+1):N
total(2)=demand(p(i))+total(2); end end
if total(2)>volume|total(1)>volume len=len+100; end
(2)交叉操作函数
function [a1,b1]=intercross(a1,b1)
Page 7 of 8
L=length(a1); w=[0 0];
w(1)=unidrnd(L-2); w(2)=L-w(1);
if w(2) w(1)=w(1); w(2)=w(2); end for i=w(1):(w(2)-1) xx=find(a1==b1(i+1)); yy=find(b1==a1(i+1)); [a1(i+1),b1(i+1)]=exchange(a1(i+1),b1(i+1)); [a1(xx),b1(yy)]=exchange(a1(xx),b1(yy)); end (3)对调操作函数 function [x1,y1]=exchange(x1,y1) temp=x1; x1=y1; y1=temp; (4)变异函数 function c=mutate(c) L1=length(c); rray=randperm(L1); [c(rray(1)),c(rray(2))]=exchange(c(rray(1)),c(rray(2))); Page 8 of 8