如何在我们的 MIP 问题中使用 or-tools 设置像 y = max(x1,x2,x3) 这样的等式约束?
Posted
技术标签:
【中文标题】如何在我们的 MIP 问题中使用 or-tools 设置像 y = max(x1,x2,x3) 这样的等式约束?【英文标题】:How to set an equality constraint like y = max(x1,x2,x3) in our MIP problem with or-tools? 【发布时间】:2019-05-22 18:29:23 【问题描述】:我使用 or-tools 来解决 MIP 问题,我想添加一个变量 y 等于其他变量 Xi 中的最大值的约束。例如:y = max(x1,x2,x3)。 or-tools 中是否有任何 max 函数可以做到这一点?
我可以添加 4 个约束,例如:
y >= x1
y >= x2
y >= x3
y <= MAX # where MAX is the upper bound of y.
但可能会出现错误的情况
x3 >= y.
【问题讨论】:
你的意思是max([x1,x2,x3])
?
是的!这就是我的意思。
这不起作用。 Python 解释 max() 并且不将其传递给求解器。
【参考方案1】:
使用 python 的 max() 运算符不起作用。 你应该看看文献
见:https://www.leandro-coelho.com/how-to-linearize-max-min-and-abs-functions/
【讨论】:
很好的答案。现在我将如何考虑超过 2 个变量中的 max()?【参考方案2】:只要把它放到一些简单的结构中,比如:
-元组max((x1,x2,x3))
-列表max([x1,x2,x3])
-或设置max(x1,x2,x3)
最后一种情况是最好的,因为在检查差异之前消除重复。
【讨论】:
我不知道我们可以简单地使用 max()。我认为图书馆有一个特殊的功能。例如,Gurobi 有自己的函数 grb.max_()。我会试试这个!谢谢! 我尝试并得到以下 ValueError:线性求解器不支持运算符“”。你知道为什么吗? 因为 python 将 max() 解释为一组函数。它不会将其传递给求解器。以上是关于如何在我们的 MIP 问题中使用 or-tools 设置像 y = max(x1,x2,x3) 这样的等式约束?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 SCIP 求解器获得 Google OR-Tools 和 Python 中的相对 MIP 差距?
OR-Tools MIP Solver - 根据 int 定义目标,而不是 IntVar