Main Content

最適化オプションの設定

オプションの設定方法

関数 optimset を使用して options 構造体を作成することで、最適化パラメーターを指定できます。options 構造体は、最適化関数に入力します。たとえば、次の構文により関数 fminbnd を呼び出して、最適化関数の入力に渡すことができます。

x = fminbnd(fun,x1,x2,options)

または関数 fminsearch を次の構文により呼び出します。

x = fminsearch(fun,x0,options)

たとえば、アルゴリズムの各反復の出力を表示するには、次のようにして Display オプションを 'iter' に設定します。

options = optimset('Display','iter');

オプションの表

オプション説明ソルバー

Display

中間ステップを画面に表示するかどうかを指定するフラグ。

  • 'notify' (既定) は、関数が収束しない場合にのみ出力を表示します。

  • 'iter' は、中間ステップを表示します (関数 lsqnonneg では使用できません)。最適化ソルバーの反復表示を参照してください。

  • 'off' または 'none' は中間ステップを表示しません。

  • 'final' は、最後の出力のみ表示します。

fminbnd, fminsearch, fzero, lsqnonneg

FunValCheck

目的関数値が正しいかどうかチェックします。

  • 'on' は、目的関数または制約が複素数か NaN の値を返す場合にエラーを表示します。

  • 'off' (既定の設定) はエラーを出力しません。

fminbnd, fminsearch, fzero

MaxFunEvals

可能な関数評価の最大回数。既定値は関数 fminbnd に対しては 500、関数 fminsearch に対しては 200*length(x0) です。

fminbnd, fminsearch

MaxIter

許容される最大反復回数。既定値は関数 fminbnd に対しては 500、関数 fminsearch に対しては 200*length(x0) です。

fminbnd, fminsearch

OutputFcn

ソルバーの各反復回数の情報を表示します。既定は [] (なし) です。最適化ソルバーの出力関数を参照してください。

fminbnd, fminsearch, fzero

PlotFcns

ソルバーの各反復回数の情報をプロットします。既定は [] (なし) です。使用可能な定義済み関数については、最適化ソルバーのプロット関数を参照してください。

fminbnd, fminsearch, fzero

TolFun

関数値の終了許容誤差。既定値は 1.e-4 です。許容誤差と停止条件を参照してください。

fminsearch

TolX

x の終了許容誤差。既定値は 1.e-4 であり、fzeroeps の既定値 (= 2.2204e-16) をもつ場合と、lsqnonneg10*eps*norm(c,1)*length(c) の既定値をもつ場合は除きます。許容誤差と停止条件を参照してください。

fminbnd, fminsearch, fzero, lsqnonneg

許容誤差と停止条件

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

ヒント

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

  • TolX はステップ サイズの下限であり、(xi – xi+1) のノルムを示します。ソルバーの試行するステップが TolX より小さくなると、反復は終了します。ソルバーは一般的に TolX"相対" 範囲として使用します。この場合、|(xi – xi+1)| < TolX*(1 + |xi|) または類似の相対尺度が満たされると反復が終了します。

    Plot showing how iterations end when the last step is smaller than TolFun or TolX.

  • TolFun はステップ間の目的関数値の変位の下限です。|f(xi) – f(xi+1)| < TolFun の場合に反復は終了します。ソルバーは一般的に TolFun"相対" 範囲として使用します。この場合、|f(xi) – f(xi+1)| < TolFun(1 + |f(xi)|) または類似の相対尺度が満たされると反復が終了します。

  • MaxIter は、ソルバー反復回数に関する範囲です。MaxFunEvals は、関数評価回数に関する範囲です。

メモ

他のソルバーとは異なり、fminsearchTolFunTolX"両方" を満たすと停止します。

Output 構造体

output 構造体には、関数評価回数、反復回数、アルゴリズムが含まれています。次のように、fminbndfminsearch または fzero に 4 番目の出力引数を指定すると、構造体が表示されます。

[x,fval,exitflag,output] = fminbnd(@humps,0.3,1);

各ソルバーの output 構造体の詳細については、関数リファレンス ページを参照してください。

output 構造体は optimset で選択するオプションではありません。この構造体は、fminbndfminsearch および fzero のオプション出力です。

関連するトピック