📄 pmxindexxover.m
字号:
function [c1,c2] = pmxIndexXover(p1,p2,bounds,Ops)
%there is an PMX xover
pm=Ops(2); %the probility of xover
rN=rand<pm;
if rN
nVar=size(p1,2)-1; %the element number of solution
a = round(rand*(nVar-1)+1);
b = round(rand*(nVar-1)+1);
if a>b
tmp=a;
a=b;
b=tmp;
end
if a>1
t11=p1(1:a-1);
t21=p2(1:a-1);
else
t11=[];
t21=[];
end
t12=p1(a:b);
t22=p2(a:b);
if b<nVar
t13=p1(b+1:nVar);
t23=p2(b+1:nVar);
else
t13=[];
t23=[];
end
%for c1
rep=intersect(t11,t22);
while rep~=[]
for x=1:size(rep,1)
pos1=find(t11==rep(x));
pos2=find(t22==rep(x));
t11(pos1)=t12(pos2);
end
rep=intersect(t11,t22);
end
rep=intersect(t13,t22);
while rep~=[]
for x=1:size(rep,1)
pos1=find(t13==rep(x));
pos2=find(t22==rep(x));
t13(pos1)=t12(pos2);
end
rep=intersect(t13,t22);
end
%for c2
rep=intersect(t21,t12);
while rep~=[]
for x=1:size(rep,1)
pos1=find(t21==rep(x));
pos2=find(t12==rep(x));
t21(pos1)=t22(pos2);
end
rep=intersect(t21,t12);
end
rep=intersect(t23,t12);
while rep~=[]
for x=1:size(rep,1)
pos1=find(t23==rep(x));
pos2=find(t12==rep(x));
t23(pos1)=t22(pos2);
end
rep=intersect(t23,t12);
end
c1=[t11 t22 t13];
c2=[t21 t12 t23];
else
c1=p1;
c2=p2;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -