分支定界算法理解(摘抄)

解释一

分支定界算法(Branch and bound,简称为 BB、B&B, or BnB)始终围绕着一颗搜索树进行的。

我们将原问题看作搜索树的根节点。从这里出发,分支的含义就是将大的问题分割成小的问题。大问题可以看成是搜索树的父节点,那么从大问题分割出来的小问题就是父节点的子节点了。分支的过程就是不断给树增加子节点的过程。而定界就是在分支的过程中检查子问题的上下界,如果子问题不能产生比当前最优解还要优的解,那么砍掉这一支。直到所有子问题都不能产生一个更优的解时,算法结束。
分支定界算法理解(摘抄)_第1张图片
原文链接:https://blog.csdn.net/cc098818/article/details/100550806

 解释二

分枝定界是一种深度优先的树搜索算法。通过对树进行剪枝,可以缩小了搜索范围,大大减小计算量。但同时又不会遗漏最优解。

回环检测的最优位姿,一定出现在叶子节点。什么情况下不能再分了呢?——到达了搜索框的最细分辨率则不能再分,也就是在暴力搜索中,那些所有的交点的集合构成了树的叶子节点。

分支定界算法理解(摘抄)_第2张图片

来看这张图假设我们需要去计算检测匹配的点为如图所示16个。
则我们第一层搜索精度最低,只列举其中两个,并优先考虑靠左(优先考虑可能性最高的)。
对其继续分层,将其精度提高一倍,又可以列举出两个,并优先考虑靠左。
这样直至最底层,计算出该情况下的平凡得分,最左的底层有两个值A和B,我们求出最大值,并将其视为best_score。
然后我们返回上一层还未来得及展开的C,计算C的贪心得分并让它与best_score比较,若best_score依旧最大,则不再考虑C,即不对其进行分层讨论。
若C的贪心得分比best_score更大,则对其进行分层,计算D和E的值,我们假设D值大于E,则将D与best_score对比
若D最大,则将D视为best_score,否则继续返回搜索。

剪枝的原则是:如果子树的父节点的贪心score小于之前已经待定的best_score,那么直接将这个节点的子树全部减掉。best_score首次搜索至叶子节点之前,是设定的一个初始值(比如之前设置的0.9)。当第一次搜索到叶子节点之后,若叶子节点的得分高于best_score,best_score会被更新。

解释三

分枝:树搜索,扩展子节点的策略。

定界:每个节点的得分大于其所有子树叶子的得分,是其子树的“上界”

伪代码的流程

分支定界算法理解(摘抄)_第3张图片

(1)先把A(1.5)分为 B(0.9) 和 C(0.8)
(2)先瞅准B(0.9),将其分为D(0.7)和E(0.2)
(3)再瞅准D(0.7),将其分为H(0.5)和I(0.4)
(4)得到了最大的叶子节点H(0.5),得到best(0.5)
(5)返回上一层看E(0.2),发现E(0.2) < best(0.5),直接将E及其子树JK剪枝,不再进行循环
(6)继续往上一层返回,看C(0.8),发现best(0.5) (7)将C(0.8)分为F(0.4)和G(0.7)
(8)瞅准F(0.4),发现其小于best(0.5),则将F及其子树LM进行剪枝
(9)再看G(0.7),发现其大于best(0.5),将G(0.7)继续往下分
(10)将G(0.7)分为N(0.6)和O(0.1)
(11)发现N(0.6)大于best(0.5),则得到best(0.6)
(12)不像第(5)步,现在没有往上层返回的机会了。分枝定界结束
(13)最优位姿:best(0.6),即N(0.6)
————————————————
原文链接:https://blog.csdn.net/weixin_44684139/article/details/105690084

解释四

相当于“分田”,在空间坐标上将搜索空间划分为四个更小的区域,

分支定界算法理解(摘抄)_第4张图片

用于SLAM的cartographer回环检测中,scan与全局map进行匹配,为了找到此scan的最佳位姿以便于与地图进行更好的匹配,所以采用计算量较小的分支定界算法。

【cartographer】(二)分支定界_陋室逢雨的博客-CSDN博客

解释五

暴力搜索

暴力求解是有庞大的计算量的。因为你要把搜索框(search window)中的位姿以分辨率为步长全部遍历一遍。因此为了减少暴力搜索的巨大计算量,2016年有人提出“分支定界算法”,大大减少计算量。

你可能感兴趣的:(激光SLAM概念理解,算法)