未注册
2008-05-24, 11:10
哪位高手能解释交叉和变异这两段程序的具体步骤的意思啊
%%%%%% crossover %%%%%%%
K=zeros(1);
j=1;
for n=1:1:M;
if rand<=Pc;
K(j)=n;
j=j+1;
else
end
end
NOC=2*floor((j-1)/2);
for i=1:1:(NOC/2);
r=rand;
POC=ceil(m*r);
AA=Q{K(i)}(POC,:);
Q{K(i)}(POC,:)=Q{K(i+(NOC/2))}(POC,:);
Q{K(i+(NOC/2))}(POC,:)=AA;
end
%%%%% mutation %%%%
K=zeros(1);
j=1;
for i=1:1:M;
r=rand;
if r<=Pm;
K(j)=i;
j=j+1;
else
end
end
NOM=j-1;
for i=1:1:NOM;
t1=ceil(T*rand);
t2=ceil(T*rand);
POM=ceil(m*rand);
Q{K(i)}(POM,t1)=Q{K(i)}(POM,t1)+derta;
Q{K(i)}(POM,t2)=Q{K(i)}(POM,t2)-derta;
end
%%%%%% crossover %%%%%%%
K=zeros(1);
j=1;
for n=1:1:M;
if rand<=Pc;
K(j)=n;
j=j+1;
else
end
end
NOC=2*floor((j-1)/2);
for i=1:1:(NOC/2);
r=rand;
POC=ceil(m*r);
AA=Q{K(i)}(POC,:);
Q{K(i)}(POC,:)=Q{K(i+(NOC/2))}(POC,:);
Q{K(i+(NOC/2))}(POC,:)=AA;
end
%%%%% mutation %%%%
K=zeros(1);
j=1;
for i=1:1:M;
r=rand;
if r<=Pm;
K(j)=i;
j=j+1;
else
end
end
NOM=j-1;
for i=1:1:NOM;
t1=ceil(T*rand);
t2=ceil(T*rand);
POM=ceil(m*rand);
Q{K(i)}(POM,t1)=Q{K(i)}(POM,t1)+derta;
Q{K(i)}(POM,t2)=Q{K(i)}(POM,t2)-derta;
end