主要内容

このペ,ジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

アルゴリズムの選択

Fminconアルゴリズム

fminconには,次の5のアルゴリズムオプションがあります。

  • “内点”(既定の設定)

  • “trust-region-reflective”

  • “sqp”

  • “sqp-legacy”

  • “激活集”

optimoptionsを使用して,コマンドラ算法オプションを設定します。

推奨
  • 最初に“内点”アルゴリズムを使用します。

    最小化が失敗した場合のヘルプは,ソルバ,が失敗する場合またはソルバ,が成功している可能性がある場合を参照してください。

  • 最適化を再度実行して小規模または中規模の問題に対するスピ,ドを上げるには,次に“sqp”を,最後に“激活集”を試してください。

  • 適用可能なら“trust-region-reflective”を使用します。問題においては,目的関数に勾配と制約が含まれ,制約条件は範囲のみか線形等式のみ(両方は不可)でなければなりません。

詳細は,内点法アルゴリズムによる精度低下の可能性にいてを参照してください。

推奨の理由

  • “内点”は大規模なスパ,ス問題と小規模な密問題を処理します。このアルゴリズムは,すべての反復で範囲を満たし,またはの結果から回復できます。これは大規模なアルゴリズムです。大規模アルゴリズムと中規模アルゴリズムを参照してください。このアルゴリズムは,大規模な問題に対して特別な手法を使用できます。詳細は、fmincon选项、「内点法アルゴリズムを参照してください。

  • “sqp”はすべての反復で範囲を満たします。このアルゴリズムは,またはの結果から回復できます。これは大規模なアルゴリズムではありません。大規模アルゴリズムと中規模アルゴリズムを参照してください。

  • “sqp-legacy”“sqp”に類似していますが,通常,より低速で,さらに多くのメモリを使用します

  • “激活集”は大きなステップを取ることができるので,高速に処理可能です。このアルゴリズムは,滑らかでない制約をもつ一部の問題に対して効果的です。これは大規模なアルゴリズムではありません。大規模アルゴリズムと中規模アルゴリズムを参照してください。

  • “trust-region-reflective”は,勾配を与えることを必要とし,範囲のみまたは線形等式制約のみ(ただし両方ではない)が可能です。これらの制限内でならば,このアルゴリズムは大規模なスパース問題と小規模な密問題を効果的に扱うことができます。これは大規模なアルゴリズムです。大規模アルゴリズムと中規模アルゴリズムを参照してください。このアルゴリズムは,ヘッセ乗算関数など、特別な手法を使用してメモリ使用量を節約できます。詳細は、fmincon选项、「信頼領域反思法アルゴリズムを参照してください。

各アルゴリズムの説明にいては,制約付き非線形最適化アルゴリズムを参照してください。

Fsolveアルゴリズム

fsolveは次の3のアルゴリズムをもっています。

  • “trust-region-dogleg”(既定の設定)

  • “信赖域”

  • “levenberg-marquardt”

optimoptionsを使用して,コマンドラ算法オプションを設定します。

推奨
  • 最初に“trust-region-dogleg”アルゴリズムを使用します。

    fsolveが失敗した場合のヘルプは,ソルバ,が失敗する場合またはソルバ,が成功している可能性がある場合を参照してください。

  • ヤコビ乗算関数をもっている場合や、内部アルゴリズムを微調整したい場合(fsolve选项の”信頼領域法アルゴリズムを参照)に,再び方程式を解くには,“信赖域”を試してください。

  • “levenberg-marquardt”を含めてすべてのアルゴリズムの時間を測定してみて,自分の問題に最も適したアルゴリズムを探してください。

推奨の理由

  • “trust-region-dogleg”は,非線形方程式を解くために特別に設計された唯一のアルゴリズムです。その他は,この関数の二乗和を最小にするよう試みます。

  • “信赖域”アルゴリズムは,スパ,ス問題に対して効果的です。このアルゴリズムは,大規模な問題に対して、ヤコビ乗算関数などのような特別な手法を使用できます。

各アルゴリズムの説明にいては,方程式を解くためのアルゴリズムを参照してください。

Fminuncアルゴリズム

