在分支定界算法中尽早确定无望分支

时间:2012-12-03 00:39:16

标签: optimization branching-and-merging graph-traversal

我必须设计一个分支定界算法,每次都能解决笛卡尔平面上图的最佳导览问题。我得到了一个暗示,即在运行时早期识别无望分支将复合成一个运行“快一百倍”的程序。我有一个想法,即假设连接到起始/结束节点的最短边缘将是巡视中的第一个或最后一个边缘,但是细菱形图形证明不是这样。有没有人有关于如何消除这些无望分支的想法或者谈论这个问题的参考?

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

2 个答案:

答案 0 :(得分:1)

最近邻是一种简单的算法。 Branch-and-Bound只是一个优化循环,另外你需要一个子问题求解器。我认为最近邻居也是一种分支定界算法。相反,我会研究单纯形算法。这是一种线性编程算法。还有切面算法来解决tsp。

答案 1 :(得分:1)

因此,在您的分支定界算法中,您可以查看可能的位置,然后以某种方式跟踪它们以便稍后执行。

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

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