我的遺傳算法優化腳本在Matlab上運行,但最終會產生以下消息:「優化終止:懲罰適應值的平均變化小於選項.TolFun但約束不滿足。MATLAB優化錯誤
爲什麼會這麼說?我用一個什麼都不做,但是返回一個常數的函數取代了我的健身函數,沒有任何改變。可能是我的約束沒有被正確定義,雖然我找不到這個錯誤。下面是代碼的相關部分:
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臺發電機。他們的蒸汽生產能力與可變蒸汽容量相同,每小時必須滿足恆定的蒸汽負荷。這由不平等約束來表示。
任何幫助表示讚賞。