Main Content

非線形問題ベースの最適化における整数制約

問題ベースのアプローチを使用して整数制約付き非線形最適化問題を解くには、次のプロセスのいずれかに従います。

  • Global Optimization Toolbox ライセンスがある場合は、問題ベースのアプローチと同じように問題を定式化します。ga (Global Optimization Toolbox) は、整数制約をもつ非線形問題に対する既定のソルバーです。solve の引数 Solver で、surrogateopt (Global Optimization Toolbox) をソルバーとして指定することもできます。

  • ga または surrogateopt をソルバーとしてソルバーベースのアプローチを使用します。ソルバーベースのアプローチでは、これらのソルバーを切り替えるときに目的関数と非線形制約関数を修正する必要があります。

  • prob2struct を使用して問題を構造体に変換してから、外部ソルバーを使用する。

  • intlinprog を使用することで、非線形整数問題を反復して近似できる場合がある。このアプローチの例については、混合整数二次計画法ポートフォリオ最適化問題: 問題ベースを参照。

外部ソルバーを使用して prob2struct を呼び出す場合は、名前と値の引数 Solver を指定しなければならない場合があります。

メモ

整数制約をもつ非線形問題の場合、Global Optimization Toolbox ライセンスがないときは、Solver 引数を含める必要があります。

Global Optimization Toolbox ライセンスがある場合でも、名前と値の引数 Solver を指定しなければならない場合があります。外部ソルバーは、問題構造体が特定のソルバーに対応する形式であることを前提とします。たとえば、線形制約と整数制約をもつ問題と二次目的関数の場合、外部ソルバーでは、目的関数が式 ½xTHx + fTx の行列 H および f として表現されている必要がある場合があります。これらの行列を取得するには、名前と値の引数 Solver を使用して 'quadprog' ソルバーを指定します。

problem = prob2struct(prob,"Solver","quadprog");

quadprog ソルバーを指定しなかった場合、生成される問題構造体には、行列ではなく目的関数の関数ハンドルが含まれる可能性があります。いずれの場合も、生成された問題構造体には intcon フィールドの整数変数が含まれます。

メモ

整数制約をもつ非線形問題の場合、整数制約を処理できないソルバーを指定すると、prob2struct は生成される構造体をソルバーで解くことができないという警告を発行します。この問題構造体に対してソルバーを呼び出し、問題を解こうとすると、ソルバーで整数制約が無視されます。この場合、解は元の問題に対する解ではなく、整数制約のない問題に対する解となります。

参考

| | (Global Optimization Toolbox) | (Global Optimization Toolbox)