fminuncは次の2のアルゴリズムをもっています。

  • “拟牛顿”(既定の設定)

  • “信赖域”

optimoptionsを使用して,コマンドラ算法オプションを設定します。

推奨
  • 目的関数が勾配を含む場合は,'Algorithm' = 'trust-region'を使用して,SpecifyObjectiveGradientオプションを真正的に設定します。

  • そうでない場合は'Algorithm' = '准牛顿'を使用します。

最小化が失敗した場合のヘルプは,ソルバ,が失敗する場合またはソルバ,が成功している可能性がある場合を参照してください。

各アルゴリズムの説明にいては,制約なし非線形最適化アルゴリズムを参照してください。

最小二乗アルゴリズム

lsqlin

lsqlinは次の3のアルゴリズムをもっています。

  • “内点”(既定の設定)

  • “trust-region-reflective”

  • “激活集”

optimoptionsを使用して,コマンドラ算法オプションを設定します。

推奨
  • 最初に“内点”を試行します。

    ヒント

    入力行列Cの非ゼロ入力の割合が高い場合に,より優れたパフォ,マンスを得るには,Cを通常の双行列として指定します。同様に,Cの非ゼロ入力が比較的少ない場合に,より優れたパフォ,マンスを得るには,Cをスパ,スとして指定します。デタ型の詳細にいては,スパ,ス行列を参照してください。“LinearSolver”オプションを使用すると,内部的な線形代数タ。

  • 制約がない場合または範囲制約のみの場合に,より高い精度,速度が必要な場合または線形最小二乗付きヤコビ乗算関数を使用するには,“trust-region-reflective”を試行します。

  • 多数の線形制約があるものの変数の数は多くない場合は,“激活集”を試してください。

最小化が失敗した場合のヘルプは,ソルバ,が失敗する場合またはソルバ,が成功している可能性がある場合を参照してください。

詳細は,内点法アルゴリズムによる精度低下の可能性にいてを参照してください。

各アルゴリズムの説明にいては,最小二乗(モデル当てはめ)アルゴリズムを参照してください。

Lsqcurvefitとlsqnonlin

lsqcurvefitlsqnonlinは次の2のアルゴリズムをもっています。

  • “trust-region-reflective”(既定の設定)

  • “levenberg-marquardt”

optimoptionsを使用して,コマンドラ算法オプションを設定します。

推奨
  • 一般に,最初に“trust-region-reflective”を試行します。

  • 問題が劣決定(次元より方程式が少ない)の場合は,“levenberg-marquardt”を使用します。

最小化が失敗した場合のヘルプは,ソルバ,が失敗する場合またはソルバ,が成功している可能性がある場合を参照してください。

各アルゴリズムの説明にいては,最小二乗(モデル当てはめ)アルゴリズムを参照してください。

線形計画法のアルゴリズム

linprogは次の3のアルゴリズムをもっています。

  • 对偶单纯形的(既定の設定)

  • “interior-point-legacy”

  • “内点”

optimoptionsを使用して,コマンドラ算法オプションを設定します。

推奨

まず对偶单纯形的アルゴリズムまたは“内点”アルゴリズムを使用します。

最小化が失敗した場合のヘルプは,ソルバ,が失敗する場合またはソルバ,が成功している可能性がある場合を参照してください。

詳細は,内点法アルゴリズムによる精度低下の可能性にいてを参照してください。

推奨の理由

  • 多くの場合,对偶单纯形的アルゴリズムと“内点”アルゴリズムは高速で,最小限のメモリを使用します。

  • “interior-point-legacy”アルゴリズムは“内点”に類似していますが,“interior-point-legacy”では速度やロバスト性が低下したり,メモリ使用量が増加したりすることがあります。

各アルゴリズムの説明にいては,線形計画法のアルゴリズムを参照してください。

二次計画法のアルゴリズム

quadprogは次の3のアルゴリズムをもっています。

  • “interior-point-convex”(既定の設定)

  • “trust-region-reflective”

  • “激活集”

optimoptionsを使用して,コマンドラ算法オプションを設定します。

