微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决Python 中的 Gurobi OR 约束和不等式约束

我正在使用 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。