CPLEX の関数は、二次問題までしか解決できません。また、コスト関数が 2 次であり、コミットメント ベクトルを掛ける必要がある場合、それは 3 次方程式になります。二次関数を階段関数に変換する方法は多くの論文で説明されており、数学的な方法は理解しやすいものです。ただし、転送された関数を Cplex の cplexmiqp() に入れる方法がわかりません。これは、係数行列を決定するのが難しいためです。この質問を cplex 関数に実装する方法を教えてください。可能であれば、サンプル プログラムが非常に役立ちます。ありがとう!
質問する
1296 次
1 に答える
0
バイナリ変数でコストを乗算しません。代わりに、論理的な含意を使用してモデル化します。
d が 2 進変数で P が連続変数である d*P^2 と書く代わりに、新しい変数を導入し、それを B と呼びましょう。新しい目標は B^2 です。あとはロジックをモデル化するだけです
d = 0 implies B = 0
d = 1 implies B = P
これは通常、big-M 手法を使用して行われます。P が非負であり、上からたとえば 100 で制限されていることがわかっている場合は、次のように記述できます。
0 <= B <= 100*d
-100*(1-d) <= P-B <= 100*(1-d)
私が提供できる唯一のサンプル コードは、 cplexとのインターフェイスに使用できる MATLAB ベースのモデリング レイヤー YALMIP の例です。
于 2013-11-05T14:36:21.847 に答える