我有一个整数线性优化问题,我对可行的好解决方案感兴趣。据我所知,例如Gnu线性编程工具包只返回最优解(假设存在)。 这需要无休止的时间,并不是我正在寻找的东西:我会对任何好的解决方案感到满意,而不仅仅是最佳解决方案。
所以LP-Solver就是这样的经过一段时间后停止并返回他到目前为止找到的最佳解决方案,就可以完成这项工作。
有没有这样的软件?如果该软件是开源的,或者至少像啤酒一样免费,那就太好了。
或者:有没有其他方法可以加速整数LP问题? 这是正确的地方吗?
答案 0 :(得分:8)
许多求解器提供时间限制参数;如果设置了时间限制参数,它们将在达到时间限制后停止。如果找到了整数可行解,那么它将返回找到的最佳可行解。
正如您所知,整数编程是NP难的,并且有一个真正的艺术,即快速找到最佳解决方案以及良好可行的解决方案。要比较不同的求解器,请参见Hans Mittelmann教授的Benchmarks for Optimization Software。 MILP基准 - 特别是MIPLIB2010和可行性基准应该是最相关的。
除了选择一个好的求解器之外,还有许多事情可以用来改善求解时间,包括调整求解器的参数和模型重构。研究和工业领域的许多人 - 包括我自己 - 都在我们的职业生涯中致力于改善MIP模型的解决时间,包括一般模型和特定模型。
如果您是学术用户,请注意CPLEX和Gurobi等顶级商业系统可免费用于学术用途。有关详细信息,请参阅相应的网站。
最后,您可能需要查看OR-Exchange,这是Stack Overflow的姊妹网站,专注于运营研究领域。
(免责声明:我目前在Gurobi Optimization工作,之前曾在提供CPLEX的ILOG工作过。)
答案 1 :(得分:4)
如果您想快速获得可行的整数解决方案,如果您不需要最佳解决方案,可以尝试
增加相对或绝对差距。通常求解器相对间隙的间隙为0.0001%。这意味着求解器将继续搜索MIP解决方案,直到MIP解决方案距离最佳解决方案不超过0.0001%。增加这个gab到例如1%。,所以你得到了很好的解决方案,但求解者不会花费很长时间来证明最优性。
尝试有关 MIP启发式的求解器参数的不同值。
CPLEX和GUROBI有控制参数, MIP强调。这意味着求解器将更加强调寻找可行的解决方案或证明最优性。将重点放在可行的MIP解决方案上。
CPLEX,Gurobi,MOPS或GLPK等大多数求解器都有差距和启发式设置。 MIP强调可以设置 - 据我所知 - 仅限于CPLEX和Gurobi。
答案 2 :(得分:1)
解决ILP的常用方法是分支绑定。这利用了许多sub-LP(没有-I)的解决方案。最终的最佳结果是所有sub-LP中最好的。至少找到一种解决方案,你可以随时停止,并且会有最好的解决方案。
可以做到的一个软件包就是免费的lpsolve。查看set_timeout以获得时间限制,当它是ILP时,solve函数可以在SUPOPTIMAL中返回best_so_far值。
答案 3 :(得分:1)
据我所知,CPLEX可以。它可以返回包含搜索中原始可行解决方案的解决方案池,如果您将搜索重点放在可行性而非最优性上,则可以生成更多可行的解决方案。最后,您可以导出池。您可以使用游泳池进行热门启动,因此它非常适合您。 CPlex现在至少在我的国家免费,因为您可以注册成为研究员。
答案 4 :(得分:0)
你能考虑一下Microsoft Solver Foundation吗?唯一的限制是您喜欢的技术堆栈,在这里您应该使用,如您所知,Microsoft技术:C#,vb.net等。以下是如何将它与Excel一起使用的示例:http://channel9.msdn.com/posts/Modeling-with-Solver-Foundation-30。
关于您的问题,如果您设置效率(例如85%或0.85),则可能没有完全优化的解决方案。在结果中,您可以看到这种限制的所有可能解决方案。