我是 gurobipy 的初学者。我想添加一个反向指标约束。
指标约束只不过取决于约束是否成立的二元变量。
在 gurobipy 中,这写为
model.addConstr((x == 1) >> (y + z <= 5))
其中 x 是二进制变量,y 和 z 是整数变量。该语句表示,如果 x 为 True,则约束 y+z
但我想要有一个像这样的反向约束。
如果 y+z
所以颠倒的语句会引发错误。
model.addConstr((y + z <= 5) >> (x == 1))
有什么想法如何在 gurobipy 中重写这样的条件约束吗?!
其含义
y+z ≤ 5 ⇒ x = 1
可以重写为:
x = 0 ⇒ y+z ≥ 6
这可以直接实现为指标约束。
这是基于命题逻辑的。这称为转置:
A ⇒ B
⇔
not B ⇒ not A
所以理论上我们有
y+z ≤ 5 ⇒ x = 1
⇔
x = 0 ⇒ y+z > 5
如果 x 和 y 是整数,我们可以说x = 0 ⇒ y+z ≥ 6
如果它们是连续变量,你可以这样做:x = 0 ⇒ y+z ≥ 5.0001
(实际上我会这样做:x = 0 ⇒ y+z ≥ 5
并让事情变得模棱两可y+z = 5
).
这是使用指标约束时的一种标准技巧。似乎并不是每个人都意识到或欣赏这一点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)