遗传算法中的非均匀变异和混合α交叉

时间:2017-09-12 07:34:14

标签: algorithm matlab genetic-algorithm mutation crossover

我在遗传算法中使用混合α交叉和非均匀突变。染色体具有以下形式:[parent1 parent2 parent3 parent4 parent5 parent5 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

我该怎么办?感谢您抽出宝贵时间。

0 个答案:

没有答案