推奨
  • 凸問題の場合や問題が凸であるかどうかわからない場合には,“interior-point-convex”を使用します。

  • ヒント

    ヘッセ行列Hの非ゼロ入力の割合が高い場合に,より優れたパフォ,マンスを得るには,Hを通常の双行列として指定します。同様に,Hの非ゼロ入力が比較的少ない場合に,より優れたパフォ,マンスを得るには,Hをスパ,スとして指定します。デタ型の詳細にいては,スパ,ス行列を参照してください。“LinearSolver”オプションを使用すると,内部的な線形代数タ。

  • 範囲のみまたは線形等式のみをも非凸問題の場合は,“trust-region-reflective”を使用します。

  • 多数の線形制約があるものの変数の数は多くない半正定値問題の場合は,“激活集”を試してください。

最小化が失敗した場合のヘルプは,ソルバ,が失敗する場合またはソルバ,が成功している可能性がある場合を参照してください。

詳細は,内点法アルゴリズムによる精度低下の可能性にいてを参照してください。

各アルゴリズムの説明にいては,二次計画法のアルゴリズムを参照してください。

大規模アルゴリズムと中規模アルゴリズム

非スパ,ス行列を保存したり,演算する必要がない線形代数を使用する場合,最適化アルゴリズムは大規模になります。内部の計算処理では可能な限り,スパ,ス行列を用いた保存やスパ,ス線形代数を用いた演算を行います。さらに内部アルゴリズムはスパースコレスキー因子などのようなスパース性を維持し,共役勾配法のように行列を生成することはありません。

一方、中規模メソッドは非スパ,ス行列を内部的に作成し,密な線形代数を利用します。問題が十分に大きい場合,非スパース行列はメモリを大量に消費し,密な線形代数を計算するのに時間がかかります。

“大規模”という名前に間違った印象をもたないでください。大規模アルゴリズムは小規模な問題にも使用できます。また,大規模アルゴリズムを使用するためにスパ,ス行列を指定する必要はありません。制約タesc escプを追加するなどの追加機能にアクセスする場合は,中規模を選択してください。パフォ,マンスが向上する場合があります。

内点法アルゴリズムによる精度低下の可能性にいて

fminconquadproglsqlinおよびlinprogの内点法アルゴリズムには,メモリの消費量が少ないことや,大規模な問題をすばやく解決できるなど,多くの利点があります。ただし,その解は他のアルゴリズムの解と比較して精度がやや落る可能性があります。潜在的な精度の低下の原因は,内部計算されるバリア関数によって,反復が不等式制約の境界から遠ざけられるためです。

実際に多くの場合,この精度の低下は非常に小さなものです。

精度の低下を抑えるには,以下を試してください。

  • StepToleranceOptimalityTolerance,また場合によってはConstraintToleranceの許容誤差を小さくしてソルバ,を再実行します(ただし,妥当な許容誤差は維持してください)。許容誤差と停止条件を参照してください。

  • 内点法の求解から始め,別のアルゴリズムを実行します。一部のアルゴリズムでは大量のメモリや長時間を要することがあり,また,すべてのlinprogアルゴリズムと一部のquadprogアルゴリズムは初期点を受け入れないため,この方法は失敗することがあります。

たとえば,下限が0という制約で関数xを最小化してみます。fminconの既定の内点アルゴリズムを使用します。

选项= optimoptions(@fmincon,“算法”“内点”“显示”“关闭”);X = fmincon(@(X) X,1,[],[],[],[], [],0,[],[],options)
X = 2.0000 -08

fminconsqpアルゴリズムを使用すると次のようになります。

选项。算法=“sqp”;X2 = fmincon(@(x)x,1,[],[],[],[], [],0,[],[],options)
X2 = 0

同様に,linproginterior-point-legacyアルゴリズムを使用して同じ問題を解きます。

Opts = optimoptions(@linprog,“显示”“关闭”“算法”“interior-point-legacy”);X = linprog(1,[],[],[],[],0,[],1,opts)
X = 2.0833e-13

linprog对偶单纯形アルゴリズムを使用すると次のようになります。

选择。算法=对偶单纯形的;X2 = linprog(1,[],[],[],[], [],0,[],1,opts)
X2 = 0

これらの場合,内点法アルゴリズムで精度は低下しますが,正しい解にきわめて近くなっています。