?? 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 + -