遗传算法的交叉算子——近亲抑制策略
function newchrom=cross0(Chrom,FieldD)
whole=fix(length(FieldD)/2);number=1; %set mother andthe other is father which not select
mather=;
if rem(length(FieldD),2)==0
father=;
else
father=;
end
% 选择母亲和父亲。。具体的换成二进制,再随机选取更好
for Time=1:1:whole
social(1,Time)=abs(Chrom(mather(Time))-Chrom(father(Time)));
end
mean0=sum(social)/length(social);%计算整个社会的近亲平均水平 setting as 0.75,最低变异为0.6 高于0.95的设置为0.95
%越相似的个体,交叉的概率越低
num=10*(mean0-min(social));
p=social/num-ones(1,length(social))*min(social)/num+0.6;
p(p>0.95)=0.95;
for Time=1:1:length(social)
if rand()<=p(Time)
Chrom(mather(Time))=0.4* Chrom(mather(Time))+0.6*Chrom(father(Time));
Chrom(father(Time))=0.6* Chrom(mather(Time))+0.4*Chrom(father(Time));
end
end
newchrom=Chrom;
end 本帖最后由 ChaChing 于 2011-10-23 16:26 编辑
回复 1 # 博大广阔 的帖子
原创 or 转贴 !? 个人专业有限, 看似像分享!? 是吗?
若是, 若能稍作简易说明下相关输入/输出/算法, 甚至举例, 或许更适合学习! 个人浅见
页:
[1]