Main Content

終了フラグと終了メッセージ

終了フラグ

最適化ソルバーがそのタスクを完了すると、終了フラグが設定されます。終了フラグは、ソルバーがその反復を停止した理由を示す整数のコードです。一般的に以下のようになります。

  • 正の終了フラグは結果が適切であることを意味します。

  • 負の終了フラグは結果が適切でないことを意味します。

  • 0 個の終了フラグは反復制限または関数評価数の制限を超えることにより停止させられたソルバーに対応します (反復と関数カウントおよび許容誤差と停止条件を参照)。

この表は、各ソルバーの終了フラグの説明にリンクされています。

ソルバー別の終了フラグ

coneprog exitflag

fgoalattain exitflag

fminbnd exitflag

fmincon exitflag

fminimax exitflag

fminsearch exitflag

fminunc exitflag

fseminf exitflag

fsolve exitflag

fzero exitflag

intlinprog exitflag

linprog exitflag

lsqcurvefit exitflag

lsqlin exitflag

lsqnonlin exitflag

lsqnonneg exitflag

quadprog exitflag

 

メモ

終了フラグは解の質への絶対に間違いのないガイドではありません。許容誤差設定などの他の多くの要因によって、満足できる解かどうかに影響する可能性があります。ソルバーが満足できる答えを返すかどうかを判断するのはユーザー自身です。負の終了フラグが「不適切な」解であるとは限りません。同様に、正の終了フラグが「適切な」解であるとも限りません。

exitflag 構文でソルバーを呼び出すことにより、終了フラグを取得します。この構文はソルバーにより異なります。詳細については、ソルバー関数のリファレンス ページを参照してください。たとえば、fsolve の場合、終了フラグを取得するための呼び出し構文は以下のとおりです。

[x,fval,exitflag] = fsolve(...)

以下の例は、この構文を使用しています。非線形方程式系のシステムを解くことにしましょう。

2x1x2=ex1x1+2x2=ex2.

解におけるゼロ ベクトルをもたらす無名関数として、これらの方程式を記述します。

myfcn = @(x)[2*x(1) - x(2) - exp(-x(1));
      -x(1) + 2*x(2) - exp(-x(2))];

fsolveexitflag 構文により初期点 [-5 -5] で呼び出します。

[xfinal fval exitflag] = fsolve(myfcn,[-5 -5])
Equation solved.

fsolve completed because the vector of function values is near zero
as measured by the value of the function tolerance, and
the problem appears regular as measured by the gradient.

xfinal =
    0.5671    0.5671

fval =
  1.0e-06 *
   -0.4059
   -0.4059

exitflag =
     1

fsolve exitflag の表から、終了フラグ値が 1 であるため "関数が解 x に収束した" ことがわかります。つまり、fsolve は、myfcnx = [0.5671 0.5671] においてほぼ 0 であることを示します。

終了メッセージ

各ソルバーは、反復の終了時にメッセージを MATLAB® のコマンド ウィンドウに発行します。このメッセージは、ソルバーが停止した理由を簡単に説明します。メッセージは終了フラグよりも詳しい説明を与えます。

コマンド ラインでの問題の定義と解決など、本書の多くの例は終了メッセージを示します。前セクション終了フラグの例は、以下の終了メッセージを示します。

Equation solved.

fsolve completed because the vector of function values is near zero
as measured by the value of the function tolerance, and
the problem appears regular as measured by the gradient.

このメッセージは終了フラグより有益です。メッセージは、勾配が適切であることを示します。また、メッセージは、関数許容誤差が関数値のベクトルを制御して、fsolve に対して必ず 0 の近傍になるようにし、解が完了したとみなすことを記述します。

より詳細な終了メッセージ

ソルバーによっては、詳細な情報のリンクを含む終了メッセージをもつものがあります。リンクには以下の 2 種類があります。

  • 語句のリンク。このリンクをクリックするとウィンドウが開き、用語の定義を表示するか、他の情報を与えます。新しいウィンドウは、より詳細な情報用のヘルプ ブラウザー ドキュメンテーションへのリンクを含むことがあります。

  • 表示の最終行として <stopping criteria details> を示すリンク。このリンクをクリックすると、MATLAB はソルバーが停止した理由についての詳細情報を表示します。

fminunc ソルバーはより詳細な終了メッセージをもちます。

opts = optimoptions(@fminunc,'Algorithm','quasi-newton'); % 'trust-region' needs gradient
[xfinal fval exitflag] = fminunc(@sin,0,opts)

以下の結果が生成されます。

下線付きの語句ごとに、より多くの情報を提供するリンクが含まれます。

  • <stopping criteria details> リンクは、以下を MATLAB コマンド ラインに表示します。

    Optimization completed: The first-order optimality measure, 0.000000e+00, is less 
    than options.OptimalityTolerance = 1.000000e-06.
  • 他のリンクは用語の定義をもつヘルプ ウィンドウを表示します。たとえば、Local minimum found リンクをクリックすると、以下のウィンドウが開きます。

    first-order optimality measure 展開リンクをクリックすると、fminunc の 1 次の最適性の尺度の定義が表示されます。

    展開リンクは、同じウィンドウ内でより詳細な情報を取得する方法です。first-order optimality measure 展開リンクを再度クリックすると、定義が閉じます。

  • 他のリンクはヘルプ ビューアーを開きます。

終了メッセージのオプション

Display オプションを設定して、終了メッセージと反復表示の両方の外観を変更します。詳細については、反復表示を参照してください。以下の表は Display オプションのさまざまな設定の効果を示します。

Display オプションの値コマンド ウィンドウへの出力
終了メッセージ反復表示
'none'、または同義の 'off'なしなし
'final' (大部分のソルバーでは既定の設定)既定の設定なし
'final-detailed'詳細なし
'iter'既定の設定あり
'iter-detailed'詳細あり
'notify'exitflag ≤ 0 の場合にのみ既定の設定なし
'notify-detailed'exitflag ≤ 0 の場合にのみ詳細を表示なし

たとえば、

opts = optimoptions(@fminunc,'Display','iter-detailed','Algorithm','quasi-newton');
[xfinal fval] = fminunc(@cos,1,opts);

は、以下を表示します。

関連するトピック