終了フラグと終了メッセージ
終了フラグ
最適化ソルバーがそのタスクを完了すると、終了フラグが設定されます。終了フラグは、ソルバーがその反復を停止した理由を示す整数のコードです。一般的に以下のようになります。
この表は、各ソルバーの終了フラグの説明にリンクされています。
ソルバー別の終了フラグ
メモ
終了フラグは解の質への絶対に間違いのないガイドではありません。許容誤差設定などの他の多くの要因によって、満足できる解かどうかに影響する可能性があります。ソルバーが満足できる答えを返すかどうかを判断するのはユーザー自身です。負の終了フラグが「不適切な」解であるとは限りません。同様に、正の終了フラグが「適切な」解であるとも限りません。
exitflag
構文でソルバーを呼び出すことにより、終了フラグを取得します。この構文はソルバーにより異なります。詳細については、ソルバー関数のリファレンス ページを参照してください。たとえば、fsolve
の場合、終了フラグを取得するための呼び出し構文は以下のとおりです。
[x,fval,exitflag] = fsolve(...)
以下の例は、この構文を使用しています。非線形方程式系のシステムを解くことにしましょう。
解におけるゼロ ベクトルをもたらす無名関数として、これらの方程式を記述します。
myfcn = @(x)[2*x(1) - x(2) - exp(-x(1)); -x(1) + 2*x(2) - exp(-x(2))];
fsolve
を exitflag
構文により初期点 [-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
は、myfcn
が x
= [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);
は、以下を表示します。