簡體   English   中英

使用LP文件格式的CPLEX:具有布爾運算符的指標約束

[英]CPLEX using LP file format: indicator constraints with boolean operators

我對CPLEX完全陌生,並且距離MIP專家還很遠,但是我正在嘗試解決此技術(CPLEX 12.4)的問題。 我決定在.lp文件中創建MIP模型,並將其提供給CPLEx,這樣我可以有很多輸入並測試不同的求解器等。但是我發現有關指標約束的一件事有些問題。

我想要類似的東西:

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 ANDNOT在LP格式(我甚至不知道我是否能做到這一點的CPX接口上,但我想,以避免它)。

我發現的唯一解決方法是:

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

我對此感到滿意,因為我將使用另一個程序生成此LP,但這會減慢CPLEX的速度嗎? 有更好的方法嗎?

謝謝

你說得很對。 LP和MILP方法不能直接考慮這些邏輯約束。 而是通常需要在模型中創建可用於捕獲這些條件的輔助變量。 在許多情況下,它們將是布爾值或0/1整數變量。 編寫MILP模型的大部分工藝是在用限制性很強的LP和MILP模型的“語言”來尋找重寫這些條件的好方法。 這可以導致一些相當有趣的精神體操! 請注意,這是MILP方法的局限性,而不僅僅是CPLEX。 支持那些邏輯關系的建模語言大多只是在具有輔助二進制/整數變量的這些相同建模技術周圍提供語法糖。

MILP求解器可以處理具有數百萬個變量和約束的非常大的問題。 但這是由於潛在的數學結構和假設。 像約束編程這樣的技術確實允許對邏輯和其他關系進行這種直接建模,但通常僅限於小得多的問題實例。

關於這是否會減慢CPLEX(或任何其他求解器)的速度,答案可能是肯定的。 但是,如果使用的是MILP求解器,則別無選擇-解決正確的問題比解決錯誤的問題更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM