我在遗传算法中使用了混合阿尔法交叉和非均匀变异。染色体的形式为:[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
我该如何解决?感谢您抽出宝贵时间。