我在 Matlab 上运行遗传算法优化脚本,但最后会产生以下消息:“优化终止:惩罚适应度值的平均变化小于 options.TolFun 但不满足约束条件。”
为什么会这样说?我用一个什么都不做但返回一个常数的函数替换了我的适应度函数,没有任何改变。可能是我的约束定义不正确,尽管我找不到错误。这是代码的相关部分:
nGenerators = 9;
monthlyHours = 24*daysInJanuary;
(some irrelevant code here)
steamCapacities = [31.46*ones(1,2) 5.5*ones(1,3) 4*ones(1,4)];
nVars = xSize;
IntCon = 1:nVars;
LB = zeros(1, nVars);
UB = ones(1, nVars);
b = -1*steamLoad; % Ax <= b
A = zeros(monthlyHours, xSize);
for p = 1:monthlyHours
A(p, 9*p-8:9*p) = -1*steamCapacities;
% disp(p);
end
(some more code here)
anonFitness = @(x)mosb_test(x, fitnessData);
gaOptions = gaoptimset('Vectorized', 'off', 'UseParallel', 'always', ...
'Display', 'diagnose', 'PlotFcn', @gaplotbestf, 'Generations', 300, ...
'TolFun', 1e-15, 'StallGenLimit', 200);
[x, fval, exitFlag] = ga(anonFitness, nVars, A, b,[],[], LB, UB, [], IntCon, gaOptions);
在这里,x 表示每月每个小时一组 9 个发电机的开/关状态。它们的蒸汽生产能力与可变蒸汽能力一样,并且每小时必须满足恒定的蒸汽负荷。这由不等式约束表示。
任何帮助表示赞赏。