分支界限法类似回溯法,也是在问题的解空间上搜索问题解的算法,其求解目标是找出满足约束条件的一个解(回溯是找出所有的解)或是在满足条件的解中找出最优解。
搜索策略:在扩展结点处,先生成其所有的儿子节点(分支),然后再从当前的活结点表中(根据每一活结点计算出的函数值)选择最有利的结点作为下一个扩展结点。
从活结点表中选择下一扩展结点的不同方式导致不同的分支界限法:
1、队列式(FIFO)分支界限法
2、优先队列式分支界限法
基本思想:以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。
每个活结点都只有一次机会成为扩展结点,活结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中,重复上述结点扩展过程,直至找出所需的解。
分支界限法是由"分支"策略和"限界"策略两部分组成。"分支"策略体现在对问题空间是按照广度优先策略进行搜索的;"限界"策略是为了加速搜索速度而采用启发信息剪枝的策略。
装载问题
有两艘船和需要装运的n个货箱,第一艘船的载重量是c1,第二艘船的载重量是c2,wi是货箱的质量,且w1+w2+...+wn <= c1+c2.
希望确定是否有一种可将所有n个货箱全部装船的方法。若有的话,找出该方法。
容易证明:如果一个给定装载问题有解,则采用下面的策略可得到最优装载方案。
(1)首先将第一艘轮船尽可能装满;
(2)将剩余的集装箱装上第二艘轮船
该问题就转化为第一艘船的最大装载问题