Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python gurobipy中的反向指示符约束_Python_Linear Programming_Gurobi - Fatal编程技术网

Python 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

我是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 
所以理论上我们有

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)