如何解决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 中的不等式约束?
解决方法
我假设变量 x
和 y
是连续变量。 addGenConstrOr
用于二进制变量,因此不能立即适用。
实际上,您可以将 x ≠ y
写为:
x ≤ y - ε OR x ≥ y + ε
有多种实现方式:(1) 使用二元变量,(2) 使用指标约束,以及 (3) 使用 SOS1 集。由于您没有提供有关 x
和 y
边界的信息,我们假设它们不可用。在这种情况下,指标约束是一个不错的选择:
δ = 0 => x ≤ y - ε
δ = 1 => x ≥ y + ε
δ ∈ {0,1}
见:https://www.gurobi.com/documentation/9.1/refman/py_model_agc_indicator.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。