Python中的Gurobi或约束和不等式约束

2024-03-28 18:38:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Gurobi实现OR逻辑。具体来说,我有两个决策变量$x$和$y$,我想要$x\neq y$。然而,古罗比并不支持不平等。所以我尝试使用OR逻辑,比如$x>;=y+\epsilon或y>;=x+\epsilon$

我阅读了Gurobi的文档,发现它们有addGenConstrOr()函数。我试图根据示例用法model.addGenConstrOr((z, [x>=y+\epsilon, y>=x+\epsilon], "orconstr")实现它。但是,程序返回了一个错误gurobipy.Model.addGenConstrOr gurobipy.GurobiError: Invalid data in vars array。这个函数的vars数组中的数据似乎需要是二进制布尔变量。所以我的问题是如何把这个x>=y+\epsilon变成一个布尔变量,这样我就可以把它放入model.addGenConstrOr函数中?或者有没有更好的方法来实现Gurobi中的不等式约束


Tags: or函数文档gt示例用法model逻辑
1条回答
网友
1楼 · 发布于 2024-03-28 18:38:12

我假设变量xy是连续变量addGenConstrOr用于二进制变量,因此不立即适用

实际上,您可以将x ≠ y写为:

x ≤ y - ε OR x ≥ y + ε 

有不同的方法来实现这一点:(1)使用二进制变量,(2)使用指标约束,(3)使用SOS1集。由于您没有提供关于xy的边界的信息,因此我们假设它们不可用。在这种情况下,指标约束是一个很好的选择:

 δ = 0 =>  x ≤ y - ε
 δ = 1 =>  x ≥ y + ε 
 δ ∈ {0,1}

见:https://www.gurobi.com/documentation/9.1/refman/py_model_agc_indicator.html

相关问题 更多 >