我正在玩GLPK提供的travelling salesman example,并试图了解我可以合理期望解决的问题大小。我设法解决了50个节点图,但100个节点似乎没有在合理的时间范围内收敛(现代硬件上30分钟左右)。
GLPK有许多MIP求解器选项。我尝试了各种组合,但我一点也不清楚哪些选项可能会有所帮助。 This page has some discussion但有点过时,建议相当笼统。
期望GLPK在实际时间范围内(例如,不到4小时)解决100个节点或更高的巡回演出是否合理?什么时候问题规模变得棘手? many command-line options中的任何一个可能有帮助吗?
答案 0 :(得分:1)
许多命令行选项中的任何一个都可能有用吗?
tspsol
命令行应用程序(基于GLPK C库)或glptsp.h中的C API是为解决TSP而量身定制的。
期望GLPK在实际时间范围内(例如,不到4小时)解决100个节点或更高的巡回演出是否合理?什么时候问题规模变得棘手?
我的猜测是,它也很大程度上取决于问题实例。如果您查看the C code,您会看到使用启发式方法生成初始游览。启发式工作得有多好,嗯......
我假设您知道TSP因难以解决而闻名,请参阅computational complexity。
答案 1 :(得分:1)
我能够在2秒内解决eil51,并在大约50秒内通过松弛TSP解决了rat99,然后在找到可行的解决方案之前消除子游览。做一个更好的建模将取得更多的解决方案,而不是摆弄解决方案选项。如果建模足够好,GLPK应该能够处理更大的实例。 eil51和rat99是TSPLIB上记录的实例。
我建议阅读一些关于tsp建模的资料,那里有很多文章和书籍。一个很好的起点可能是“应用整数编程”和“应用整数编程”。作者:Der-San Chen等人。