我在遗传算法中使用混合α交叉和非均匀突变。染色体具有以下形式:[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
我该怎么办?感谢您抽出宝贵时间。