📄 binarycross.m
字号:
% binarycross.m
Atemp=A;
Btemp=B;
t_1=zeros(1,n); %t_1,t_2用来计算基因段A,B中各工件编号的数目
t_2=zeros(1,n);
for s_1=1:(x2-x1+1)
for i=1:n
if A(s_1)==i
t_1(i)=t_1(i)+1;
end
if B(s_1)==i
t_2(i)=t_2(i)+1;
end
end
end
if (t_1==t_2) %若A,B中各工件编号数目相等,则直接进行交叉
A=Btemp;
B=Atemp;
else %若A,B中各工件编号数目不等,则需要在交叉之前对A,B进行调整
f_1=find(t_1>t_2);
f_2=find(t_1<t_2);
f_3=find(t_1==t_2);
f_4=find(t_1>t_2&t_2==0); %在调整中A基因段中工件编号f_4(i)将全部被替换
f_5=find(t_2>t_1&t_1==0); %在调整中B基因段中工件编号f_5(i)将全部被替换
f_6=find(t_1>t_2&t_2>0); %在调整中A基因段中工件编号f_6(i)将有部份被替换
f_7=find(t_2>t_1&t_1>0); %在调整中B基因段中工件编号f_7(i)将有部份被替换
deta_1=zeros(1,length(f_1));
deta_2=zeros(1,length(f_2));
for i=1:length(f_1)
deta_1(i)=t_1(f_1(i))-t_2(f_1(i));
end
for i=1:length(f_2)
deta_2(i)=t_2(f_2(i))-t_1(f_2(i));
end
deta_1sum=sum(deta_1);
deta_1sumcum=cumsum(deta_1);
deta_2sum=sum(deta_2);
deta_2sumcum=cumsum(deta_2);
Adetaset=zeros(1,deta_2sum); % Adetaset为所有需要增补的工件号所组成的数组
if length(f_2)==1
for t=1:deta_2(1)
Adetaset(t)=f_2(1);
end
else
for t=1:deta_2(1)
Adetaset(t)=f_2(1);
end
for s_1=2:length(f_2)
for t=1:deta_2(s_1)
Adetaset(t+deta_2sumcum(s_1-1))=f_2(s_1);
end
end
end
Bdetaset=zeros(1,deta_1sum); % Bdetaset为所有需要增补的工件号所组成的数组
if length(f_1)==1
for t=1:deta_1(1)
Bdetaset(t)=f_1(1);
end
else
for t=1:deta_1(1)
Bdetaset(t)=f_1(1);
end
for s_1=2:length(f_1)
for t=1:deta_1(s_1)
Bdetaset(t+deta_1sumcum(s_1-1))=f_1(s_1);
end
end
end
%以下为对Atemp进行调整
if length(f_4)~=0&length(f_6)~=0
deta_6=zeros(1,length(f_6));
for i=1:length(f_6)
deta_6(i)=t_1(f_6(i))-t_2(f_6(i));
end
changeA1; % 调用脚本文件changeA1--对基因段Atemp进行调整
elseif length(f_4)==0&length(f_6)~=0
deta_6=zeros(1,length(f_6));
for i=1:length(f_6)
deta_6(i)=t_1(f_6(i))-t_2(f_6(i));
end
changeA2; % 调用脚本文件changeA2--对基因段Atemp进行调整
else
changeA3; % 调用脚本文件changeA3--对基因段Atemp进行调整
end
%以下为对Btemp进行调整
if length(f_5)~=0&length(f_7)~=0
deta_7=zeros(1,length(f_7));
for i=1:length(f_7)
deta_7(i)=t_2(f_7(i))-t_1(f_7(i));
end
changeB1; %调用脚本文件changeB1--对基因段Btemp进行调整
elseif length(f_5)==0&length(f_7)~=0
deta_7=zeros(1,length(f_7));
for i=1:length(f_7)
deta_7(i)=t_2(f_7(i))-t_1(f_7(i));
end
changeB2; %调用脚本文件changeB2--对基因段Btemp进行调整
else
changeB3; %调用脚本文件changeB3--对基因段Btemp进行调整
end
A=Btemp; %调整完之后进行交叉
B=Atemp;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -