线性编程:逻辑条件

时间:2016-05-20 18:44:25

标签: linear-programming

我在线性编程中编写约束时遇到问题。 我有一个布尔变量c,只有当另一个变量(比如说x)是(例如)5时,该变量必须为1。

x是非负整数。

我做了:

c< = x / 5

c< = 5 / x

不幸的是,通过这种方式,模型变得非线性。 有没有办法以线性方式表达这种情况?

谢谢。

2 个答案:

答案 0 :(得分:0)

通常类似于:

5 - M(1-c) <= x <= 5 + M(1-c)
5.001 - Mc - Md <= x <= 4.999 + Mc + M(1-d)
c,d in {0,1}
x in [-M,M]

在实践中,我们通常可以稍微简化一下。

答案 1 :(得分:-1)

如果你有一个布尔变量,那就不是LP。它是整数编程。

但是如果你只有一个布尔变量C,你可以解决两个LP问题:使用C=1C=0,然后比较其解决方案更好。我会建议。

最后,这对条件

C <= X / 5
C <= 5 / X
如果C

X≠5施加了非常奇怪的约束。