如果整数编程中的条件



我正在解决条件的整数编程问题

如果a = 0,则b = 0 else b = 1

a是整数时b是二进制的

我研究了与此相似的先前问题,但找不到解决方案。请帮助在上述条件下定义整数编程中的约束方程。

第一个约束很容易:a = 0→B = 0可以写为A≥b。第二个约束(A≥ 1→ b = 1)更为复杂。如果a≤m的m相对较小,然后您可以将其写为m⋅B≥A。否则,您将需要使用称为指示限制的求解器功能。

使用这两个约束:

a<=bM
b<=aM

其中m是一个大数字(m> a)。当a = 0时,第一个约束是冗余的,第二个约束将施加b = 0。如果a> 0,则第二个约束是多余的,但是第一个迫使B的值1(如果M足够大)。

最新更新