使用LP文件格式的CPLEX:使用布尔运算符的指示符约束

时间:2016-07-07 07:27:26

标签: optimization mathematical-optimization linear-programming cplex integer-programming

我是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

但LP格式中没有这样的问题ANDNOT(我甚至不确定我是否可以在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的速度吗?有没有更好的方法呢?

由于

1 个答案:

答案 0 :(得分:2)

你非常正确。 LP和MILP方法不直接允许这些类型的逻辑约束。相反,您通常需要在模型中创建可用于捕获这些条件的辅助变量。在许多情况下,这些将是布尔值或0/1整数变量。艺术的很大一部分&amp;编写MILP模型的工艺正在找到用相当严格的语言重写这些条件的好方法。 LP和MILP模型。这可能会导致一些相当有趣的心理体操!请注意,这是MILP方法的限制,而不仅仅是CPLEX。支持这些逻辑关系的建模语言大多只是为这些相同的建模技术提供辅助二进制/整数变量的语法糖。

MILP求解器可以处理数百万个变量和约束的非常大的问题;但这是因为潜在的数学结构和假设。约束编程等技术允许对逻辑关系和其他关系进行直接建模,但通常仅限于更小的问题实例。

至于这是否会减慢CPLEX(或任何其他解算器)的速度,答案可能是肯定的。但是,如果您使用MILP求解器,则可能没有其他选择 - 解决正确的问题比错误解决问题更好。