ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

最適化オプション リファレンス

最適化オプション

下記の表では、最適化オプションを説明します。関数 optimoptions を使用してオプションを作成します。fminbndfminsearchfzero または lsqnonneg には optimset を使用します。

使用可能なオプション値と既定値については、個々のリファレンス ページを参照してください。

オプションの既定値は options を入力引数として呼び出す最適化関数により異なります。任意の最適化関数の既定のオプション値は、「optimoptions(@solvername)」またはそれと等価の「optimoptions('solvername')」と入力して確認できます。たとえば、次のようにします。

optimoptions(@fmincon)

オプションのリストと既定の trust-region-reflective fmincon アルゴリズムに対する既定値が返されます。別の fmincon アルゴリズムの既定値を確認するには、Algorithm オプションを設定します。たとえば、次のようにします。

opts = optimoptions(@fmincon,'Algorithm','sqp')

最適化オプション

オプション名説明使用する関数
Algorithm

ソルバーに使用されるアルゴリズムを選択します。

fmincon, fminunc, fsolve, linprog, lsqcurvefit, lsqlin, lsqnonlin, quadprog
AlwaysHonorConstraints

既定の 'bounds' は範囲制約が各反復で満たされているかを確認します。'none' に設定すると、この動作は停止します。

fmincon
BranchStrategy

枝変数 (branch variable) を選択するために bintprog を使用する方法です。

bintprog

DerivativeCheck

ユーザー設定の解析の微分係数 (勾配またはヤコビ行列;選択したソルバーにより異なる) を有限差分の微分係数と比較します。

fgoalattain, fmincon, fminimax, fminunc, fseminf, fsolve, lsqcurvefit, lsqnonlin

Diagnostics

最小化または計算する関数に関する情報を表示します。

fminbndfminsearchfzerolsqnonneg を除くすべて

DiffMaxChange

有限差分を計算する場合に変数内で生じる最大変化量です。

fgoalattain, fmincon, fminimax, fminunc, fseminf, fsolve, lsqcurvefit, lsqnonlin

DiffMinChange

有限差分を計算するための変数内での最小変化量。

fgoalattain, fmincon, fminimax, fminunc, fseminf, fsolve, lsqcurvefit, lsqnonlin

Display

表示レベル。

  • 'off' は出力を表示しません。

  • 'iter' は各反復の出力を表示し、既定の終了メッセージを与えます。

  • 'iter-detailed' は各反復の出力を表示し、技術的な終了メッセージを与えます。

  • 'notify' は、関数が収束しない場合にのみ出力を表示し、既定の終了メッセージを与えます。

  • 'notify-detailed' は、関数が収束しない場合にのみ出力を表示し、技術的な終了メッセージを与えます。

  • 'final' (既定の設定) は最終出力を表示し、既定の終了メッセージを返します。

  • 'final-detailed' は最終出力を表示し、技術的な終了メッセージを返します。

すべての関数。適用される値については、各関数のリファレンス ページを参照してください。

FinDiffRelStep

スカラーまたはベクトルのステップ サイズ ファクター。FinDiffRelStep をベクトル v に設定すると、前方有限差分 delta は次のとおりです。

delta = v.*sign(x).*max(abs(x),TypicalX);

中央有限差分は次のとおりです。

delta = v.*max(abs(x),TypicalX);

スカラー FinDiffRelStep はベクトルに拡張します。前方有限差分の既定値は sqrt(eps)、中央有限差分の既定値は eps^(1/3) です。

fgoalattain, fmincon, fminimax, fminunc, fseminf, fsolve, lsqcurvefit, lsqnonlin

FinDiffType

勾配推定に使用される有限差分は 'forward' (既定の設定) または 'central' (中央) のいずれかです。この中央差分は 2 倍の関数評価が必要になりますが正確性が増します。'central'AlwaysHonorConstraints オプションが 'none' に設定されている場合、fmincon の内点計算中に範囲を超える可能性があります。

fgoalattain, fmincon, fminimax, fminunc, fseminf, fsolve, lsqcurvefit, lsqnonlin

FunValCheck

目的関数値と制約値が有効であるかどうかをチェックします。'on' は目的関数または制約が complexNaN、または Inf の値を返した場合にエラーを表示します。

    メモ:   FunValCheckInf を適切に処理する fminbndfminsearchfzero と共に使用する場合、Inf のエラーを出力しません。

'off' はエラーを出力しません。

fgoalattain, fminbnd, fmincon, fminimax, fminsearch, fminunc, fseminf, fsolve, fzero, lsqcurvefit, lsqnonlin

GoalsExactAchieve

目的関数 fun がゴール goal に等しくなるために必要となる目的関数の値を指定します。このような目的関数は F のはじめの要素に割り当てる必要があります。

fgoalattain

GradConstr

ユーザーにより定義される非線形制約の勾配です。

fgoalattain, fmincon, fminimax

GradObj

ユーザーにより定義される目的関数の勾配です。

fgoalattain, fmincon, fminimax, fminunc, fseminf

HessFcn

ユーザーが与えたヘッセ行列 (ヘッセ行列 を参照してください) の関数ハンドルです。

fmincon
Hessian

'user-supplied' の場合、目的関数のために関数はユーザー定義のヘッセ行列または (HessMult を使用したときは) ヘッセ行列の情報を使用します。'off' の場合、関数は有限差分を使用してヘッセ行列を近似します。

fmincon, fminunc

HessMult

ユーザーが与えたヘッセ行列乗算関数を処理します。fmincon では、Hessian'user-supplied' または 'on' の場合以外は無視されます。

fmincon, fminunc, quadprog

HessPattern

有限差分に対するヘッセ行列のスパース パターン。行列サイズは n 行 n 列であり、n は初期点 x0 の要素数です。

fmincon, fminunc

HessUpdate

準ニュートン更新手法。

fminunc

InitBarrierParam

初期境界値。

fmincon
InitialHessMatrix

初期準ニュートン行列。

fminunc

InitialHessType

初期準ニュートン行列タイプ。

fminunc

InitTrustRegionRadius

信頼領域の初期半径。

fmincon
Jacobian

'on' の場合、関数は目的関数のためにユーザー定義のヤコビ行列または (JacobMult を使用したときは) ヤコビ行列の情報を使用します。'off' の場合、関数は有限差分を使用してヤコビ行列を近似します。

fsolve, lsqcurvefit, lsqnonlin

JacobMult

ユーザーにより定義されるヤコビ乗算関数。fsolve, lsqcurvefit, lsqnonlin に対して Jacobian'on' でない限り、無視されます。

fsolve, lsqcurvefit, lsqlin, lsqnonlin

JacobPattern

有限差分に対するヤコビ行列のスパース パターン。行列のサイズは mn 列です。m はユーザー定義の関数 fun より返される 1 番目の引数の値の数であり、n は開始値 x0 の要素数です。

fsolve, lsqcurvefit, lsqnonlin

LargeScale

代わりに Algorithm を使用します。

可能な場合、大規模なアルゴリズムを使用。

fminunc, fsolve, linprog, lsqcurvefit, lsqlin, lsqnonlin

MaxFunEvals

可能な関数評価の最大回数。

fgoalattain, fminbnd, fmincon, fminimax, fminsearch, fminunc, fseminf, fsolve, lsqcurvefit, lsqnonlin

MaxIter

反復の最大許容回数。

fzerolsqnonneg を除くすべて

MaxPCGIter

前処理付き共役勾配法の反復最大回数。

fmincon, fminunc, fsolve, lsqcurvefit, lsqlin, lsqnonlin, quadprog

MaxProjCGIter

計画された共役勾配の反復回数の許容誤差です。これは内部反復であり、アルゴリズムの反復数ではありません。

fmincon
MaxRLPIter

線形計画法の緩和法で可能な反復の最大数。

bintprog

MaxSQPIter

逐次二次計画法で可能な反復の最大数。

fgoalattain, fmincon, fminimax

MaxTime

アルゴリズムが実行する秒単位の時間の最大量。

bintprog

MeritFunction

ゴール到達/ミニマックス メリット関数 (複数目的関数) と fmincon (単一目的関数) を使用します。

