如果给予更多限制,Ortools/gurobi 会运行得更快吗?
Posted
技术标签:
【中文标题】如果给予更多限制,Ortools/gurobi 会运行得更快吗?【英文标题】:Will Ortools/gurobi runs faster if given more constraints? 【发布时间】:2020-07-28 03:31:05 【问题描述】:您好,我正在尝试使用 ortools 或 gurobi 解决操作问题。我想知道我是否提供了一些明确的约束,比如变量应该落在 [a,b] 中,这会加快运行速度还是让它比以前更复杂?
【问题讨论】:
【参考方案1】:在混合整数优化中,如果它们切割不满足可积性约束的线性解,通常建议添加额外的约束。这些mixed-integer cuts 旨在使最佳线性解决方案更接近最佳整数解决方案,并且有时可以产生显着的加速。像 gurobi 这样的商业求解器会自动生成其中一些削减。
另外,商业求解器很可能会忽略您添加的冗余约束,如果它们没有帮助的话。所以通常你不会失去任何性能。
所以通常添加这些类型的约束是个好主意。
请注意,有时更改问题也会更改分支和切割顺序。因此,您之前可能很幸运并且快速获得了整数解决方案,并且由于其他分支,新解决方案需要更长的时间。因此,在解决 MIP 时,您有时会看到违反直觉的运行时行为。
【讨论】:
【参考方案2】:减少域很可能会有所帮助。 添加更多约束可能会有所帮助。这取决于它们的复杂性和数量。
当您说 or-tools 时,您指的是什么?
【讨论】:
非常感谢!我一开始就尝试了 MIP 求解器,但似乎对 10000 个变量的问题没有可行的解决方案。但是当我切换到 CP-SAT 并添加上述约束时,它确实有一个最佳解决方案,并且运行速度比以前快得多。以上是关于如果给予更多限制,Ortools/gurobi 会运行得更快吗?的主要内容,如果未能解决你的问题,请参考以下文章
如果存在 2 个或更多相等的结果,则将 select2 建议限制为 1