【发布时间】:2011-06-10 15:08:22
【问题描述】:
我想知道是否有用于 TSP 的分支定界算法的有用 Java 实现,或者一般来说,是否有一个包含用于 TSP 的 BnB 的 OR 框架。
感谢您的帮助!
马可
【问题讨论】:
标签: java algorithm traveling-salesman branch-and-bound
我想知道是否有用于 TSP 的分支定界算法的有用 Java 实现,或者一般来说,是否有一个包含用于 TSP 的 BnB 的 OR 框架。
感谢您的帮助!
马可
【问题讨论】:
标签: java algorithm traveling-salesman branch-and-bound
OptaPlanner(开源,Java)具有分支定界实现。 See the docs section about BaB specifically. 算法的实现是从this class 开始的,但是很难跟上。
它还有一个 TSP 示例:虽然默认没有配置 BaB,但这样做很简单,通过像这样调整 tspSolverConfig.xml:
<solver>
...
<exhaustiveSearch>
<exhaustiveSearchType>BRANCH_AND_BOUND</exhaustiveSearchType>
</exhaustiveSearch>
</solver>
还有额外的可选参数来控制节点排序、节点探索方式等。
【讨论】:
我找到了这个 pdf。它非常有帮助,并且有详细的示例和 java 实现分支和绑定对于 TSP Here is the File Link
【讨论】:
虽然我们都知道"Java and Javascript are similar like Car and Carpet are similar",但我建议您查看SimplexJS,它是一个用Javascript 编写的简单线性和MIP 求解器。由于它很小(少于 400 个 LOC),它可以很容易地翻译成 Java。该项目的作者也有一个很好的例子Solving TSPs with Integer Programming。
【讨论】:
BnB 通常与 完整 子问题求解器交互:
best_cost_soln_so_far = +inf
while (better_cost_soln = search_for_soln_cheaper_than(best_cost_soln_so_far))
{
best_cost_soln_so_far = better_cost_soln
backtrack_into_search
}
也就是说,只要它正在探索的任何部分解决方案的成本超过best_cost_soln_so_far 设置的界限,您的子问题搜索就会回溯。如果子问题搜索确实找到了更好的解决方案,best_cost_soln_so_far 将被更新,并且搜索从中断处继续,寻找更好的解决方案。这很容易实现。
也就是说,我非常怀疑您是否希望使用完整搜索来处理大型 TSP,因为涉及到巨大的搜索空间;使用模拟退火等近似技术可能会做得更好。
【讨论】: