我在线性编程中编写约束时遇到问题。 我有一个布尔变量c,只有当另一个变量(比如说x)是(例如)5时,该变量必须为1。
x是非负整数。
我做了:
c< = x / 5
c< = 5 / x
不幸的是,通过这种方式,模型变得非线性。 有没有办法以线性方式表达这种情况?
谢谢。
答案 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=1
和C=0
,然后比较其解决方案更好。我会建议。
最后,这对条件
C <= X / 5
C <= 5 / X
如果C
,对X≠5
施加了非常奇怪的约束。