Python gurobipy中的反向指示符约束
我是gurobipy的初学者。我想添加一个反向指示器约束 指示符约束只不过取决于二进制变量,约束是否有效。 在gurobipy中,这写为Python gurobipy中的反向指示符约束,python,linear-programming,gurobi,Python,Linear Programming,Gurobi,我是gurobipy的初学者。我想添加一个反向指示器约束 指示符约束只不过取决于二进制变量,约束是否有效。 在gurobipy中,这写为 model.addConstr((x == 1) >> (y + z <= 5)) model.addConstr((x==1)>>(y+z y+z ≤ 5 ⇒ x = 1 可以重写为: x = 0 ⇒ y+z ≥ 6 这可以作为指标约束直接实现 这是基于命题逻辑的。这被称为换位: A ⇒ B ⇔ not B ⇒ not A
model.addConstr((x == 1) >> (y + z <= 5))
model.addConstr((x==1)>>(y+z
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时保持事物的模糊性
这是使用指示符约束时的一种标准技巧。似乎不是每个人都知道或欣赏这一点。指示符语法是
binary expression >> linear constraint
因此,您的约束无效。您需要一个不同的模型,在y+z时将x强制为1≤ 5.假设y,z是非负整数,尝试6x+y+z≥ 6.我认为最好的方法是使用大M方法
让我们重新考虑您试图建模的问题
If y+z <= 5 then x == 1
请注意,如果y+z-5=0
我希望这有帮助这只是不等式的倒数。我试过了。但在记忆方面不起作用。我所做的是正确的。我认为你实现它是错误的。
If y+z <= 5 then x == 1
y + z - 5 <= M(1-x)