fgoalattain, fminimax

MinAbsMax

最悪な場合の絶対値を最小にする F(x) の数です。

fminimax

NodeDisplayInterval

bintprog のノードの表示間隔。

bintprog

NodeSearchStrategy

bintprog が使用する探索法。

bintprog

ObjectiveLimit

目的関数値が ObjectiveLimit の下に到達し、反復が可能な場合、その反復は中止されます。

fmincon, fminunc, quadprog
OutputFcn

各反復で最適化関数が呼び出すユーザー定義の関数を 1 つ以上指定します。「出力関数」を参照してください。

fgoalattain, fminbnd, fmincon, fminimax, fminsearch, fminunc, fseminf, fsolve, fzero, lsqcurvefit, lsqnonlin

PlotFcns

アルゴリズムが実行中のさまざまな進行状況の測定値をプロットします。事前定義されたプロットから選択するか、独自のコードを記述してください。

  • @optimplotx は現在の点をプロットします

  • @optimplotfunccount は関数計算をプロットします

  • @optimplotfval は関数値をプロットします

  • @optimplotconstrviolation は最大制約違反をプロットします

  • @optimplotresnorm は残差のノルムをプロットします

  • @optimplotfirstorderopt は 1 次の最適性をプロットします

  • @optimplotstepsize はステップ サイズをプロットします

プロット関数を参照してください。

fgoalattainfminbndfminconfminimaxfminsearchfminuncfseminffsolvefzerolsqcurvefitlsqnonlin。適用される値については、各関数のリファレンス ページを参照してください。

PrecondBandWidth

PCG に対する前提条件の帯域幅の上限。'Inf' に設定すると、CG の代わりに直接因数分解を使用します。

fmincon, fminunc, fsolve, lsqcurvefit, lsqlin, lsqnonlin, quadprog

RelLineSrchBnd

ライン探索の手順長さの相対範囲です。

fgoalattain, fmincon, fminimax, fseminf

RelLineSrchBndDuration

RelLineSrchBnd で範囲を指定された反復数は有効になります。

fgoalattain, fmincon, fminimax, fseminf

ScaleProblem

fmincon interior-point および sqp アルゴリズムに対し、'obj-and-constr' を設定するとアルゴリズムがすべての制約関数とこの目的関数をそれぞれの初期値を使って正規化します。既定の 'none' に設定すると、無効になります。

他のソルバーに対して Algorithm オプションの 'levenberg-marquardt' を使用して ScaleProblem オプションを 'jacobian' に設定すると、ソルバーが適切にスケール化されていない問題を解く場合に役立つ場合があります。

fmincon, fsolve, lsqcurvefit, lsqnonlin, quadprog

Simplex

代わりに Algorithm を使用します。

'on' の場合、関数はシンプレックス アルゴリズムを使用します。

linprog

SubproblemAlgorithm

反復手順の計算方法を定義します。

fmincon
TolCon

制約違反に関する終了許容誤差。

bintprog, fgoalattain, fmincon, fminimax, fseminf, quadprog

TolConSQP

内部の SQP 反復法の制約違反許容誤差。

fgoalattain, fmincon, fminimax, fseminf
TolFun

関数値に関する終了許容誤差。

bintprogfgoalattainfminconfminimaxfminsearchfminuncfseminffsolvelinprog (interior-point のみ)、lsqcurvefitlsqlin (trust-region-reflective のみ)、lsqnonlinquadprog 

TolPCG

PCG 法の反復の終了許容誤差。

fmincon, fminunc, fsolve, lsqcurvefit, lsqlin, lsqnonlin, quadprog

TolProjCG

計画された共役勾配アルゴリズムの相対許容誤差です。これは内部の反復に対してであり、アルゴリズムの反復に対してではありません。

fmincon
TolProjCGAbs

計画された共役勾配アルゴリズムの絶対許容誤差です。これは内部の反復に対してであり、アルゴリズムの反復に対してではありません。

fmincon
TolRLPFun

線形計画緩和問題の関数値の終了許容誤差。

bintprog

TolX

x に関する終端の許容誤差。

linproglsqlinquadprog の中規模アルゴリズムを除くすべての関数

