Java中TSP的分支和绑定实现

时间:2011-01-17 18:27:24

标签: java algorithm traveling-salesman branch-and-bound

我想知道是否有针对TSP的分支和绑定算法的有用Java实现,或者通常是包含TSP的BnB的OR框架。

感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

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,因为涉及的搜索空间很大;你可以用模拟退火等近似技术做得更好。

答案 1 :(得分:0)

虽然我们都知道"Java and Javascript are similar like Car and Carpet are similar",但我建议您查看SimplexJS这是一个用Javascript编写的简单线性和MIP求解器。由于它很小(少于400个LOC),因此可以很容易地转换为Java。该项目的作者也有一个很好的例子Solving TSPs with Integer Programming

答案 2 :(得分:0)

OptaPlanner(开源,Java)有一个Branch and Bound实现。 See the docs section about BaB specifically.算法的实施从this class开始,但很难遵循。

它还有一个TSP示例:虽然默认情况下没有配置BaB,但通过这样调整tspSolverConfig.xml可以做到这一点很简单:

<solver>
  ...
  <exhaustiveSearch>
    <exhaustiveSearchType>BRANCH_AND_BOUND</exhaustiveSearchType>
  </exhaustiveSearch>
</solver>

还有额外的可选参数来控制节点排序,节点探索方式等。

相关问题