【问题标题】:Branch And Bound Implementation for TSP in JavaJava中TSP的分支定界实现
【发布时间】:2011-06-10 15:08:22
【问题描述】:

我想知道是否有用于 TSP 的分支定界算法的有用 Java 实现,或者一般来说,是否有一个包含用于 TSP 的 BnB 的 OR 框架。

感谢您的帮助!

马可

【问题讨论】:

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


    【解决方案1】:

    OptaPlanner(开源,Java)具有分支定界实现。 See the docs section about BaB specifically. 算法的实现是从this class 开始的,但是很难跟上。

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

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

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

    【讨论】:

      【解决方案2】:

      我找到了这个 pdf。它非常有帮助,并且有详细的示例和 java 实现分支和绑定对于 TSP Here is the File Link

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-08-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多