线性规划:在布尔变量中描述逻辑表达式

时间:2014-08-07 11:27:31

标签: linear-programming

我有一个混合整数线性程序(MIP或MILP)。 最后我想要一个线性程序的布尔变量,它具有以下属性。

我有两个变量:

boolean b.
real x, with x being 0 or larger.

我想要实现的目标是:

b == false if x == 0.
b == true if  x >  0.

我找到了一种方法,通过以下方式描述x是否在特定范围内(例如2到3之间):

2*b <= x
x   <= 3*b

上述测试公式的问题是,如果x在给定范围内,则b为真;如果在该范围之外,则为假。

如果x == 0,是否有人知道将布尔变量设置为false的方法,如果x大于0,是否知道设置为true?

2 个答案:

答案 0 :(得分:2)

如果Ux的上限,那么

if x > 0 ==> b == 1

可以作为

x <= U*b

第二部分(x == 0 => b == 0)需要修改为

x < epsilon ==> b == 0

可以作为

b <= 1 + x - epsilon

其中epsilon是一个小数字。除了良好实践之外,这是必要的,因为求解器不适用于有理算术(although there are some research efforts to make them do so),但具有一定的精度阈值,因此10e-12等量被视为零。

我希望这有帮助!

答案 1 :(得分:-1)

你可以使用signum函数http://en.wikipedia.org/wiki/Signum_function取绝对值并否定它。由于你没有命名特定的编程语言,所以我保持一般。