分支定界算法详解

求解整数规划问题的利器,通过“分支-定界-剪枝”高效搜索最优解

一、算法核心思想

分支定界(Branch and Bound)是一种系统化的搜索算法,专门用于求解整数规划、组合优化等NP难问题。其核心思想可以概括为三步:

  1. 分支:将原问题分解成若干子问题

  2. 定界:计算每个子问题的上下界

  3. 剪枝:通过比较界限,剪掉不可能包含最优解的子问题

这种方法将指数级的搜索空间大幅缩小,是运筹学中最经典的精确算法之一。


二、算法基本步骤

以一个简单的整数规划为例:

text

min  x1 + 2x2
s.t. x1 + x2 ≥ 3
     x1, x2 ∈ {0,1,2}

2.1 初始化

  • 设置当前最优解 $x^* = \infty$

  • 设置上界 $UB = \infty$(最小化问题)

2.2 根节点求解

求解线性松弛(去掉整数约束),得到:

  • 松弛解:$(x_1, x_2) = (1.5, 1.5)$

  • 目标值:4.5 → 这是下界 $LB = 4.5$

通过启发式找到一个整数可行解 $(2, 1)$,目标值4 → 更新上界 $UB = 4$

2.3 分支

选择变量 $x_1$ 进行分支:

  • 子问题1:$x_1 \le 1$,松弛解得 $(1, 2)$,目标值5 → $LB = 5 \ge UB = 4$,剪枝

  • 子问题2:$x_1 \ge 2$,松弛解得 $(2, 1)$,目标值4 → 整数解,更新 $UB = 4$,剪枝

2.4 算法结束

最优解为 $(2, 1)$,目标值4


三、最大化与最小化的界定义

理解上下界的定义是掌握分支定界的关键:

问题类型下界上界
最大化可行解(我们能做到的)松弛解(理论上可能的上限)
最小化松弛解(理论上可能的下限)可行解(我们能做到的)

关系:$下界 \le 最优值 \le 上界$


四、核心策略详解

4.1 分支策略

① 最不可行分支

选择离整数最远的变量进行分支(分数部分最接近0.5)

python

# 计算分数部分
fraction = min(x - floor(x), ceil(x) - x)
# 选择fraction最大的变量
② 伪成本分支

维护每个变量向上/向下分支的历史改进信息,用于估计未来分支效果

  • $\psi_j^+$:向上分支的单位改进

  • $\psi_j^-$:向下分支的单位改进

③ 强分支

临时对候选变量进行分支并求解,选择改进最大的变量(精确但计算量大)

④ 可靠性分支(现代求解器默认)
  • 信息不足时使用强分支

  • 信息充足后使用伪成本估计

4.2 节点选择策略

策略特点适用场景
深度优先(DFS)内存小,快速找可行解内存受限,或作为初始阶段
广度优先(BFS)
最佳优先(Best Bound)快速提升全局界内存充足,追求快速收敛
混合策略先DFS找可行解,再Best Bound实际求解器默认方式

4.3 定界方法

方法界紧度速度适用场景
线性规划松弛较松通用基础
拉格朗日松弛较紧可分解结构
切割平面动态收紧通用,常与LP结合
启发式提供可行解更新全局界

4.4 剪枝技巧

剪枝时机
  • 节点生成后:边界检查、可行性检查

  • 节点求解后:界比较、整数性、不可行性、支配性

  • 全局界更新后:回溯检查、批量剪枝

特殊剪枝
  • 对称性剪枝(如TSP中固定起点)

  • 支配性剪枝(如路径比较:在旅行商问题中,假设有两条部分路径都访问了相同的城市集合,但一条路径长度更短,则另一条路径被支配,可以剪枝。)

  • 整数性剪枝:线性松弛之后,得到的解已经是整数可行解了,可以更新问题的全局上/下界,并回溯将节点剪枝

4.5 数值稳定性

设置容忍度避免浮点误差误判:

  • 整数性容忍度:$10^{-6}$

  • 最优性容忍度:$10^{-6}$


五、算法流程图

text

开始
  ↓
求解根节点松弛
  ↓
初始化全局界
  ↓
┌─────────────────┐
│ 选择节点        │
│ (DFS/Best Bound)│
└────────┬────────┘
         ↓
┌─────────────────┐
│ 分支            │
│ (选择变量)      │
└────────┬────────┘
         ↓
┌─────────────────┐
│ 定界            │
│ (求解松弛)      │
└────────┬────────┘
         ↓
    是否可剪枝?
    ↙        ↘
  是          否
   ↓           ↓
 剪枝      加入待探索列表
   ↓           ↓
└─────────────┘
         ↓
    待探索列表空?
        ↓ 是
     输出最优解

六、总结

分支定界算法的成功依赖于四个关键要素:

  1. 紧的界:好的松弛方法 + 高效的启发式

  2. 聪明的分支策略:平衡计算与树大小

  3. 高效的节点管理:控制内存与速度

  4. 利用问题特性:定制化剪枝

实际应用中,现代求解器(如CPLEX、Gurobi、SCIP)通常采用分支切割法,结合分支定界与割平面,并配合可靠性分支混合节点选择等策略,实现高效求解。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhugby

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值