TolXInteger

bintprog が変数値を整数とみなす許容誤差。

bintprog

TypicalX

パラメーター x の配列の典型的な大きさを指定する配列。配列のサイズは初期点 x0 のサイズと等しくなります。主に勾配推定の有限差分のスケーリングに使用されます。

fgoalattain, fmincon, fminimax, fminunc, fsolve, lsqcurvefit, lsqlin, lsqnonlin, quadprog

UseParallel

'always' の場合、アプリケーションのソルバーは並列で勾配を推定します。'never' に設定すると、この動作は無効になります。

fgoalattain, fmincon, fminimax.

出力関数

optionsOutputfcn フィールドは、最適化関数が各反復で呼び出す 1 つまたは複数の関数を指定します。通常、出力関数は各反復で点をプロットしたり、アルゴリズムからの最適化量を表示するために使用します。表示できる出力関数を使用しますが、最適化量は設定しません。出力関数を設定するためには、以下を行います。

  1. 出力関数を関数ファイルまたはローカル関数として作成します。

  2. optimoptions を使用して Outputfcn の値を関数ハンドル、すなわち記号 @ が前に付いた関数名を設定します。たとえば、出力関数が outfun.m の場合、コマンド

     options = optimoptions(@solvername,'OutputFcn', @outfun);

    は、OutputFcnoutfun へのハンドルになるように指定します。複数の出力関数を指定するには以下の構文を使用します。

     options = optimoptions(@solvername,'OutputFcn',{@outfun, @outfun2});
  3. 入力引数に options を使用して最適化関数を呼び出します。

出力関数の例は 出力関数 を参照してください。

追加パラメーターの受け渡し は必要に応じて出力関数 OutputFcn をパラメタライズする方法を説明します。

出力関数の構造

出力関数の関数定義行は、次の形式になります。

stop = outfun(x, optimValues, state)

ここで、

  • x は、現在のアルゴリズムの反復処理で計算される点です。

  • optimValues は現在の反復からのデータを含む構造体です。optimValues のフィールド はこの構造体を詳しく説明します。

  • state はアルゴリズムの現在の状態です。アルゴリズムの状態 は可能な値の表があります。

  • stop は、最適化ルーチンを終了するか継続するかによって、true または false を表すフラグです。詳細は、Stop フラグ を参照してください。

最適化関数は、反復処理ごとに入力引数の値を outfun に渡します。

optimValues のフィールド

以下の表は optimValues 構造体のフィールドをリストします。特定の最適化関数は、これらのフィールドのいくつかのみに対して値を返します。各フィールドに対して、表の、関数による出力の欄は、フィールドを返す関数をリストします。

対応する出力引数-  optimValues のフィールドのいくつかは、最適化関数の出力引数に対応します。最適化アルゴリズムの最終的な反復の後、そのようなフィールドの値は、対応する出力引数に等しくなります。たとえば、optimValues.fval は出力引数 fval に相当します。従って、出力関数とともに fmincon を呼び出し、fval を戻すと optimValues.fval の最終値は fval に等しくなります。次の表の詳細の列は、相当する出力引数をもつフィールドを示します。

コマンド ラインの表示-  optimValues のいくつかのフィールドの値は optionsDisplay フィールドを 'iter' に設定して最適化関数を呼び出す場合、反復表示 で説明されるようにコマンド ラインに表示されます。たとえば、optimValues.fvalf(x) の列に表示されます。次の表のコマンド ラインの表示の欄は、コマンド ラインで表示できるフィールドを示します。

一部の optimValues フィールドは、次に示すように特定のアルゴリズムにのみ適用されます。

  • AS — active-set

  • D — trust-region-dogleg

  • IP — interior-point

  • LM — levenberg-marquardt

  • Q — quasi-newton

  • SQP — sqp

  • TR — trust-region

  • TRR — trust-region-reflective

optimValues フィールド

OptimValues フィールド (optimValues.field)説明関数による出力コマンド ラインの表示

attainfactor

多目的問題のための到達因子。詳細は、ゴール到達法 を参照してください。

fgoalattain

なし

cgiterations

