一、方法概述
1、基本思想
(1)什么事分支限界法?
在解空间树中,广度优先遍历(BFS)或最佳优先方式搜索最优解,利用部分最优解的信息,裁剪那些不能得到最优解的子树以提升搜索效率。
(BFS or 最佳优先方式搜索+剪枝)
![a2cda61add97a4fb9cdc719154fcb16f.png](https://i-blog.csdnimg.cn/blog_migrate/22dcb9ef1f9e447ff78c23fa7c14cd27.jpeg)
(2)搜索策略:
step1:在扩展节点处(当前的搜索位置,一个活结点),先生成其所有的儿子结点(分支),然后再从当前的活结点选择下一个扩展结点。
step2:为了有效的选择下一扩展结点,以加速搜索的进程,在每一活结点处,计算一个函数值(优先值),并根据这些已经计算出来的函数值,从当前活结点表中选择一个最有利的节点作为扩展结点,使搜索朝着解空间树上的最优解的分支推进,以便尽快的找出一个最优解。(关于解空间树、活结点、拓展结点在之后的文章分享)
2、与回溯法区别(回溯法之后的文章分享)
(1)求解目标不同
回溯法:找出解空间树满足约束条件的所有解
分支限界法:尽快的找出满足约束条件的一个解
(感觉有点类似于动态规划和贪心算法的差别,同样之后陆续分享)
(2)搜索方法不同
回溯法:DFS深度优先搜索
分支限界法:BFS宽度优先 or 最佳优先方法搜索
(3)对扩展结点的扩展方式不同
分支限界法:每一个活结点只有一次机会成为扩展节点。活结点一旦成为扩展结点,就一次性产生全部的儿子结点。
(4)存储空间的要求
分支限界法对存储空间的要求比回溯法大得多,因此当内存容量有限时,回溯法成功的可能性更大。
3、求解步骤
step1:定义解空间(对解编码)
step2:确定解空间的树结构
step3:按照BFS等方式搜索:
a.每个活结点仅有一次机会变成扩展结点;
b.由扩展结点生成一步可达的新结点;
c.在新节点中,删除不可能导出最优解的结点; //限界策略
d.将余下的新节点加入活动表(队列)中;
e.从活动表中选择结点再扩展; //分支策略
f.知道活动表为空
4、两种常见的活结点扩充方式(未看懂)
(1)先进先出队列(FIFO):从活结点表中取出结点的顺序与加入节点的顺序相同,因此活结点表的性质与队列相同;
(2)优先队列(耗费用小根堆,收益用大根堆),每个结点都有一个对应的耗费或受益。
-如果查找一个具有最小耗费的解,则活结点表可用小根堆来建立,下一个扩展结点就是具有最小耗费的活结点;
-如果希望搜索一个具有最大收益的解,则可用大根堆来构造活结点表,下一个扩展结点是具有最大收益的活结点。
示例1:
![b300fb1ebcf4ba541ed9fbdba548782a.png](https://i-blog.csdnimg.cn/blog_migrate/321d70a3691de705cd66f1e76e460071.jpeg)
![ef50f6adca7e409670fa3a25b509948a.png](https://i-blog.csdnimg.cn/blog_migrate/cb4d1ad086a97d1082a70d66b2e14b9c.jpeg)
通过判断重量加起来是否超过背包容量来判断是不是死节点
示例2:(未看懂)
![4180b28058e1210ba4fcb944db34ceff.png](https://i-blog.csdnimg.cn/blog_migrate/a4f2df3293e57f45bd0328103902d1de.jpeg)
![788c86ab1fdf8e271164020cc15e1cd4.png](https://i-blog.csdnimg.cn/blog_migrate/7eda2a207848ebea1e520c6d8993509f.jpeg)
二、8谜问题
1、问题定义
![9ec84c5c33010dcb775914506bdc057d.png](https://i-blog.csdnimg.cn/blog_migrate/36a7e1974ce1568598415cb048f77a5c.jpeg)
2、代价函数
设
(1)如果x是死结点或x的子树不含解,使
(2)如果x是活结点:
![9c095967b0b6896ad6fdf34ebcf73e1b.png](https://i-blog.csdnimg.cn/blog_migrate/fd1da0e25f9fef180ef16925d4af9926.png)
3、
![4631454f1b9b3f32e750f84ead12f723.png](https://i-blog.csdnimg.cn/blog_migrate/68c265f9439bc8166ea0499ca84c195e.jpeg)
三、装载问题
1、问题定义
![84206c0708b2eac4c084d1bb0951866e.png](https://i-blog.csdnimg.cn/blog_migrate/b79aab986789deac38057b3574ffaaa6.jpeg)
![8c24c8f85b72838adebeeca8714f59a7.png](https://i-blog.csdnimg.cn/blog_migrate/7d258957b416fe6cee7250adf1942ac8.jpeg)
2、解空间树
![05e5ac19c80c8f5202592e70a687ab6f.png](https://i-blog.csdnimg.cn/blog_migrate/dde578efeee9202e992363b494c962c3.jpeg)
3、FIFO队列分支限界
![cd6841527ef0984168f1715d4c68443c.png](https://i-blog.csdnimg.cn/blog_migrate/33ebba5d729f3830dbf5c76113b2abe5.jpeg)