📄 crossoverop.asv
字号:
function PO2=crossoverop(PO1,POPSIZE,l,m,PC,t)
global T
PO2=PO1;
for i=1:POPSIZE
index(i)=i;
end
%Create random parents chromosome
for i=1:POPSIZE
point=round(rand*(POPSIZE-i));
temp=index(i);
index(i)=index(point+i);
index(point+i)=temp;
end
%calculate HAMMING
a1=T/3;
for i=1:POPSIZE-1
for j=(i+1):POPSIZE
h(i,j)=sum(abs(PO1(i,1:l)-PO1(j,1:l)));
end
end
HA=sum(sum(h(:,:)))/(POPSIZE*(POPSIZE-1)/2);
%calculate p;
p1=0.8*exp(-t.^2/(2*(a1.^2)));
p2=HA*p1;
%one-point crossover operation
for i=1:POPSIZE
for j=1:POPSIZE
H(i,j)=sum(abs(PO1(index(i),1:l)-PO1(index(j),1:l)));
end
end
for i=1:2:(POPSIZE-1);
p=rand;
if p<PC
if H(i,i+1)>p2
PO1=PO1(index(i),:);
PO2=PO1(index(i+1),:);
else
j=max(H(i,:));
c=findstr(H(i,:),j);
PO1=PO1(index(i),:);
PO2=PO1(index(c(1)),:);
PO1(index(c(1)),:)=PO1(index(i+1),:);
PO1(index(i+1),:)=PO2;
H(:,c(1))=H(:,i+1);
H(c(1),:)=H(i+1,:);
H(c(1),i)=0;
end
point=round(rand*(l-2))+1;
H1=sum(abs(PO1(point:l)-PO2(point:l)));
if H1==0
point1=point;
for k=1:point1-1
if PO1(k)-PO2(k)~=0
point=k+1;
end
end
end
ch=PO1(index(i),point:l);
PO1(index(i),point:l)=PO1(index(i+1),point:l);
PO1(index(i+1),point:l)=ch;
end
if sum(PO2(i,:))~=m;
i=i-2;
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -