Matlab+;GA:模拟二进制交叉(SBX)无法生成所需的后代分布

Matlab+;GA:模拟二进制交叉(SBX)无法生成所需的后代分布,matlab,genetic-algorithm,evolutionary-algorithm,Matlab,Genetic Algorithm,Evolutionary Algorithm,我在一些参考文献中发现,对于2d向量,SBX的子代分布必须具有以下形状: 但是,我的实现与该形状不同: 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));

我在一些参考文献中发现,对于2d向量,SBX的子代分布必须具有以下形状:

但是,我的实现与该形状不同:

    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
par1=[.2;.2];
par2=[.8;.8];
eta=15;
child1=零(2,1);
child2=child1;
等等
对于k=1:100
对于i=1:2
u=兰特;
如果(u0.5)
β=(0.5/(1-u))^(1/(eta+1));
elseif(u==0.5)
β=1;
终止
c1(i)=0.5*(par1(i)+par2(i))-0.5*β*abs(par1(i)-par2(i));
c2(i)=0.5*(par1(i)+par2(i))+0.5*β*abs(par1(i)-par2(i));
终止
图([c1(1),c2(1)],[c1(2),c2(2)],“b.”
终止
以下是我的输出:
我认为我的实现是正确的,但我不知道为什么我无法达到所需的数字。

原因是您需要实现反射,请检查autor Deb中的nsga ii代码。 有两种传统操作:以概率(0.5)交换变量和以一定概率直接继承父变量。 当做
Joel Chacón Castillo

谢谢你的回答+1。你能提供这样一个实现的链接吗?它是从我不是谁不给你答案的人。因为我的声誉不到15个,所以我的选票没有显示出来!我想知道原因,无论如何我希望有用,(我在本页的第一次和最后一次演讲…)