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

Gurobi OR Constraint and Inequality Constraint in Python

我正在使用 Gurobi 实现 OR 逻辑。具体来说,我有两个决策变量 $x$ 和 $y$,我想要 $x \neq y$。然而,Gurobi 并不支持不平等现象。所以我尝试使用 OR 逻辑,例如 $x >= y + \epsilon OR 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中实现不等式约束?

我假设变量 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