分枝限界算法的总体思路

分支限界算法(Branch&Bond)

  • 常用于求解优化问题
  • 穷举所有的“状态”,利用上界或者下界来提高搜索效率

常用术语

  • 活结点,刚被生成,子节点尚未生成的节点
  • 当前节点(E-node):正在展开的节点
  • 死结点:不需要展开的节点。(被剪枝函数剪掉的树根)

展开方式

  1. FIFO B_B
  2. FILO B_B
  3. LC B_B(Least Cost)

LC B_B

  1. 在状态树T上进行搜索
  2. 每个节点N都有值函数C(N),为优化的目标

由两个函数维护活结点

  • least 选择展开哪个节点
  • add 把子节点加到least选中的那个活结点上

注意:LC B_B 可能会用来求解最大问题,各种优化问题的评判逻辑各异,不能局限于least的字眼

剪枝

  • 可行与否:如果某条路径(Path)代表的解不可实现,必然要被剪除。
  • 落后与否:若存在一对可行节点A,B。存在以下情况:从A出发所能获得的最优值BestA落后于B出发可得到的最优值BestB,那么就可以认为B领先A,则A将被剪枝。
  • 精确计算BestN(MaxN或MinN)存在一定的困难,所以通常以近似计算获得。
  • 通常情况下 MaxN>MinN>NowN(N当前的C值)成立。
  • 在最大化问题中,我们通常以NowB>MaxA作为评判标准。
  • 在最小化问题中,我们通常以NowA>MaxB或者NowA>MinB为评判标准(根据实际问题选择合适的形式)。

优先级

作为一种“相对高效”的穷举算法,我们自然选择最有潜力的活结点作为下一个E-Node展开。在这一思想的指导下,我们选择展开BestN(MaxN或者MinN)最优的节点作为下一个E-Node。

运作LC B_B的Routine

  1. 展开树根,得到第一层全部子节点
  2. 在子节点中进行剪枝(可行,落后),可行的叶子节点转4
  3. 在2后剩余的活结点中选择优先级最高的展开,转2
  4. 记录对应的Path,存储C值
  5. 遍历完毕,给出最优解

总的来说,就是“选择E-Node,展开子节点,剪枝,再选择下一个E-Node”,环往复,直到全部可行路径都到达叶子节点。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值