MatLab の fmincon 関数と SQP アルゴリズムを使用して、非線形制約の最適化問題を解決しようとしています。文献調査中にわかったように、このソルバーは私の問題にうまく適用されました。
私は自分の問題の解決策を知っていますが、fmincon はそれを確実に見つけるのに苦労しています。境界内でランダムに生成された開始値を使用して最適化を 100 回実行すると、約 40% の良好な結果が得られました。「良い」とは、結果が私が受け入れる最適に近いことを意味しますが、これらの「良い」結果は異なる ExitFlags に対応しています。最も一般的なのは終了フラグ -2 と 2 です。
ExitFlag = 2
Local minimum possible. Constraints satisfied.
fmincon stopped because the size of the current step is less than the selected value of the step size tolerance and constraints are satisfied to within the selected value of the constraint tolerance.
ExitFlag = -2
No feasible solution found.
fmincon stopped because the size of the current step is less than the selected value of the step size tolerance but constraints are not satisfied to within the selected value of the constraint tolerance.
「良くない」結果は、最適解から約 2% 外れており、ExitFlags 2 および -2 にも対応しています。
公差をいじってみましたが、成功しませんでした。制約許容度を緩和すると、ExitFlag -2 の数が減少し、いくつかの ExitFlag 1 のケースが発生しますが、その結果、最適解からの偏差が大きくなります。
大きな問題は、その許容範囲に違反するステップ サイズのようです。ステップ サイズ/ステップ サイズのノルムが小さすぎる (X の相対的な変化が TolX 未満である) ため、2 回または 3 回の反復後にソルバーが終了することがよくあります。これらの問題に対処する方法はありますか? 適切な結果を確実に得るために、ソルバーを調整したいと思います。
参考までに、使用されるオプションは次のとおりです。
options=optimset('fmincon');
options=optimset(options,...
'Algorithm','sqp',...
'ScaleProblem','obj-and-constr',...
'TypicalX',[3, 50, 3, 40, 50, 50],...
'TolX',1e-12,...%12
'TolFun',1e-8,...%6
'TolCon',1e-3,...%6
'MaxFunEvals',1000,... %1000
'DiffMinChange',1e-10);