3

A OR B を実装するための制約を表現した ILP 問題があります。ここで、A と B は論理 AND の結果です (A = A1 AND A2、B = B1 AND B2 AND B3 としましょう)。私の問題のこの時点で、A と B の間の 1 は 1 に等しいと言われます。A と B は両方ともバイナリ変数です。

If-Then-Else を使用して、次のアサーションを表現したいと思います。

if (A == true)
   /* Choose one between C and D */
   C_OR_D >= C;
   C_OR_D >= D;
   C_OR_D <= C + D;
   C_OR_D = 1; 
else                                     /* or if (B == true), that's the same */
   /* Choose one between E and F */
   E_OR_F >= E;
   E_OR_F >= F;
   E_OR_F <= E + F;
   E_OR_F = 1; 

次のような単純なIf-Conditionの書き方を知っています

/* if (x == true) then y = true */
y >= x;

しかし、「複雑な」ifを表現するために一連の制約を記述する方法がわかりません。

LPSolveでこれを解決する方法を知っている人はいますか?

4

2 に答える 2

3

最初の部分に答えるには:

AND は次のようにモデル化できます。

A >= A1 + A2 -1
A <= A1
A <= A2

OR は次のようにモデル化できます。

B >= B1
B >= B2
B <= B1 + B2

if-else 制約をモデル化するには、「ビッグ M」手法を使用できます。

M を十分に大きな数とします。

不等式の片側に M を追加することで、不等式を「無効にする」ことができます。このとき、不等式は変数の値に関係なく成り立ちます。

例えば

if (A == 1)
   C_OR_D >= C;
else
   E_OR_F >= E;

としてモデル化できます

(1-A) * M + C_OR_D >= C
A * M + E_OR_F >= E
于 2014-07-19T19:45:40.950 に答える