概览

本节展示如何将若干经典组合优化问题表述为线性规划(Linear Program, LP)。核心思想是:为问题中的决策量引入连续变量,将优化目标写成变量的线性目标函数,将问题的约束条件写成变量的线性不等式或等式。本节依次讨论了最短路径最大流二分匹配多商品流最小费用流五个经典问题的LP表述,并引入了线性规划松弛(LP relaxation)这一关键概念——它揭示了LP与整数规划之间的深刻联系,也为近似算法提供了理论基础。


知识结构总览

flowchart TD
    A["组合优化问题"] --> B["最短路径问题"]
    A --> C["最大流问题"]
    A --> D["二分匹配问题"]
    A --> E["多商品流问题"]
    A --> F["最小费用流问题"]

    B --> B1["变量: d_v(距离估计)"]
    B --> B2["目标: max Σd_v"]
    B --> B3["约束: d_v ≤ d_u + w(u,v)"]

    C --> C1["变量: f(u,v)(边流量)"]
    C --> C2["目标: max Σf(s,v)"]
    C --> C3["约束: 容量 + 流守恒 + 非负"]

    D --> D1["变量: x_e(边是否选中)"]
    D --> D2["目标: max Σx_e"]
    D --> D3["约束: 每顶点至多一条匹配边"]

    E --> E1["多源多汇 + 共享容量"]
    E --> E2["NP-hard(一般情况)"]

    F --> F1["目标: min Σc(u,v)·f(u,v)"]
    F --> F2["约束: 容量 + 流守恒 + 流量需求"]

    B & C & D --> G["LP松弛 → 整数最优性"]
    E --> H["LP松弛 ≠ 整数最优性"]
    G --> I["全幺模性(Total Unimodularity)"]
    H --> J["Integrality Gap"]

本节的知识脉络清晰:从最简单的最短路径开始,逐步过渡到最大流二分匹配,再到更复杂的多商品流最小费用流。前三者的LP松弛天然具有整数最优性(最优解恰好是整数),后两者则不一定——这一差异正是理解LP松弛意义的关键。


核心思想

2.1 最短路径问题的LP表述

问题定义:给定带权有向图 ,源顶点 ,边权函数 。目标是找到从 到所有其他顶点 最短路径距离

变量设计

为每个顶点 引入一个连续变量 ,表示从源 到顶点 距离估计值。注意,这里 是一个非负实数,而非整数。

目标函数

为什么是最小化路径却用最大化目标?

直觉上最短路径应该”最小化”什么。但这里的技巧是:约束限制了每个距离估计不能超过其邻居的估计值加边权。如果目标是最小化所有距离之和,则所有距离估计为 0 就是最优解——这毫无意义。反过来,最大化所有距离之和则迫使每个距离估计尽可能大,而三角不等式约束恰好保证距离估计不会超过真正的最短路径距离。因此最优解中距离估计恰好等于最短路径距离。

约束条件

具体数值示例

考虑如下带权有向图,源点为

    5
s ─────→ a
│        │
│3       │2
│        ↓
└──→ b ──→ c
     ↑    │
     │ 1  │6
     └────┘

图的边集与权值

权值
5
3
2
1
6

转化为LP

变量:

逐步求解

  1. ,代入约束得:

  2. ,得 ,得

  3. ,当 增大时此约束不限制

  4. 最大化目标函数,各变量取上界:

    • (受 限制)
  5. 目标函数值:

