2

最適化関数「fmincon」を使用していますが、収束しない場合があります。これらのケースを特定し、必要なアクションを実行する必要がありますが、使用されているすべてのメソッドがエラーのキャッチに失敗しているため、引き続きエラーが発生します。

No feasible solution found.

fmincon stopped because the size of the current search direction is less than
twice the default value of the step size tolerance but constraints are not 
satisfied to within the selected value of the constraint tolerance.

最初に、関数の exitflag を選択してみました: 既知のエラー (-1、1、0...) を返す場合、エラーが発生するたびに、返された exitflag には正しい値がありました。

[x,fval,exitflag] = fmincon(@(x) costFunction(x,INPUTS),x0,A,b,[],[],lb,ub,[],options);
if exitflag == 0
    do something;
end

次に、「try/catch」構造を試しましたが、この場合もコードは実行され続け、エラーは発生しませんでした...

try %start try/catch
    [x,fval,exitflag] = fmincon(@(x) costFunction(x,INPUTS),x0,A,b,[],[],lb,ub,[],options);
catch err
   disp(err.identifier);
       ... actions 
end  % end try/catch

どんな提案でも大歓迎です。

ps: 使用されるオプションは次のとおりです。

options = optimset(oldopts,'Display','notify', 'Algorithm','active-set', 'MaxFunEvals', 10000);
4

2 に答える 2

0
  1. 何が入っていoldoptsますか?
  2. is less than twice the default value of the step size toleranceは、ステップ サイズまたは許容値のいずれかを変更する必要があることを示唆しています。これにはいくつかの方法があります: 推測するか、反復表示を表示します。

    optimset(oldopts,'Display','iter' ...% or 'iter-detailed'
    
  3. 何を変更したいかを把握したら、次のように設定できます。

    optimset(options,'stepsize', 1e-2) % or optimset(options,'tolX', 1e-e)...
    
  4. エラーをスローするには、終了フラグを見るのをやめます。エラーは収束または反復の問題です。

  5. アルゴリズムがグラフィカルな方法を使用して収束できるかどうかを自問してください (可能な場合)。

  6. RTM: http://www.mathworks.com/help/optim/ug/when-the-solver-fails.html

于 2013-02-09T17:08:39.383 に答える
0

docsによると、そのシナリオを確認するのでexitFlag == -2はなく、注意する必要があります。0

すなわち

[x,fval,exitflag] = fmincon(@(x) costFunction(x,INPUTS),x0,A,b,[],[],lb,ub,[],options);
if exitflag == -2
    %// Handle non-convergence
else
    %// Converged
end
于 2014-01-24T14:01:11.177 に答える