📄 wh_zj.asv
字号:
% function y=wh_ZJ(Initial_Group,G_Sample_Sum,G_Sample_Sum_Dimension)
%G_Sample_Sum群体中个体总数
for i=1:G_Sample_Sum
ZJ_Sample(i)=i;%生成杂交采样数组
end
Count=G_Sample_Sum*2;%杂交的最大次数
for i=1:Count
JS_Biao=0;%是否提前结束杂交过程
while(1)%A------产生杂交的初始条件
ZJ_Sample_Rand1=round(G_Sample_Sum*rand(1));%ZJ_Sample_Rand1,ZJ_Sample_Rand2产生变异个体元素的位置
ZJ_Sample_Rand2=round(G_Sample_Sum*rand(1));
ZJ_Position=round(G_Sample_Sum_Dimension*rand(1));
if and(and((ZJ_Sample_Rand1~=0),(ZJ_Sample_Rand2~=0)),and((ZJ_Position~=0),(ZJ_Sample_Rand1~=ZJ_Sample_Rand2)))
break;
end
end%A---while
if and((ZJ_Sample(ZJ_Sample_Rand1)~=0),(ZJ_Sample(ZJ_Sample_Rand2)~=0))%开始杂交
BF_Initial_Group=Initial_Group;
BF_Initial_Group(ZJ_Sample(ZJ_Sample_Rand1),:)=Initial_Group(ZJ_Sample(ZJ_Sample_Rand1),:);
BF_Initial_Group(ZJ_Sample(ZJ_Sample_Rand2),:)=Initial_Group(ZJ_Sample(ZJ_Sample_Rand2),:);
for i=1:ZJ_Position
T=Initial_Group(ZJ_Sample(ZJ_Sample_Rand1),ZJ_Position);
Initial_Group(ZJ_Sample(ZJ_Sample_Rand1),ZJ_Position)=Initial_Group(ZJ_Sample(ZJ_Sample_Rand2),ZJ_Position);
Initial_Group(ZJ_Sample(ZJ_Sample_Rand2),ZJ_Position)=T;
end%i=1:ZJ_Position
% ZJ_Sample(ZJ_Sample_Rand1)=0;ZJ_Sample(ZJ_Sample_Rand2)=0;
else
break;
JS_Biao=1;
end%if and((ZJ_Sample(ZJ_Sample_Rand1)~=0),(ZJ_Sample(ZJ_Sample_Rand2)~=0))%开始杂交
for i=1:G_Sample_Sum%完成变异的个体中的元素升序排列
for j=1:G_Sample_Sum_Dimension
for k=1:G_Sample_Sum_Dimension
if (Initial_Group(i,j)<Initial_Group(i,k))
TT=Initial_Group(i,j);Initial_Group(i,j)=Initial_Group(i,k);Initial_Group(i,k)=TT;
end
end %k=1:G_Sample_Sum_Dimension
end%j=1:G_Sample_Sum_Dimension
end%i=1:G_Sample_Sum
TTT=0;%0代表杂交后的个体中的元素没有重复的,1相反
for k=1:G_Sample_Sum_Dimension%保证变异后的个体(行向量)的元素间互异
for l=1:G_Sample_Sum_Dimension
if and((k~=l),Initial_Group(ZJ_Sample(ZJ_Sample_Rand1),k)==Initial_Group(ZJ_Sample(ZJ_Sample_Rand1),l))
TTT=1;
end
end%l
end%k
for k=1:G_Sample_Sum_Dimension%保证变异后的个体(行向量)的元素间互异
for l=1:G_Sample_Sum_Dimension
if and((k~=l),Initial_Group(ZJ_Sample(ZJ_Sample_Rand2),k)==Initial_Group(ZJ_Sample(ZJ_Sample_Rand2),l))
TTT=1;
end
end%l
end%k
if (TTT==0)
ZJ_Sample(ZJ_Sample_Rand1)=0;ZJ_Sample(ZJ_Sample_Rand2)=0;%已经杂交过的,清零,下次选择杂交样本时不会再选择他们两个
else%如果杂交后样本中的元素有相同的
Initial_Group(ZJ_Sample(ZJ_Sample_Rand1),:)=BF_Initial_Group(ZJ_Sample(ZJ_Sample_Rand1),:);
Initial_Group(ZJ_Sample(ZJ_Sample_Rand2),:)=BF_Initial_Group(ZJ_Sample(ZJ_Sample_Rand2),:);
end
if (JS_Biao==1)
break;
end
end%for i=1:Count
y=Initial_Group;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -