【问题标题】:Matlab+GA: Simulated Binary Crossover (SBX) cannot generate desired offspring distributionMatlab+GA:模拟二进制交叉(SBX)无法生成所需的后代分布
【发布时间】:2017-03-24 06:21:52
【问题描述】:

我在一些参考资料中发现 SBX 的后代分布对于 2d 向量必须具有以下形状: enter image description here

但是我的实现与那个形状不同:

    par1 = [.2; .2];
par2 = [.8; .8];
eta = 15;
child1 = zeros(2,1);
child2 = child1;
hold on
for k = 1:100
    for i = 1:2
      u = rand;
      if (u<0.5)
          beta=(2*u)^(1/(eta+1));
      elseif (u>0.5)
          beta=(0.5/(1-u))^(1/(eta+1));
      elseif (u == .5)
          beta = 1;
      end
      c1(i) = 0.5*(par1(i)+par2(i)) - 0.5*beta*abs(par1(i)-par2(i));
      c2(i) = 0.5*(par1(i)+par2(i)) + 0.5*beta*abs(par1(i)-par2(i));

    end
    plot([c1(1), c2(1)], [c1(2), c2(2)], 'b.')

end

这是我的输出:enter image description here 我认为我的实现是正确的,但我不知道为什么我无法达到所需的数字。

【问题讨论】:

    标签: matlab genetic-algorithm evolutionary-algorithm


    【解决方案1】:

    原因是你需要实现反射,检查来自作者 Deb 的 nsga-ii 代码。 还有两个额外的动作:以概率(0.5)交换变量和以一定概率直接继承父变量。 问候 乔尔查孔卡斯蒂略

    【讨论】:

    • 感谢您的回答 +1。您能否提供此类实施的链接?
    • 它是取自weblink code
    • 我不是对您的答案投反对票的人。由于我的声望少于 15,所以我的投票没有显示!
    • 我想知道原因..,无论如何我希望有用,(我第一次和最后一次参与这个页面......)
    猜你喜欢
    • 2012-02-13
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    相关资源
    最近更新 更多