現在の最適化反復での共役勾配反復法の回数です。

fmincon (IP、TRR)、fsolve (TRR)、lsqcurvefit (TRR)、lsqnonlin (TRR)

CG-iterations

反復表示を参照してください。

constrviolation

最大の制約違反です。

fgoalattain, fmincon, fminimax, fseminf

Max constraint またはFeasibility

反復表示を参照してください。

degenerate

退化の尺度。以下を満たす点は退化 (degenerate) です。

変数の 1 つについての偏導関数がその点で 0

その点でその変数に対する範囲制約がアクティブ

退化を参照してください。

fmincon (TRR)、lsqcurvefit (TRR)、lsqnonlin (TRR)

なし

directionalderivative

探索方向の方向微分です。

fgoalattainfmincon (AS)、fminimaxfminunc (Q)、fseminffsolve (LM)、lsqcurvefit (LM)、lsqnonlin (LM)

Directional derivative

反復表示を参照してください。

firstorderopt

1 次の最適性条件 (アルゴリズムに依存)。最終値は最適化関数の出力 output.firstorderopt に等しくなります。

fgoalattain, fmincon, fminimax, fminunc, fseminf, fsolve, lsqcurvefit, lsqnonlin

First-order optimality

反復表示を参照してください。

funccount

関数評価の累積回数。最終値は最適化関数の出力 output.funcCount に等しくなります。

fgoalattain, fminbnd, fmincon, fminimax, fminsearch, fminunc, fsolve, fzero, fseminf, lsqcurvefit, lsqnonlin

F-count またはFunc-count

反復表示を参照してください。

fval

現在の点の関数値。最終値は最適化関数の出力 fval に等しくなります。

fgoalattain, fminbnd, fmincon, fminimax, fminsearch, fminunc, fseminf, fsolve,
fzero

f(x)

反復表示を参照してください。

gradient

目的関数の現在の勾配です。解析的な勾配を与えるか、または有限差分近似のいずれかになります。最終値は最適化関数の出力 grad に等しくなります。

fgoalattain, fmincon, fminimax, fminunc, fseminf, fsolve, lsqcurvefit, lsqnonlin

なし

iteration

反復回数です。0 で開始します。最終値は最適化関数の出力 output.iterations に等しくなります。

fgoalattain, fminbnd,fmincon, fminimax, fminsearch, fminunc, fsolve, fseminf, fzero, lsqcurvefit, lsqnonlin

Iteration

反復表示を参照してください。

lambda

現在の反復でのレーベンバーグ・マルカート パラメーター lambda, です。レーベンバーグ・マルカート法を参照してください。

fsolve (LM)、lsqcurvefit (LM)、lsqnonlin (LM)

Lambda

maxfval

最大関数値

fminimax

なし

positivedefinite

アルゴリズムがニュートン ステップを計算中に負の曲率を検出する場合は 0 です。

それ以外の場合は 1 です。

fmincon (TRR)、fminunc (TRR)、fsolve (TRR)、lsqcurvefit (TRR)、lsqnonlin (TRR)

なし

procedure

準備のメッセージです。

fgoalattainfminbndfmincon (AS)、fminimaxfminsearchfseminf
fzero

Procedure

反復表示を参照してください。

ratio

2 次近似の変動に対する目的関数の変動比です。

fmincon (TRR)、fsolve (TRR)、lsqcurvefit (TRR)、lsqnonlin (TRR)

なし

residual

残差ベクトルです。fsolve に対して residual は残差の 2 乗の 2 ノルムです。

lsqcurvefit, lsqnonlin, fsolve

Residual

反復表示を参照してください。

resnorm

残差の二乗の 2 ノルム。

lsqcurvefit, lsqnonlin

Resnorm

反復表示を参照してください。

searchdirection

探索方向です。

fgoalattainfmincon (AS、SQP)、fminimaxfminunc (Q)、fseminffsolve (LM)、lsqcurvefit (LM)、lsqnonlin (LM)

なし

stepaccept

現在の信頼領域法手順の状態です。現在の信頼領域法手順が満たされた場合 true を出力し、そうでない場合は false を出力します。

fsolve (D)

