非線形問題ベースの最適化における整数制約
問題ベースのアプローチを使用して整数制約付き非線形最適化問題を解くには、次のプロセスのいずれかに従います。
整数制約を処理する Global Optimization Toolbox ソルバー
ga
(Global Optimization Toolbox) またはsurrogateopt
(Global Optimization Toolbox) を使用する。prob2struct
を使用して問題を構造体に変換してから、外部ソルバーを使用する。intlinprog
を使用することで、非線形整数問題を反復して近似できる場合がある。このアプローチの例については、混合整数二次計画法ポートフォリオ最適化問題: 問題ベースを参照。
整数制約をもつ非線形問題に対する既定のソルバーは ga
(Global Optimization Toolbox) です。ga
または surrogateopt
のいずれかを使用して、関数 solve
で問題を解くには、Global Optimization Toolbox ライセンスを保有している必要があります。
外部ソルバーを使用して prob2struct
を呼び出す場合は、名前と値の引数 Solver
を指定しなければならない場合があります。
メモ
整数制約をもつ非線形問題の場合、Global Optimization Toolbox ライセンスがないときは、Solver
引数を含める必要があります。
Global Optimization Toolbox ライセンスがある場合でも、名前と値の引数 Solver
を指定しなければならない場合があります。外部ソルバーは、問題構造体が特定のソルバーに対応する形式であることを前提とします。たとえば、線形制約と整数制約をもつ問題と二次目的関数の場合、外部ソルバーでは、目的関数が式 ½xTHx + fTx の行列 H および f として表現されている必要がある場合があります。これらの行列を取得するには、名前と値の引数 Solver
を使用して 'quadprog'
ソルバーを指定します。
problem = prob2struct(prob,"Solver","quadprog");
quadprog
ソルバーを指定しなかった場合、生成される問題構造体には、行列ではなく目的関数の関数ハンドルが含まれる可能性があります。いずれの場合も、生成された問題構造体には intcon
フィールドの整数変数が含まれます。
メモ
整数制約をもつ非線形問題の場合、整数制約を処理できないソルバーを指定すると、prob2struct
は生成される構造体をソルバーで解くことができないという警告を発行します。この問題構造体に対してソルバーを呼び出し、問題を解こうとすると、ソルバーで整数制約が無視されます。この場合、解は元の問題に対する解ではなく、整数制約のない問題に対する解となります。