分支限界搜索
计算机术语
分支限界法是以广度优先或以最小耗费 (最大效益) 优先的方式在问题的解空间树T上搜索问题解的一种搜索方法。其求解目标是找出满足约束条件的一个解,或是在满足约束条件的解中找出某种意义下的最优解。
定义
采用广度优先产生状态空间树的结点,并使用剪枝函数的方法称为分枝限界法
“分支”是采用广度优先的策略,依次生成扩展结点的所有分支(儿子结点)
“限界”是在结点扩展过程中,计算结点的上界(或下界),边搜索边减掉搜索树的某些分支,从而提高搜索效率。
搜索策略
在当前节点(扩展节点)处,首先,生成当前节点的所有的儿子节点(分支),然后,从当前的活节点(当前节点的子节点)表中选择下一个扩展节点。
为了有效地选择下一个扩展节点,加速搜索的进程,在每一个活节点处,计算一个函数值(限界),根据函数值的大小,从当前活节点表中选择一个最有利的节点作为扩展节点,使搜索朝着解空间上有最优解的分支推进,以便尽快地找出一个最优解。
分类
从活结点表中选择下一扩展结点的不同方式导致了不同的分支限界法, 最常见的有队列式分支限界法和优先队列式分支限界法两种。
队列式(FIFO)分支限界法
按照队列先进先出(FIFO)原则选取下一个活结点为扩展结点。
起初,根结点是唯一的活结点,根结点入队。从活结点队中取出根结点后,作为当前扩展结点。对当前扩展结点,先从左到右地产生它的所有儿子,用约束条件检查,把所有满足约束函数的儿子加入活结点队列中。再从活结点表中取出队首结点(队中最先进来的结点)为当前扩展结点,……,直到找到一个解或活结点队列为空为止。
优先队列式(LC)分支限界法
按照优先队列中规定的优先级选取优先级最高的结点成为当前扩展结点。
对每一活结点计算一个优先级(某些信息的函数值)。根据这些优先级,从当前活结点表中优先选择一个优先级最高(最有利)的结点作为扩展结点,再从活结点表中下一个优先级别最高的结点为当前扩展结点,......,直到找到一个解或活结点队列为空为止。
与回溯法
相同点
都是一种在问题的解空间树 上搜索问题解的算法
不同点
回溯法:以深度优先的方式搜索解空间,其求解目标是找出解空间中满足约束条件的所有解
分支限界法:以广度优先的方式或以最小耗费优先的方式搜索解空间,其求解目标则是找出满足约束条件的一个解,或是满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。
应用举例
已知:有一批共 个集装箱要装上2艘载重量分别为 , 的轮船,其中集装箱i的重量为 。问题:是否有一个合理的装载方案可将这 个集装箱装上这2艘轮船?
解:
可证明,采用如下策略可以得到一个最优装载方案:先尽可能的将第一艘船装满,其次将剩余的集装箱装到第二艘船上。
示例代码:
最新修订时间:2022-09-15 12:06
目录
概述
定义
搜索策略
参考资料