代码拉取完成,页面将自动刷新
function ret=Cross(pcross,chrom,sizepop,length)
% 交叉操作
% pcorss input : 交叉概率
% chrom input : 抗体群
% sizepop input : 种群规模
% length input : 抗体长度
% ret output : 交叉得到的抗体群
% 每一轮for循环中,可能会进行一次交叉操作,随机选择染色体是和交叉位置,是否进行交叉操作则由交叉概率(continue)控制
for i=1:sizepop
% 随机选择两个染色体进行交叉
pick=rand;
while prod(pick)==0
pick=rand(1);
end
if pick>pcross
continue;
end
% 找出交叉个体
index(1)=unidrnd(sizepop);
index(2)=unidrnd(sizepop);
while index(2)==index(1)
index(2)=unidrnd(sizepop);
end
% 选择交叉位置
pos=ceil(length*rand);
while pos==1
pos=ceil(length*rand);
end
% 个体交叉
chrom1=chrom(index(1),:);
chrom2=chrom(index(2),:);
k=chrom1(pos:length);
chrom1(pos:length)=chrom2(pos:length);
chrom2(pos:length)=k;
% 满足约束条件赋予新种群
flag1=test(chrom(index(1),:));
flag2=test(chrom(index(2),:));
if flag1*flag2==1
chrom(index(1),:)=chrom1;
chrom(index(2),:)=chrom2;
end
end
ret=chrom;
end
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。