📄 crossover2.m
字号:
function crosspop=crossover2(pcross,selectpop)
%%%%%%%%%% 采用交叉策略B,先添加交叉数字再删除重复数字 %%%%%%%%%
%selectpop=[1,2,3,4,1,2; %测试用例
% 2,3,1,4,1,2;
% 3,4,1,1,2,2;
% 1,2,1,4,3,2];
%pcross=0.9;
[mpop,npop]=size(selectpop);
for i=1:2:(mpop-1)
temp=rand;
if pcross>temp
j1 = rand_function(1,npop); %随机选取数串的交叉区域
j2 = rand_function(1,npop);
while j1==j2
j1 = rand_function(1,npop);
j2 = rand_function(1,npop);
end
if j1>j2
j_int=j2;
j2=j1;
j1=j_int;
end
p1=selectpop(i,:);
p2=selectpop(i+1,:);
p2_cho=p2(j1:j2);
for k=1:(j2-j1+1) %将串1中和交叉区域相同的去掉
ch=p2_cho(k);
for kk=1:npop
if p1(kk)==ch
p1(kk)=0;
break;
end
end
end
p1=[p1(1:(j1-1)),p2_cho,p1(j1:npop)]; %将串2的交叉区域加到串1的对应位置j1-j2
n=1; %将串1重新整理
for j=1:length(p1)
if p1(j)>0
crosspop(i,n)=p1(j);
n=n+1;
end
end
crosspop(i+1,:)=selectpop(i+1,:); %串2不变
else %不满足交叉条件时不进行交叉
crosspop(i,:)=selectpop(i,:);
crosspop(i+1,:)=selectpop(i+1,:);
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -