📄 ymcrossover.m
字号:
function newP2=ymcrossover(newP1,m,n,Xlu)
Pc=0.6; %交叉概率
%交叉方式1:种群中相邻的个体进行交叉
PrePop=[];
P11=[];
P12=[];
P21=[];
P22=[];
if fix(m/2)==m/2
PrePop=newP1;
else
j=unidrnd(m);
if j==m
for i=1:m-1
PrePop(i,:)=newP1(i,:);
end
else
for i=1:j
PrePop(i,:)=newP1(i,:);
end
for i=j+1:m-1
PrePop(i,:)=newP1(i,:);
end
end
end
for i=1:m/2
a=round(1+(m-1)*rand);
b=round(1+(m-1)*rand);
P11=PrePop(a,:);
P12=P11;
P21=PrePop(b,:);
P22=P21;
[k1,k2]=min(P11);
[k3,k4]=min(P21);
k=min(k2-1,k4-1);
c=round(4+(k-6)*rand);
if c<=0
break
end
Cr=rand;
if Cr<=Pc
P12(2:c)=P11(2:c);
P12(c+1:end)=P21(c+1:end);
P22(2:c)=P21(2:c);
P22(c+1:end)=P11(c+1:end);
end
PrePop(a,:)=P12;
PrePop(b,:)=P22;
end
newP2=PrePop;
%检测交叉产生的个体是否超出变量范围
for i=1:m
for j=1:18*n+20
xl=Xlu(j,1);
xu=Xlu(j,2);
if newP2(i,j+1)<xl
newP2(i,j+1)=xl;
end
if newP2(i,j+1)>xu
newP2(i,j+1)=xu;
end
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -