分支限界

1 概述

基本思想

  • 在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中。

  • 此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。这个过程一直持续到找到所需的解或活结点表为空时为止。

常见的两种分支界限法

  • 队列式(FIFO)分支限界法:按照队列先进先出(FIFO)原则选取下一个节点为扩展节点。
  • 优先队列式分支限界法:按照优先队列中规定的优先级选取优先级最高的节点成为当前扩展节点。

使用条件

  • 问题的多米诺性质叶子节点的解一定满足其父节点。叶子结点为真则父节点一定为真。同理父节点为假则叶子结点一定为假(逆否命题)。用父节点为假的情况进行剪枝操作。

  • 求解最优解或一个可行解

设计要素

  1. 针对问题定义解空间
    • 问题解向量
    • 解向量分量取值集合
    • 构造解空间树
  2. 判断是否满足多米诺性质
  3. 确定剪枝函数
  4. 确定存储搜索路径的数据结构
  5. 分支限界发的核心思想在于界的设计

分支限界法的程序结构

  • 队列+循环的方法

2 分治限界实现

3 常见问题

  1. 01背包问题
  2. 旅行商问题
  3. 装载问题