なし

stepsize

現在のステップ サイズ (x の変動) です。最終値は最適化関数の出力 output.stepsize に等しくなります。

fgoalattain, fmincon, fminimax, fminunc, fseminf, fsolve, lsqcurvefit, lsqnonlin

Step-size または Norm of Step

反復表示を参照してください。

trustregionradius

信頼領域の半径です。

fmincon (IP、TRR)、fminunc (TR)、fsolve (D、TRR)、lsqcurvefit (TRR)、lsqnonlin (TRR)

Trust-region radius

反復表示を参照してください。

退化-  現在の最適化の点 x の退化を測るフィールド degenerate の値は次のように定義されます。最初に、x と同じサイズをもつベクトル r を定義します。r(i)x(i) から下限 lb と上限 ubi 番目の要素までの最小の距離です。つまり、

r = min(abs(ub-x, x-lb))

すると degenerate の値はベクトル r + abs(grad) の最小の要素です。ここで、grad は目的関数の勾配です。次の両方が成立するインデックス i がある場合、degenerate の値は 0 です。

  • grad(i) = 0

  • x(i) は上限または下限のいずれかの i 番目の要素に等しくなります。

アルゴリズムの状態

次の表は、state の値を一覧表示したものです。

state説明

'init'

アルゴリズムは、最初の反復の前の初期状態にあります。

'interrupt'

アルゴリズムは、反復の計算中です。この状態で、出力関数は、最適化の現在の反復を中断することができます。このとき、xoptimValues の値は state=='iter' であるような出力関数に対する最近の呼び出しと同じです。

'iter'

アルゴリズムは、反復の最後にあります。

'done'

アルゴリズムは、最後の反復の後の最終状態にあります。

以下のコードは現在の反復で、どのタスクを実行するかを決めるために出力関数が state の値を使用する方法を示します。

switch state
    case 'iter'
          % Make updates to plot or guis as needed
    case 'interrupt'
          % Probably no action here. Check conditions to see  
          % whether optimization should quit.
    case 'init'
          % Setup for plots or guis
    case 'done'
          % Cleanup of plots, guis, or final plot
otherwise
end

Stop フラグ

出力引数 stop は、true またはfalse を示すフラグです。フラグは、最適化が停止または連続しなければならないかどうかを最適化関数に示します。次の例は、stop フラグの一般的な使用方法を示したものです。

optimValues のデータに基づき最適化を停止-  出力関数を使用すると、optimValues の現在のデータに基づいて、反復処理中に最適化を停止することができます。たとえば、次のコードは方向微分が .01 より小さい場合、stoptrue に設定します。

function stop = outfun(x,optimValues,state)
stop = false;
% Check if directional derivative is less than .01.
if optimValues.directionalderivative < .01
    stop = true;
end 

GUI の入力に基づき最適化を停止-  最適化を実行する GUI を設計すると、ユーザーが GUI の [停止] ボタンを押したときに、出力関数によって最適化を停止させることができます。次のコードはこれを行う方法を示します。[停止] ボタン コールバックが hObject と呼ばれる handles 構造体の optimstop フィールドに値 true を保存することを仮定します。

function stop = outfun(x,optimValues,state)
stop = false;
% Check if user has requested to stop the optimization.
stop = getappdata(hObject,'optimstop');

プロット関数

options 構造体の PlotFcns フィールドは最適化関数が呼び出す 1 つまたは複数の関数を指定します。これらの関数はアルゴリズム実行中の進行状況を示すさまざまな測定値をプロットするために各反復で呼び出されます。プロット関数の構造は出力関数の構造と同じです。プロット関数の記述と呼び出しに関する詳細は 出力関数 を参照してください。組み込みプロット関数の使用例については、「プロット関数の使用」を参照してください。

PlotFcns に対してリストされている事前定義されたプロット関数を表示するには、MATLAB® エディターで開きます。たとえば、残差ノルムに対応するファイルを表示するには、以下のように入力します。

edit optimplotresnorm.m

任意の事前定義されたプロット関数をテンプレートとして使用して、カスタムのプロット関数を作成できます。

この情報は役に立ちましたか?