2013-06-19 3 views
1

Matlab의 My Genetic Algorithm 최적화 스크립트가 실행되지만 끝에 다음 메시지가 표시됩니다. "최적화가 종료되었습니다 : 처벌 적합성 값의 평균 변화가 options.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 개 발전기 세트의 온/오프 상태를 나타냅니다. 스팀 생산 능력은 가변 스팀 용량과 동일하며 매 시간마다 일정한 스팀 부하가 발생합니다. 이는 불평등 제약 조건으로 표현됩니다.

도움을 주시면 감사하겠습니다.

답변

0

흥미로운 문제! 너무 나쁘면 결정 론적으로 해결할 수 없습니다. 어쨌든 :-(하여 TolFun이 존재로서 the mathworks 의해 정의된다. StallGenLimit 통해 최상의 적합도 함수 값의 가중 평균 상대 변화 세대 이하 TolFun 같으면

긍정적 스칼라 알고리즘 정지

StallGenLimit이 같은 설명이있다. 그것은 일정하게 당신에게 같은 오류를 줄 것이다 완벽한 의미가 있습니다. GA는 200 여기의 StallGenLimit의 솔루션으로 수렴 세대 수없는 나에게 나타납니다. 당신은을 시도해 볼 수 있습니다.과 같이 1e-12와 같이 더 제한적이거나 GA를위한 훨씬 간단한 모델을 개발할 수 있습니다. 하나는 솔루션을 찾을 수있는 것입니다. 그런 다음 실제 시스템과 일치 할 때까지이 모델의 복잡성을 구축하십시오. 아마, 그것은 어느 시점에서 실패 할 것이고, 여러분은 너무 많은 자유도, 너무 엄격한 제약 등으로 문제를 해결할 수없는 이유를 알 수있을 것입니다. HTH!