0

私はCPLEXを初めて使い、MIPのエキスパートからは遠いですが、この技術(CPLEX 12.4)の問題を解決しようとしています。 私は、.lpファイルでMIPモデルを作成してCPLExに渡すことにしました。そのため、たくさんの入力を持ち、さまざまなソルバーをテストすることができます。しかし、私はインジケータの制約について少し問題があります。CPLEXはLPファイルフォーマットを使用しています:ブール演算子を使用したインジケータ制約

私が何かしたい:

c1: a AND NOT(b)-> i1 - 100 v1 = 0 
c2: b AND NOT(a)-> i1 - 120 v1 = 0 
c3: a AND b -> i1 - 80 v1 =0 

をしかし、そのような事のANS ANDまたはNOTはLPフォーマットではありません(私はCPXインタフェース上でそれを行うことができればさえわからないが、私はしようとしていますそれを避けるため)。

私が見つけた唯一の回避策をやっている:私は別のプログラムで、このLPを生成するつもりですが、これはCPLEXを遅くないので

ca: a_not_b = 1 <-> a - b = 1 
cb: b_not_a = 1 <-> a - b = -1 
cab: a_and_b = 1 <-> a + b = 2 
c1: a_not_b-> i1 - 100 v1 = 0 
c2: b_not_a-> i1 - 120 v1 = 0 
c3: a_and_b = 1-> i1 - 80 v1 =0 

私は、これを有するOKでしょうか?これを行うより良い方法はありますか?

ありがとうございました

答えて

2

あなたはかなり正しいです。 LPとMILPアプローチは、これらの種類の論理的制約を直接的には許容しない。むしろ、通常、モデルに補助変数を作成して、それらの条件を取得する必要があります。多くの場合、それらはブール値または0/1の整数変数になります。アート& MILPモデルを書く技術の大部分は、LPおよびMILPモデルのかなり制限的な「言語」でこれらの条件を書き直す良い方法を見いだしています。これは幾分興味深い精神的な体操につながることができます!これは、CPLEXだけでなく、MILPアプローチの限界であることに注意してください。これらの論理的関係をサポートするモデリング言語は、ほとんどが、補助バイナリ/整数変数を使用して、これらの同じモデリング手法のまわりで構文的砂糖を提供するだけです。

MILPソルバーは、何百万もの変数と制約を伴う非常に大きな問題を処理できます。それは基本的な数学的構造と前提のためです。制約プログラミングのような技術は、論理的な関係や他の関係の直接的なモデリングを可能にしますが、通常、より小さな問題のインスタンスに限られています。

これがCPLEX(または他のソルバー)の速度を遅くするかどうかについては、答えはおそらくはいです。しかし、MILPソルバを使用している場合は、代替案がないかもしれません。間違った問題より正しい問題を解決する方が良いでしょう。

関連する問題