验证,对应的最短路径为:

  • (路径
  • (路径
  • (路径

这与 22.1 Bellman-Ford算法 的计算结果一致。


2.2 最大流问题的LP表述

问题定义:给定流网络 ,源点 ,汇点 ,容量函数 。目标是找到从 最大流量。详见 24.1 流网络

变量设计

为每条边 引入一个连续变量 ,表示该边上的流量

目标函数

即最大化从源点 流出的总流量。

约束条件

流守恒约束的直觉

想象水管网络:每个中间节点(非源非汇)流入的水量必须等于流出的水量,水不会凭空产生也不会凭空消失。源点只出不进,汇点只进不出。

关键性质:当所有容量 为整数时,最大流LP的最优解一定是整数。这一性质源于约束矩阵的全幺模性(Total Unimodularity),后面会详细讨论。


2.3 二分匹配问题的LP表述

问题定义:给定二分图 ,其中 是两个不相交的顶点集, 是边集。目标是找到最大基数匹配——一个边集 ,使得 中没有两条边共享端点,且 最大。

变量设计

为每条边 引入一个变量 ,表示边 是否被选入匹配。在整数规划版本中,;在LP松弛版本中,允许 之间的任意实数。

目标函数

约束条件

其中 表示与顶点 关联的边集。

关键性质:二分匹配的LP松弛同样具有整数最优性——即使允许 取分数值,最优解中所有 仍然是 。这一性质同样源于约束矩阵的全幺模性。


2.4 多商品流问题的LP表述

问题定义:给定流网络 ,容量函数 ,以及 个商品(commodity)。每个商品 有一个源点 、汇点 和需求量 。目标是同时为所有商品分配流量,使得每条边上的总流量不超过容量,且每个商品的流量满足其需求。

变量设计

为每个商品 和每条边 引入变量 ,表示商品 在边 上的流量。

目标函数

约束条件

多商品流是NP困难的

与单商品最大流不同,多商品流问题(即使只有2个商品)在一般情况下是NP-hard的。其LP松弛的最优解通常不是整数解,存在整数间隙(integrality gap)。


2.5 最小费用流问题的LP表述

问题定义:给定流网络 ,源点 ,汇点 ,容量函数 ,费用函数 ,以及流量需求 。目标是找到从 的流量恰好为 的流,使得总费用最小

变量设计

与最大流相同,为每条边 引入变量

目标函数

约束条件

关键性质:最小费用流是网络流问题中最一般的统一模型——最短路径、最大流、二分匹配都可以看作最小费用流的特例。当所有数据为整数时,最小费用流LP同样具有整数最优性。


2.6 线性规划松弛(LP Relaxation)

核心概念:许多组合优化问题的自然表述是整数线性规划(Integer Linear Program, ILP),即要求变量取整数值。线性规划松弛就是去掉变量的整数约束,允许变量取连续值,从而得到一个(更容易求解的)普通线性规划。

形式化说明

原始整数规划:

LP松弛:

LP松弛的意义

  1. 可解性:线性规划可以在多项式时间内求解(如内点法),而整数线性规划一般是NP-hard
  2. 上界/下界:LP松弛的最优值提供了整数最优值的上界(最大化问题)或下界(最小化问题)
  3. 近似算法:通过”舍入”(rounding)LP松弛的分数解,可以得到整数可行解,进而设计近似算法
  4. 结构性洞察:LP松弛帮助我们理解问题的数学结构,判断哪些问题具有”整数最优性”

2.7 整数线性规划 vs 线性规划

对比维度线性规划(LP)整数线性规划(ILP)
变量域连续实数整数(通常为
求解复杂度P(多项式时间可解)NP-hard(一般情况)
可行域凸多面体凸多面体内的整数格点
求解方法单纯形法、内点法分支定界、割平面法
最优解位置顶点处(基本可行解)不一定在顶点处

整数最优性的"魔法"

对于某些特殊问题(如最大流、二分匹配、最短路径),LP松弛的最优解恰好是整数。这不是巧合,而是因为这些问题的约束矩阵具有全幺模性(Total Unimodularity)——矩阵的每个方阵子式的行列式为 0、+1 或 -1。全幺模性保证了LP的基本可行解自动是整数解,因此不需要专门求解整数规划。


补充理解与拓展

LP松弛与整数规划的关系

**整数间隙(Integrality Gap)**是衡量LP松弛质量的核心指标。对于最小化问题,整数间隙定义为: 其中 分别是实例 上LP松弛和整数规划的最优值。

**顶点覆盖(Vertex Cover)**是理解整数间隙的经典案例。给定无向图 ,顶点覆盖的ILP为: 其LP松弛将 放松为

  • 对于二分图,LP松弛具有整数最优性(整数间隙为1)
  • 对于一般图,LP松弛的最优解是半整数的(每个 ),整数间隙恰好为 ,其中 是图的分数色数
  • 基于LP松弛的舍入算法可以给出2-近似:将所有 的顶点选入覆盖

这一框架由Hochbaum(1982)和Bar-Yehuda & Even(1981)独立提出,是基于LP的近似算法的奠基性工作。

最大流的LP表述与Ford-Fulkerson的关系

最大流问题可以自然地表述为LP,但实际求解时通常使用Ford-Fulkerson方法或其改进版本(如Edmonds-Karp算法、Dinic算法),而非直接调用通用LP求解器。原因在于:

  1. 效率优势:专用网络流算法的时间复杂度为 (Edmonds-Karp)或 (Dinic),远快于通用LP求解器
  2. 整数最优性保证:当容量为整数时,Ford-Fulkerson方法直接产生整数流,无需额外处理
  3. 结构利用:专用算法充分利用了网络的图结构

全幺模性(Total Unimodularity)是连接LP表述与整数最优性的数学桥梁。最大流LP的约束矩阵是网络矩阵(network matrix),而所有网络矩阵都是全幺模的。全幺模矩阵的定义是:每个方阵子式的行列式为 。根据Cramer法则,当约束矩阵 全幺模且右端向量 为整数时,基本可行解 的每个分量都是整数(因为 ,而 )。

值得注意的是,多商品流的约束矩阵不是全幺模的,这也是多商品流问题更加困难(NP-hard)的根本原因之一。

网络流问题的统一LP框架

最小费用流问题(Minimum Cost Flow)是网络流问题中最一般的统一模型。它将最短路径、最大流、二分匹配等问题作为特例包含在内:

问题如何归约为最小费用流
最短路径单位容量,费用为边权,流量需求
最大流零费用(或添加虚拟边),最大化流量
二分匹配源点连左部顶点(容量1),右部顶点连汇点(容量1),所有边费用为0
运输问题无中间节点,供需平衡

最小费用流的LP表述为:

当所有容量、费用和需求为整数时,最小费用流LP具有整数最优性。这一统一框架表明,网络流问题的核心共性在于:约束矩阵都是全幺模的,因此LP松弛自动给出整数最优解。这也解释了为什么网络流问题虽然看似是组合优化问题,却可以在多项式时间内精确求解。

整数规划的实际求解方法

由于一般整数规划是NP-hard的,实际求解依赖以下核心方法:

1. 分支定界法(Branch and Bound)

  • 将可行域递归地分割为子问题(“分支”)
  • 用LP松弛计算每个子问题的上界(最大化)或下界(最小化)(“定界”)
  • 剪去不可能包含最优解的子问题(“剪枝”)
  • 搜索策略:深度优先(快速找到可行解)、最优优先(快速逼近最优值)、混合策略

2. 割平面法(Cutting Planes)

  • Gomory割:基于单纯形表的分数部分生成切平面,逐步缩小可行域
  • Chvatal-Gomory割:对约束进行非负线性组合后向下取整,得到更紧的有效不等式
  • 覆盖割:特别适合集合覆盖等组合优化问题
  • 提升投影割(Lift-and-Project):从低维有效不等式提升到高维空间

3. 分支割平面法(Branch and Cut)

  • 现代整数规划求解器(如CPLEX、Gurobi)的主流方法
  • 在分支定界框架中嵌入割平面生成
  • 割平面的质量直接影响求解效率
  • 对于大规模实际问题,通常能在合理时间内找到最优解或高质量的可行解

4. 启发式方法

  • 在分支定界过程中使用贪心或局部搜索快速找到初始可行解
  • 为剪枝提供更好的下界参考

易混淆点

LP松弛解 vs 整数最优解(整数间隙)

误区:认为LP松弛的最优解”四舍五入”后就是整数最优解。

纠正:LP松弛的最优解与整数最优解之间的差距由整数间隙(Integrality Gap)衡量。对于某些问题(如最大流、二分匹配),整数间隙为1,LP松弛解恰好是整数解。但对于许多NP-hard问题(如顶点覆盖、最大割),整数间隙严格大于1,简单的舍入可能产生远离最优的解。

示例:考虑一个三角形图(3个顶点两两相连)的顶点覆盖问题。ILP最优值为2(任选2个顶点),但LP松弛最优值为 (每个变量取 )。整数间隙为 (最小化问题,间隙 说明LP松弛值更小)。如果直接将 的顶点全部选入,得到3个顶点的覆盖——比最优解大了50%。

等式约束 vs 不等式约束的转换

误区:认为等式约束和不等式约束可以随意互换。

纠正:在LP的标准型中,约束统一为 的形式。等式约束 等价于两个不等式约束 (即 )。但在实际建模中,等式约束(如流守恒)比两个不等式约束更紧凑,能帮助求解器更快收敛。

实用建议:建模时优先使用等式约束表达精确的平衡关系(如流守恒),使用不等式约束表达上限或下限(如容量约束)。转换为标准型时再按需拆分。


习题精选

题号题目主题难度核心考点
29.2-1最短路径LP转标准型★★☆标准型转换、松弛变量引入
29.2-3单源最短路径LP表述★★☆LP建模、三角不等式约束
29.2-4最大流LP表述★★★流守恒约束、容量约束
29.2-6二分匹配LP表述★★★匹配约束、LP松弛的整数性

视频学习指南

资源讲者/来源主题时长语言
MIT 6.046J Lecture 16Prof. Erik DemaineNetwork Flow and Linear Programming~80minEN
CMU 15-451 Lecture 22Prof. Anupam GuptaLP Duality and Applications~75minEN
Stanford CS261 Lecture 5Prof. Nima AnariLP Relaxations for Combinatorial Problems~60minEN
慕课网《算法导论精讲》第29章:线性规划~45minZH

视频学习建议

建议先观看MIT 6.046J的对应章节,理解LP建模的基本思路。之后观看CMU 15-451的对偶性章节,建立LP建模与对偶理论的联系。最后通过Stanford CS261深入理解LP松弛在近似算法中的应用。


教材原文

CLRS 第4版 第29.2节

“In this section, we show how to formulate several combinatorial problems as linear programs. We start with the shortest-path problem, then move on to maximum flow, bipartite matching, multicommodity flow, and minimum-cost flow.”

“The key idea is to define variables that represent the decisions to be made, write the objective as a linear function of these variables, and express the constraints as linear inequalities or equalities.”


参见Wiki

  • 最大流:最大流问题是本节LP建模的核心案例之一,其LP表述具有整数最优性
  • 二分匹配:二分匹配的LP表述利用了关联矩阵的全幺模性
  • 贪心算法:某些贪心算法可以看作LP松弛的极端情形(如分数背包问题)
  • 29.1 线性规划的表述与算法:标准型与松弛型的定义,是理解本节LP表述的基础
  • 29.3 对偶性:LP对偶理论为理解LP松弛的界提供了有力工具
  • 24.1 流网络:流网络的定义与性质,是最大流LP建模的图论基础
  • 22.1 Bellman-Ford算法:最短路径的经典算法,与最短路径LP表述形成对照

第29章-线性规划 问题建模