博大广阔 发表于 2011-10-19 19:35

遗传算法的交叉算子——近亲抑制策略


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:17

本帖最后由 ChaChing 于 2011-10-23 16:26 编辑

回复 1 # 博大广阔 的帖子

原创 or 转贴 !? 个人专业有限, 看似像分享!? 是吗?
若是, 若能稍作简易说明下相关输入/输出/算法, 甚至举例, 或许更适合学习! 个人浅见
页: [1]
查看完整版本: 遗传算法的交叉算子——近亲抑制策略