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

問題ベースの最適化アルゴリズム

関数 solve は、内部的に以下のソルバーを呼び出して最適化問題を解きます。

  • 線形目的関数と線形制約の場合は linprog

  • 線形目的関数と線形制約および整数制約の場合は intlinprog

  • 二次目的関数と線形制約の場合は quadprog

  • 線形制約がある線形最小二乗の場合は lsqlin または lsqnonneg

  • 範囲制約がある非線形最小二乗の場合は lsqcurvefit または lsqnonlin

  • (変数範囲も含めて) 制約がなく一般的な非線形目的関数のある問題の場合は fminunc

  • 非線形制約がある、または一般的な非線形目的関数と少なくとも 1 つの制約がある問題の場合は fmincon

  • スカラー非線形方程式の場合は fzero

  • 範囲の有無にかかわらず、線形方程式系の場合は lsqlin

  • 制約がない非線形方程式系の場合は fsolve

  • 範囲がある非線形方程式系の場合は lsqnonlin

solve がこれらの関数を呼び出せるためには、solve か、他のいくつかの関連付けられている関数やオブジェクトが事前に問題をソルバー形式に変換しなければなりません。この変換には、たとえば、最適化変数式ではなく行列表現をもつ線形制約が必要になります。

最適化式を問題に含めると、アルゴリズムの最初のステップが発生します。OptimizationProblem オブジェクトは、その式で使用される変数の内部リストを保持しています。変数ごとに、式の線形インデックスとサイズが 1 つずつあります。そのため、問題変数は暗黙的に行列形式となります。関数 prob2struct は、問題形式からソルバー形式への変換を実行します。例については、問題の構造体への変換を参照してください。

問題の目的関数と制約に応じて solve が呼び出す既定ソルバーおよび許容されるソルバーについては、'solver' を参照してください。solve を呼び出すときに、'solver' の名前と値のペア引数を使用することで、この既定をオーバーライドできます。

intlinprog が MILP 問題を解くために使用するアルゴリズムについては、intlinprog アルゴリズムを参照してください。linprog が線形計画問題を解くために使用するアルゴリズムについては、線形計画法のアルゴリズムを参照してください。二次計画問題を解くために quadprog が使用するアルゴリズムについては、二次計画法のアルゴリズムを参照してください。線形または非線形の最小二乗ソルバー アルゴリズムについては、最小二乗 (モデル当てはめ) アルゴリズムを参照してください。非線形ソルバー アルゴリズムについては、制約なし非線形最適化アルゴリズムおよび制約付き非線形最適化アルゴリズムを参照してください。

非線形方程式を解く場合、solve は内部的に、各方程式を左辺と右辺の差として表します。その後 solve は、方程式の成分の二乗和を最小化しようと試みます。非線形方程式系を解くアルゴリズムについては、方程式を解くためのアルゴリズムを参照してください。問題に範囲もある場合、solvelsqnonlin を呼び出して、方程式の成分の二乗和を最小化します。詳細は、最小二乗 (モデル当てはめ) アルゴリズムを参照してください。

メモ

目的関数が二乗和である場合に solve にそのように認識させるには、expr'*expr などの形式ではなく sum(expr.^2) と記述します。内部パーサーは、明示的な二乗和のみを認識します。詳細は、問題ベースの最小二乗法の目的関数の記述を参照してください。例については、非負の最小二乗法、問題ベースを参照してください。

参考

| |

関連するトピック