我想在Matlab與fmincon (interior-point)
施加兩個非線性約束:違規非線性約束fmincon內點Matlab的
sqrt(w*S*w') <= sigmaTgt/sqrt(260)
sqrt(w*S*w') >= sigmaTgt/sqrt(260)-0.02/sqrt(260)
我試過如下:
function [c,ceq] = in_nonlconstr(w, S)
c(1) = sqrt(w*S*w') - tgtVolAnn/sqrt(260);
c(2) = - sqrt(w*S*w') + (tgtVolAnn/sqrt(260) - 0.02/sqrt(260));
ceq = [];
end
但優化後,我不斷收到即sqrt(w*S*w')
滿足c(1)
但不是c(2)
,儘管exitflag
爲1且求解器已經收斂。
我的寫作是否正確?或者我的求職者有沒有錯?從output.message
消息:
局部最小值發現滿足約束。
優化完成,因爲目標函數是 非遞減的可行方向,到 最優公差的默認值之內,滿足約束的約束寬容的 默認值內。
停止標準的細節:
優化完成:相對第一階最優測量, 9.821943e-07,小於options.OptimalityTolerance = 1.000000e-06,相對最大約束違反,0.000000e +00,比選項小 .ConstraintTolerance = 1.000000e-06。
優化度量選項 相對第一階最優= 9.82e-07 OptimalityTolerance = 1E-06(默認值)的相對最大值(約束違反)= 0.00E + 00 ConstraintTolerance = 1E-06(默認值)
是的,因爲我把* -1從> =轉換爲<=。你會如何做到這一點? – JohnAndrews
你可以爲我運行這個嗎? options = optimset('fmincon')並在選項中發佈變量?那麼即使我沒有優化工具箱,我也可以很快給你一個解決方案。 – Matt