2

我在遗传算法中使用了混合阿尔法交叉和非均匀变异。染色体的形式为:[parent1 parent2 parent3 parent4 parent5 parent6 parent7]。每个染色体允许的值应该在[0,1]范围内,并且它们的总和应该等于1。我有代码交叉和突变来做这个约束。但它不起作用。结果中的染色体不是在 [0,1] 中并且总和不等于 1。我的交叉代码:

 if (rnd < pc)
  for i = 1:n
 u = rand;
 alpha = 0.5;
 gamma = (1+(2*alpha)* u) - alpha ;
 child1(i) = (((1 - gamma) * best1(i)) + (gamma * best2(i)));
end           
    end
 child1(1:n) = bsxfun(@rdivide,child1(1:n).',sum(child1(1:n).')).';

和我的突变代码:

    rnd = randi([0 100]) / 100;
    if (rnd < pm)
        mutationPoints = randperm(n-1,3);
        m1 = mutationPoints(1);
        m2 = mutationPoints(2);
        m3 = mutationPoints(3);
        mu = 0;
        sigma = 0.35;
        rnd1 = normrnd(mu,sigma);
        rnd2 = normrnd(mu,sigma);
        rnd3 = normrnd(mu,sigma);
        child1(m1) = child1(m1) + rnd1;
        child1(m2) = child1(m2) + rnd2;
        child1(m3) = child1(m3) + rnd3;
        child1(1:n) bsxfun(@rdivide,child1(1:n).',sum(child1(1:n).')).';
        end

我该如何解决?感谢您抽出宝贵时间。

4

0 回答 0