許容誤差と停止条件
最適化の反復数はソルバーの "停止条件" に依存します。これらの条件には、自分で設定できるいくつかの "許容誤差" があります。許容誤差は、一般的に、それを超えた場合にソルバーの反復を停止するしきい値です。
最適化オプションの設定と変更で説明するように、optimoptions を使用して、許容誤差と他の基準を設定します。
ヒント
一般的に、OptimalityTolerance や StepTolerance などの許容誤差は 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)|) の場合や類似の相対尺度の場合に反復が終了します。許容誤差の詳細を参照してください。メモ
他のソルバーとは異なり、
fminsearchはTolFun(関数の許容誤差) とTolX(ステップの許容誤差) の "両方" を満たすと停止します。OptimalityToleranceは 1 次の最適性の尺度の許容誤差です。最適性の尺度がOptimalityToleranceより小さい場合、反復計算が終了します。OptimalityToleranceは 1 次の最適性尺度の相対範囲の場合もあります。許容誤差の詳細を参照してください。1 次の最適性の尺度は1 次の最適性の尺度で定義されています。ConstraintToleranceは、非線形制約関数、線形制約関数、範囲を含むすべての制約違反の大きさの上限です。ソルバーが以下となる点 x を返す場合、max(c(x)) ≥
ConstraintToleranceまたはmax(|ceq(x)|) ≥
ConstraintToleranceまたはmax(Ax – b) ≥
ConstraintToleranceまたはmax(|Aeqx – beq|) ≥
ConstraintToleranceまたはmax(lb – x) ≥
ConstraintToleranceまたはmax(x – ub) ≥
ConstraintTolerance,
ソルバーは x で制約の違反があることを報告します。
ConstraintToleranceは相対範囲の場合もあります。許容誤差の詳細を参照してください。メモ
ConstraintToleranceは他の許容誤差とは別に処理されます。ConstraintToleranceの条件が満たされない場合 (すなわち制約関数の大きさがConstraintToleranceを超えた場合) は、他の理由で中止されない限りソルバーは計算を続行しようとします。ソルバーが単純に計算を中止しないのは、続行することでConstraintToleranceの条件が満たされるためです。MaxIterationsは、ソルバー反復回数に関する範囲です。MaxFunctionEvaluationsは、関数評価回数に関する範囲です。反復と関数評価は 反復と関数カウント で説明されています。
特定のソルバーに適用される他の 2 つの許容誤差 TolPCG と MaxPCGIter があります。これらは前処理付き共役勾配手順に関連します。詳細については、前処理付き共役勾配法を参照してください。
fmincon 内点法アルゴリズムにのみ適用される許容誤差がいくつかあります。詳細については、fmincon の options、「内点法アルゴリズム」を参照してください。
intlinprog にのみ適用される許容誤差がいくつかあります。詳細については、一部の “整数” 解は整数ではないおよび分枝限定法を参照してください。