我正在用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中的不等式约束
我假设变量
x
和y
是连续变量addGenConstrOr
用于二进制变量,因此不立即适用实际上,您可以将
x ≠ y
写为:有不同的方法来实现这一点:(1)使用二进制变量,(2)使用指标约束,(3)使用SOS1集。由于您没有提供关于
x
和y
的边界的信息,因此我们假设它们不可用。在这种情况下,指标约束是一个很好的选择:见:https://www.gurobi.com/documentation/9.1/refman/py_model_agc_indicator.html
相关问题 更多 >
编程相关推荐