背包问题可能解的数量_背包问题与Branch and Bound 方法

本文探讨了背包问题的传统解决方案动态规划,并引入了Branch and Bound 方法。通过介绍BB方法如何处理具有多种约束的背包问题,展示了该方法的优势。内容包括动态规划的基本原理,BB方法中的分支和剪枝策略,以及不同搜索顺序如深度优先、广度优先和最佳优先搜索在解决背包问题中的应用。同时,文章提到了利用专业知识构建启发式函数来提高搜索效率。
摘要由CSDN通过智能技术生成

一直以来我对背包问题的认识都停留在动态规划上,今天在这里我们趁此机会学习一下有名的BB方法。

我们假设问题如下:有一系列不可分割的物体,它的价值为

,重量为
,我们现在能够承载重量
,求能拿走最大的价值

动态规划

我们定义

表示前n个物体在承重要求c下最大能获得多少价值。利用递归公式
,我们就得到动态规划的算法。

为什么可以应用动态规划?

  1. 一个问题可以不断地拆分成子问题解决,并且该问题的解可以通过子问题的解构成。
  2. 子问题的数量有限,在这里要解决的子问题的数量至多为NC个。

但是我们可以看到动态规划的局限性,比如我就比较担心:约束有更多个,例如还有体积约束,或者物体A和B不能水火不容。(当然也不是说就完全不行了。)


分支定界

好的,现在我们来看看Branch and Bound 是怎么解决这个问题的吧。(偷懒,我就用Coursera上的那个例子了。

9c4f2d629461ce02431364659738536e.png

首先,直觉上,我们可以穷尽所有可能0-1组合来解决这个问题,有

种组合。一方面,我们按什么顺序去生成和检验这些组合的结果呢?另一方面,我们可以用什么办法减少一些检验的对象呢?

我们可以用一种非常自然的树状结构来生成这些组合:

1593c56c259f9ee034473e2dfbf68fcb.png

这个树怎么从一开始慢慢长大就是Branch。Branch把我们带到了子问题或者解空间里面的一个子空间里去。

而Bound就是一种剪枝的方法:

如果对这个分支的乐观估计已经比我得到的现有结果差,那么这个分支我就不考虑下去了。

那么乐观估计怎么取呢?

这里的一个简单思路就是允许物体只取一部分,此时我们可以用贪心算法去求解,即先选单位价值大的物体。注意到一个问题,那就是估计本身是要计算量的,所以贪心算法在这里可能比直接用线性规划要快。下面是一个基于DFS的BB的结果。

939b0b4f101bc2db6b460c31a76e1f2b.png

搜索顺序

那么这个搜索树的生成(branch)到底有什么讲究呢?

对于分支的顺序(下一个展开节点的选择/搜索策略),我们可以有:

  1. Depth First Search
  2. Breadth First Search
  3. Best First Search
  4. Limited/Least Discrepancy Search

其中Best First Search用Bound中的估计当前节点,通过这个估计我们建立起一个优先级队列,按照出队顺序分支节点,我们总是处理估计值更好的节点。这里的思路是:

现有估计最好的节点的展开可能更容易导向最优解。

我们可以扩展一个一下这个思路,实际上我们就是面对这样一个问题:

按什么顺序展开更可能导向最优解?

如果我们认为解总是在比较浅的地方,我们就可能会使用BFS。或者甚至我们有一个预测最优解在哪个分支下的概率的函数(比如下围棋的局势评价函数,[To Do] 利用CNN解决数独问题。),那么我们就先搜索概率大的分支。

而Limited Discrepancy Search其实也是这个思路,它假设我们有一个非常好的寻找后继展开节点的heuristic算法,按照这个算法我们甚至常常能一下子就找到正确解或者拿到一个接近的解。那我们知道真正的解和heuristic得到的解之间的距离很近,那么我们就先按BFS搜索距离近的解。在背包问题中,这里的距离,我们就可以理解为每一次分支的时候哪几个物体的0-1选择不一样。而这些在分支上的分歧就是Discrepancy。一个例子如下,我们的heuristic认为选左边总比选右边概率更大。那么我们就有可能有如下一个搜索的顺序:

7471524677c498c5c49c3242ba1eb50c.png

这就等价于我们把Best First Search中的估计换成了负的Discrepancy。Discrepancy越小就是越“好”。

事实上,我们就是要利用专业知识来构造一个heuristic函数来引导搜索先往更有可能的求解域前进。

注意我们还要考量每种方法的空间和时间复杂度。


  1. Coursera 课程: Discrete Optimization (Pascal Van Hentenryck,Carleton Coffrin)
  2. [To Do] Beam Search
  3. Limited Discrepancy Search (William D. Harvey, Matthew L. Ginsberg)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值