Main Content

許容誤差と停止条件

最適化の反復数はソルバーの "停止条件" に依存します。これらの条件には、自分で設定できるいくつかの "許容誤差" があります。許容誤差は、一般的に、それを超えた場合にソルバーの反復を停止するしきい値です。

最適化オプションの設定と変更で説明するように、optimoptions を使用して、許容誤差と他の基準を設定します。

ヒント

一般的に、OptimalityToleranceStepTolerance などの許容誤差は eps をかなり上回り、通常は 1e-14 を上回るように設定します。許容誤差を小さく設定すると、正確な結果が常に得られるとは限りません。ソルバーで収束が認識されず、無意味な反復が繰り返される可能性があります。許容誤差の値を eps より小さくすると、停止条件が実質的に無効になります。このヒントは、TolX の許容誤差について eps の既定値を使用する fzero には当てはまりません。

optimoptions では許容誤差が表示されます。たとえば、

options = optimoptions('fmincon');
[options.OptimalityTolerance,options.FunctionTolerance,options.StepTolerance]
ans =

   1.0e-06 *

    1.0000    1.0000    0.0001

また、ソルバー関数のリファレンス ページにあるオプションのセクションでも、既定の許容誤差を確認できます。

  • StepTolerance はステップ サイズの下限であり、(xi – xi+1) のノルムを示します。ソルバーが StepTolerance より小さいステップで処理しようとした場合、反復が終了します。StepTolerance は一般的に "相対" 的な範囲として使用され、|(xi – xi+1)| < StepTolerance*(1 + |xi|) の場合、または同様な相対尺度の場合に反復が終了します。詳細については、許容誤差の詳細を参照してください。

  • 一部のアルゴリズムでは、FunctionTolerance はステップ中の目的関数値の変位の下限です。これらのアルゴリズムでは、|f(xi) – f(xi+1)| < FunctionTolerance の場合、反復が終了します。FunctionTolerance は一般的に "相対" 範囲として使用され、|f(xi) – f(xi+1)| < FunctionTolerance*(1 + |f(xi)|) の場合や類似の相対尺度の場合に反復が終了します。詳細については、許容誤差の詳細を参照してください。

    メモ

    他のソルバーとは異なり、fminsearchTolFun (関数の許容誤差) と TolX (ステップの許容誤差) の "両方" を満たすと停止します。

  • OptimalityTolerance は 1 次の最適性の尺度の許容誤差です。最適性の尺度が OptimalityTolerance より小さい場合、反復計算が終了します。OptimalityTolerance は 1 次の最適性尺度の相対範囲の場合もあります。詳細については、許容誤差の詳細を参照してください。1 次の最適性の尺度は1 次の最適性の尺度で定義されています。

  • ConstraintTolerance はすべての制約関数の大きさの上限です。ソルバーが c(x) > ConstraintTolerance または |ceq(x)| > ConstraintTolerance となる点 x を返す場合、ソルバーは x で制約の違反があることを報告します。ConstraintTolerance は相対範囲の場合もあります。詳細については、許容誤差の詳細を参照してください。

    メモ

    ConstraintTolerance は他の許容誤差とは別に処理されます。ConstraintTolerance の条件が満たされない場合 (すなわち制約関数の大きさが ConstraintTolerance を超えた場合) は、他の理由で中止されない限りソルバーは計算を続行しようとします。ソルバーが単純に計算を中止しないのは、続行することで ConstraintTolerance の条件が満たされるためです。

  • MaxIterations は、ソルバー反復回数に関する範囲です。MaxFunctionEvaluations は、関数評価回数に関する範囲です。反復と関数評価は 反復と関数カウント で説明されています。

特定のソルバーに適用される他の 2 つの許容誤差 TolPCGMaxPCGIter があります。これらは前処理付き共役勾配手順に関連します。詳細については、前処理付き共役勾配法を参照してください。

fmincon 内点法アルゴリズムにのみ適用される許容誤差がいくつかあります。詳細については、fminconoptions、「内点法アルゴリズム」を参照してください。

intlinprog にのみ適用される許容誤差がいくつかあります。詳細については、一部の “整数” 解は整数ではない分枝限定法を参照してください。

関連するトピック