分支限界法

基本思想

分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。

在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有儿子结点(PS:分支)。在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃(PS:限界),其余儿子结点被加入活结点表中。

此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。这个过程一直持续到找到所需的解或活结点表为空时为止。

从活结点表中选择下一扩展结点的不同方式导致不同的分支限界法。最常见的有队列式分支限界法和优先队列式分支限界法。

在寻求问题的最优解时,可以用剪枝函数加速搜索。该函数给出每个可行结点相应的子树可能获得的最大价值的上界。如果这个上界不会比当前最优值更大,则说明相应的子树中不含问题的最优解,因而可以剪去。另一方面,也可以将上界函数确定的每个结点的上界值作为优先级,以该优先级的非增序抽取当前扩展结点,这种策略有时可以更迅速地找到最优解

基本步骤

 
队列式(FIFO)分支限界法

按照队列先进先出的原则选取下一结点作为扩展结点

数据结构:队列

叶结点不入队:由于叶结点不会被进一步扩展,因此不必加入到活结点队列中,必要时更新最优解

算法终止:活结点队列为空

同层结束标志-1:当队列元素值为-1时,表示队列到达解空间树中同一层结点的尾部。同层结束标志在开始下一层的处理之前入队列

image

优先队列式分支限界法

按照优先队列中规定的优先级选取优先级最高的结点作为当前扩展结点

数据结构:堆(最大优先队列,使用最大堆,体现最大效益优先;最小优先队列,使用最小堆,体现最小费用优先)

叶结点入队:参与优先队列中结点优先级的比较

算法终止:存储活结点的堆为空,或者叶结点成为当前扩展结点(使用上界函数确定的每个结点的上界值作为优先级时,PS:预估计,这种情况在实际使用时还是判断一下能不能终止吧,不太完全肯定…

image

分支限界法与回溯法

相同点:

都是在问题的解空间树中搜索问题解的算法

不同点:

1> 求解目标:回溯法的求解目标是找出解空间树中满足约束条件的所有解,而分支限界法的求解目标是找出满足约束条件的一个解,或是在满足约束条件的解中找出在某种意义下的最优解。PS:这差不多嘛…

2> 搜索方式:回溯法以深度优先方式搜索解空间树,而分支限界法则以广度优先或以最小耗费(最大效益)优先方式搜索解空间树。

posted @ 2015-07-12 12:37  枯桃  阅读(1015)  评论(0编辑  收藏  举报