遗传算法返回的值比启动时的适应值更高。
这是来自我的选择吗?
问题似乎是三个变量的线性约束总和等于1.但是我如何强加它并仍然使ga工作?没有约束就是找到最低限度。
ConstraintFunction = @simple_constraint;
options = gaoptimset('MutationFcn',@mutationadaptfeasible);
options = gaoptimset(...
'PopulationSize', 150);
options = gaoptimset(options,'Generations',150,'StallGenLimit', 140);
X0 = [0.35 0.22 0.12 0 0.4 0.6]; % Start point (row vector)
options = gaoptimset(options,'InitialPopulation',X0);
options = gaoptimset(options,'PlotFcns',{@gaplotbestf, @gaplotstopping});
% rng(0, 'twister');
rng(1,'twister') % for reproducibility
[x,fval] = ga(ObjectiveFunction,nvars,[],[],[],[],LB,UB,ConstraintFunction,options)
function [c, ceq] = simple_constraint(x)
c = [];
ceq = [(x(4) + x(5) + x(6) -1)];
优化终止:适应值的平均变化小于options.TolFun 和约束违规小于options.TolCon。