Main Content

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

関数 solve は、内部的に以下のソルバーを呼び出して最適化問題を解きます。問題に対する既定のソルバーおよび問題でサポートされているソルバーについては、'solver' 引数を参照してください。

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

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

非線形最適化問題では、solve"自動微分" を使用して、目的関数と非線形制約関数の勾配を計算します。これらの導関数は、目的関数と制約関数が 最適化変数および式でサポートされる演算 で構成され、fcn2optimexpr 関数を使用していない場合に適用されます。自動微分が適用されない場合は、ソルバーが有限差分を使用して導関数を推定します。自動微分の詳細については、自動微分の背景を参照してください。

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

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

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

メモ

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

参考

| |

関連するトピック