2017-02-23 4 views
0

私は連続変数とバイナリ変数に問題があります。目的関数を作成したら、CPLEXが解決策を見つけることができなくなる制約を追加します。私が間違っていることを教えてください。CPLEXは等価制約付きの解を見つけることを拒否します

IloNumExpr cbin1 = cplex.prod(EB_s[a-1],binHandelSprzedaj[a-1]); 
cplex.addEq(EB[a],cbin1); 

"binHandelSprzedaj"はバイナリ変数の配列です。 "EB_s"と "EB"は連続cplex float変数の配列です。

"cbin1"の代わりに "EB_s [a-1]"または "binHandelSprzedaj [a-1]"のいずれかを入力するとコードが機能します。私はそれが二次制約で終わるからだと思います。しかし、CPLEXの1つの例では、「QCPex1」は「等しくない」二次制約を持つ解を提示し、コードは私が書いたものと非常によく似ています。なぜ私のコードがうまくいかないのか分かりません。これは、制約が2次であるか、2進変数と連続変数が混在しているか、または「等しい」タイプの制約のためです。

エラーメッセージは、受信:CPLEXエラー5002:目的でQは、私は最適化で大きなnoobのだ

半正定値ではありません。この問題にどう対処しますか?私はCPLEXが私のためにできるだけ多くの数学をしたら(あなたが示唆できるいくつかの魔法のコマンドかもしれない)好むだろう。

最終的な形の制約はより複雑なので、単純な変数の緩和(ここではhttp://orinanobworld.blogspot.com/2010/10/binary-variables-and-quadratic-terms.html)は機能しません。次のようになり、完全に定義された問題に制約:

= B + C + D +バイナリ* Fを - (1-バイナリ)* G

- gは連続変数です。

ご協力いただければ幸いです。

答えて

0

Cplexは、凸MIQP(二次対物)とMIQCP(二次制約)の問題を処理できます。また、非凸MIQP(パラメータSolutionTarget経由)も処理できます。私たちは、2次的に制約された非凸面問題を残しています。

幸いなことに、私たちは常にバイナリと連続変数の積を線形化できます。 Paul Rubinのブログへの参照は実際には機能します。 (Hereは別のレシピです)。そのために

あなたを置き換える:

a = b + c + d + binary * f - (1-binary)*g 

zは別の連続変数である
a = b + c + d + binary * f - g + z 
z = binary*g 

で。式

z = binary*g 

は、直接線形化することができます。

+0

ありがとう、これまでのところ:) – t4u

関連する問題