TSP的Java分支定界实现

TSP的Java分支定界实现,java,algorithm,traveling-salesman,branch-and-bound,Java,Algorithm,Traveling Salesman,Branch And Bound,我想知道是否有一个用于TSP的分支定界算法的有用Java实现,或者通常是一个包含用于TSP的BnB的or框架 谢谢你的帮助 MarcoBnB通常与完整的子问题解决者交互: 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 backt

我想知道是否有一个用于TSP的分支定界算法的有用Java实现,或者通常是一个包含用于TSP的BnB的or框架

谢谢你的帮助


Marco

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\u cost\u soln\u so\u far
设置的界限,您的子问题搜索就会回溯。如果子问题搜索确实找到了更好的解决方案,
best_cost_soln_so_迄今为止
将更新,搜索将从停止的地方继续,寻找更好的解决方案。它很容易实现


也就是说,我非常怀疑您是否希望使用完整搜索解决大型TSP,因为其中涉及巨大的搜索空间;使用模拟退火等近似技术可能会做得更好。

尽管我们都知道这一点,但我还是建议您看看哪一种是用Javascript编写的简单线性和MIP解算器。因为它很小(少于400个LOC),所以可以很容易地转换成Java。这个项目的作者还有一个很好的例子。

我找到了这个pdf。它非常有用,并提供了详细的示例和TSP分支和绑定的java实现 OptaPlanner(开源,Java)有一个分支绑定实现。算法的实现从开始,但很难遵循

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

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

...
分支_和_界
有额外的可选参数来控制节点排序、节点探索方式等