Optimization 分支定界算法中无望分支的早期确定

Optimization 分支定界算法中无望分支的早期确定,optimization,branching-and-merging,graph-traversal,Optimization,Branching And Merging,Graph Traversal,我必须设计一个分枝定界算法,每次都要解决笛卡尔平面上的图的最优游程。我得到的提示是,在运行时早期识别无望的分支将合成一个运行速度“快一百倍”的程序。我的想法是假设连接到起始/结束节点的最短边将是巡更中的第一条边或最后一条边,但细菱形图形证明了这一点。有没有人对如何消除这些毫无希望的分支有什么想法,或者有人提到过这一点 基本上,有没有更好的方法来分支到解的子集,而不仅仅是按字典顺序,例如,第一个分支包括并排除边a-b,第二个分支包括并排除分支a-c最近邻是一个简单的算法。分支和边界只是一个优化循环

我必须设计一个分枝定界算法,每次都要解决笛卡尔平面上的图的最优游程。我得到的提示是,在运行时早期识别无望的分支将合成一个运行速度“快一百倍”的程序。我的想法是假设连接到起始/结束节点的最短边将是巡更中的第一条边或最后一条边,但细菱形图形证明了这一点。有没有人对如何消除这些毫无希望的分支有什么想法,或者有人提到过这一点


基本上,有没有更好的方法来分支到解的子集,而不仅仅是按字典顺序,例如,第一个分支包括并排除边a-b,第二个分支包括并排除分支a-c

最近邻是一个简单的算法。分支和边界只是一个优化循环,此外,您还需要一个子问题求解器。我认为最近邻也是一种分支定界算法。相反,我将研究单纯形算法。这是一个线性规划算法。同时提出了求解tsp问题的割平面算法

因此,在分支定界算法中的某个地方,您可以查看可能要去的地方,然后以某种方式跟踪这些地方,以便稍后执行

为了提高效率,您可以做以下几件事:

  • 写一个更好的计算器。换句话说,提出一种更准确地确定边界的算法。这将减少花费在结果不佳的路径上的时间
  • 与其使用堆栈来跟踪要做的事情,不如使用队列。不要使用队列,而是使用按边界排序的优先级队列(堆),例如,看起来最好的东西放在堆的顶部,看起来不好的东西放在底部

  • 谢谢你的回复!我肯定会在我的启发式实现中使用它,但是最近邻并不能保证每次都有一个最优的解决方案,这正是我当前实现所需要的。是的。寻找单纯形算法和线性规划。割平面算法。所有这些选项是不同的还是可以结合使用?割平面是一种线性规划算法,也是单纯形算法。我不确定是否可以在分支和边界的约束下协调这两种线性规划算法。