Discrete Optimization (Coursera) week2-3 BnB求解背包问题

Branch and Bound

Branch and Bound (BB) is another powerful tool in discrete optimization (platitude一则)

我们继续以背包问题来介绍这一算法。

首先考察一个naive way in solving knapsack problem:现在有 1,2,…,n这么多个物品,那么对于物品1,我可以选择或者不选择---->这就分了两个岔,对于每个岔,对于物品2我都可以选择或者不选择---->这就分了四个岔… 我们其实只需要检查所有不同的选择,也不过就(?) 2 n 2^n 2n种组合。当n比较小的时候,其实穷举就行了,但是如果n比较大…(电脑:跑你🐴呢?)
在这里插入图片描述

那么,有没有方法可以减小需要验证的数量呢?例如,现在某一个分叉已经只有两个物品可以选择了,而所能获得的最大价值也不过10元,远远小于某一个分叉,which has ALREADY obtained 100元。那么,这种情况下,是不是可以直接将那个继续选下去也最多不过10元的分叉给砍掉呢?

基于这样的想法,BB被提出了。Branch指的还是分叉,Bound就是用一个最大值或者最小值来作为上界/下界。当某一个分叉1的最大值小于当前某个分叉2已经取得的值,那么显然分叉1就可以被砍掉了。这或许可以大大减小我们需要验证的数量!

关于 Bound: 如何找到上界或者下界?一个常用的方法就是将 decision variables的范围扩大,比如从整数域扩展到实数域(例如 {0,1} —> [0, 1]),这样既可以保证得到了上界/下界,也可以快速地求解(Linear Optimization problem is NOT a Problem. It’s highly mature! )

The General Framework:

at a really high level, BnB is something like this: (w.l.o.g. Assume want to find the maximum of f ( x ) f(x) f(x))


  1. 用某种粗糙的(heuristic)的方法找出一个解
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值