基于线性规划的“最小成本网络流”问题的建模、网络单纯形法求解与对偶经济解释示例
字数 4956 2025-12-21 13:21:44

基于线性规划的“最小成本网络流”问题的建模、网络单纯形法求解与对偶经济解释示例

我将为您讲解一个经典的线性规划应用——“最小成本网络流”问题,并演示如何用网络单纯形法高效求解,同时结合对偶理论给出经济解释。

1. 问题描述

最小成本网络流(Minimum Cost Network Flow, MCNF) 是图论与线性规划交叉的核心问题。给定一个有向图 \(G = (V, E)\),其中每条边 \((i,j) \in E\) 具有:

  • 单位流量成本 \(c_{ij} \in \mathbb{R}\)(运输单位流量的费用)
  • 容量上界 \(u_{ij} \geq 0\)(最大允许流量)
  • 容量下界 \(l_{ij} \geq 0\)(最小必须流量,通常为0)

每个顶点 \(i \in V\) 有一个净需求量(净产出)\(b_i\)

  • \(b_i > 0\),表示供应点(源点),可提供 \(b_i\) 单位流量
  • \(b_i < 0\),表示需求点(汇点),需要接收 \(|b_i|\) 单位流量
  • \(b_i = 0\),表示中转点

目标:找到满足所有顶点净需求和边容量限制的可行流,使总运输成本最小。

实例:考虑一个小型供应网络(如下图):

  • 顶点:1(工厂),2(仓库),3(客户A),4(客户B)
  • 边与参数:
    • (1,2):成本2,容量10,下界0
    • (1,3):成本4,容量5,下界0
    • (2,3):成本1,容量8,下界0
    • (2,4):成本3,容量7,下界0
    • (3,4):成本2,容量4,下界0
  • 净需求:\(b_1 = 8\)(供应8单位),\(b_3 = -3\)\(b_4 = -5\)\(b_2 = 0\)(中转)。
       (2,10)
     1 ------> 2
     | \       | \
(4,5)|  \      |(3,7)
     |   \     |   \
     v    v    v    v
     3<----    4
       (1,8)     (2,4)

2. 线性规划建模

决策变量\(x_{ij}\) 表示边 \((i,j)\) 上的流量。

目标函数:最小化总成本

\[\min \sum_{(i,j) \in E} c_{ij} x_{ij} \]

约束

  1. 流量守恒(对每个顶点 \(i \in V\)):

\[ \sum_{j: (i,j) \in E} x_{ij} - \sum_{j: (j,i) \in E} x_{ji} = b_i \]

(流出减流入等于净供应/需求)
2. 容量限制(对每条边 \((i,j)\)):

\[ l_{ij} \leq x_{ij} \leq u_{ij} \]

代入实例数据:

\[\begin{aligned} \min \quad & 2x_{12} + 4x_{13} + 1x_{23} + 3x_{24} + 2x_{34} \\ \text{s.t.} \quad & x_{12} + x_{13} = 8 \quad &\text{(顶点1)} \\ & -x_{12} + x_{23} + x_{24} = 0 \quad &\text{(顶点2)} \\ & -x_{13} - x_{23} + x_{34} = -3 \quad &\text{(顶点3)} \\ & -x_{24} - x_{34} = -5 \quad &\text{(顶点4)} \\ & 0 \leq x_{12} \leq 10,\; 0 \leq x_{13} \leq 5,\; 0 \leq x_{23} \leq 8,\; 0 \leq x_{24} \leq 7,\; 0 \leq x_{34} \leq 4 \end{aligned} \]

注意:四个顶点方程线性相关(和为0),可去掉一个(如顶点4)以消除冗余。

3. 网络单纯形法求解步骤

网络单纯形法是单纯形法的特化,直接在图上操作,高效且直观。

步骤1:构造初始生成树结构

  • 在图中添加人工边(零成本、大容量)或找一棵生成树支撑流。
  • 实例中,我们取生成树 \(T = \{ (1,2), (1,3), (3,4) \}\)(虚线边为非树边):
    • 树边流量 \(x_{12}, x_{13}, x_{34}\) 为基变量
    • 非树边 \(x_{23}, x_{24}\) 为非基变量(初始设为下界0)

步骤2:计算树边流量(满足流量守恒)
在生成树中,流量可由顶点需求唯一确定:

  1. 从叶子开始:顶点4需求-5,由 \(x_{34}\) 满足 ⇒ \(x_{34} = 5\)(但容量为4,超出!需调整树或初始解)
    实际上,发现初始树不可行(需求无法满足)。改用另一种方法:从可行解开始,如设 \(x_{12}=5, x_{13}=3, x_{23}=0, x_{24}=5, x_{34}=0\) 是可行的(验证:顶点1流出8,顶点3流入3,顶点4流入5,顶点2平衡)。
    对应生成树可取 \(T = \{ (1,2), (2,4), (1,3) \}\),非树边 \((2,3), (3,4)\) 置为下界0。

步骤3:计算顶点势(对偶变量)
对每个顶点 \(i\) 引入势 \(\pi_i\)(对应流量守恒约束的对偶变量),满足树边 \((i,j)\)简约成本为零:

\[\bar{c}_{ij} = c_{ij} - \pi_i + \pi_j = 0 \quad \forall (i,j) \in T \]

任选一个顶点势为参考点(如设 \(\pi_1 = 0\)),然后解出其他:

  • \((1,2) \in T\)\(2 - 0 + \pi_2 = 0\)\(\pi_2 = -2\)
  • \((1,3) \in T\)\(4 - 0 + \pi_3 = 0\)\(\pi_3 = -4\)
  • \((2,4) \in T\)\(3 - (-2) + \pi_4 = 0\)\(\pi_4 = -5\)

步骤4:检查非树边的最优性条件
计算非树边 \((i,j)\) 的简约成本:

  • \(\bar{c}_{23} = c_{23} - \pi_2 + \pi_3 = 1 - (-2) + (-4) = -1\)
  • \(\bar{c}_{34} = c_{34} - \pi_3 + \pi_4 = 2 - (-4) + (-5) = 1\)

最优条件:对最小化问题,若所有非树边 \(\bar{c}_{ij} \geq 0\) 则最优。这里 \(\bar{c}_{23} = -1 < 0\),故边 \((2,3)\) 可进基以降低成本。

步骤5:确定进基边与调整流量

  • 进基边:\(e_{\text{in}} = (2,3)\),其简约成本为负。
  • 在生成树 \(T\) 中加入 \((2,3)\) 会形成一个:2 → 3 → 1 → 2(路径:2→3是新边,3→1是树边反向,1→2是树边)。
  • 沿圈调整流量:在圈上,正向边(与进基边方向一致)增加流量 \(\theta\),反向边减少 \(\theta\),同时保持流量守恒。
    圈边方向:\((2,3)^+\), \((3,1)^-\)(对应 \((1,3)\) 反向),\((1,2)^-\)
  • 确定 \(\theta\) 上限:
    • 正向边不能超过上界:\(x_{23} + \theta \leq 8\)(上界8,当前0)⇒ \(\theta \leq 8\)
    • 反向边不能低于下界:\(x_{13} - \theta \geq 0\)(当前3)⇒ \(\theta \leq 3\)\(x_{12} - \theta \geq 0\)(当前5)⇒ \(\theta \leq 5\)
    • 取最小值 \(\theta^* = 3\)(由 \(x_{13}\) 限制)。
  • 更新圈上流量:
    • \(x_{23} = 0 + 3 = 3\)
    • \(x_{13} = 3 - 3 = 0\)
    • \(x_{12} = 5 - 3 = 2\)
  • 出基边:流量变为下界的边 \((1,3)\)(流量变为0)离开基。

步骤6:更新生成树与迭代
新生成树 \(T' = \{ (1,2), (2,4), (2,3) \}\),非树边 \((1,3), (3,4)\)
重新计算顶点势(仍设 \(\pi_1=0\)):

  • \((1,2)\)\(2 - 0 + \pi_2 = 0\)\(\pi_2 = -2\)
  • \((2,4)\)\(3 - (-2) + \pi_4 = 0\)\(\pi_4 = -5\)
  • \((2,3)\)\(1 - (-2) + \pi_3 = 0\)\(\pi_3 = -3\)
    计算非树边简约成本:
  • \(\bar{c}_{13} = 4 - 0 + (-3) = 1 \geq 0\)
  • \(\bar{c}_{34} = 2 - (-3) + (-5) = 0 \geq 0\)
    所有非树边简约成本非负,达到最优。

最优解

\[x_{12}^* = 2, \quad x_{13}^* = 0, \quad x_{23}^* = 3, \quad x_{24}^* = 5, \quad x_{34}^* = 0 \]

总成本:\(2 \times 2 + 4 \times 0 + 1 \times 3 + 3 \times 5 + 2 \times 0 = 4+0+3+15=22\)

4. 对偶问题与经济解释

原问题的对偶变量为顶点势 \(\pi_i\) 和边上的冗余变量。对偶问题

\[\max \sum_{i \in V} b_i \pi_i - \sum_{(i,j) \in E} u_{ij} w_{ij} + \sum_{(i,j) \in E} l_{ij} v_{ij} \]

\[ \text{s.t.} \quad \pi_i - \pi_j - w_{ij} + v_{ij} \leq c_{ij}, \quad w_{ij}, v_{ij} \geq 0 \]

其中 \(w_{ij}, v_{ij}\) 对应容量上下界的对偶变量。

经济解释

  • \(\pi_i\) 可理解为顶点 \(i\)影子价格(即在该点增加一单位供应的边际成本减少量)。
  • 实例中最优势:\(\pi_1=0, \pi_2=-2, \pi_3=-3, \pi_4=-5\)
    • 从工厂(顶点1)发货成本基准为0。
    • 客户A(顶点3)的影子价格-3,意味着若其需求增加1单位,总成本将增加3(因为 \(\pi_3 - \pi_1 = -3\),实际增加 \(|\pi_3| = 3\))。
    • 客户B(顶点4)更“贵”(-5),因其需求需经更贵路径满足。
  • 简约成本 \(\bar{c}_{ij} = c_{ij} - \pi_i + \pi_j\) 表示通过边 \((i,j)\) 运输的净成本减去两端影子价格差。最优时,对非树边 \(\bar{c}_{ij} \geq 0\) 意味着使用该边不会更省(树边正好平衡)。

5. 核心要点总结

  1. 网络单纯形法优势:利用图结构,迭代在生成树上进行,避免普通单纯形法的大矩阵运算,复杂度更低。
  2. 最优性判定:所有非树边简约成本非负(最小化问题)。
  3. 经济意义:顶点势提供资源定价,指导网络资源配置。

此问题广泛用于物流、通信、电力调度等领域,是网络优化和线性规划结合的经典范例。

基于线性规划的“最小成本网络流”问题的建模、网络单纯形法求解与对偶经济解释示例 我将为您讲解一个经典的线性规划应用——“最小成本网络流”问题,并演示如何用网络单纯形法高效求解,同时结合对偶理论给出经济解释。 1. 问题描述 最小成本网络流(Minimum Cost Network Flow, MCNF) 是图论与线性规划交叉的核心问题。给定一个有向图 \( G = (V, E) \),其中每条边 \( (i,j) \in E \) 具有: 单位流量成本 \( c_ {ij} \in \mathbb{R} \)(运输单位流量的费用) 容量上界 \( u_ {ij} \geq 0 \)(最大允许流量) 容量下界 \( l_ {ij} \geq 0 \)(最小必须流量,通常为0) 每个顶点 \( i \in V \) 有一个净需求量(净产出)\( b_ i \): 若 \( b_ i > 0 \),表示供应点(源点),可提供 \( b_ i \) 单位流量 若 \( b_ i < 0 \),表示需求点(汇点),需要接收 \( |b_ i| \) 单位流量 若 \( b_ i = 0 \),表示中转点 目标:找到满足所有顶点净需求和边容量限制的可行流,使总运输成本最小。 实例 :考虑一个小型供应网络(如下图): 顶点:1(工厂),2(仓库),3(客户A),4(客户B) 边与参数: (1,2):成本2,容量10,下界0 (1,3):成本4,容量5,下界0 (2,3):成本1,容量8,下界0 (2,4):成本3,容量7,下界0 (3,4):成本2,容量4,下界0 净需求:\( b_ 1 = 8 \)(供应8单位),\( b_ 3 = -3 \),\( b_ 4 = -5 \),\( b_ 2 = 0 \)(中转)。 2. 线性规划建模 决策变量 :\( x_ {ij} \) 表示边 \( (i,j) \) 上的流量。 目标函数 :最小化总成本 \[ \min \sum_ {(i,j) \in E} c_ {ij} x_ {ij} \] 约束 : 流量守恒 (对每个顶点 \( i \in V \)): \[ \sum_ {j: (i,j) \in E} x_ {ij} - \sum_ {j: (j,i) \in E} x_ {ji} = b_ i \] (流出减流入等于净供应/需求) 容量限制 (对每条边 \( (i,j) \)): \[ l_ {ij} \leq x_ {ij} \leq u_ {ij} \] 代入实例数据: \[ \begin{aligned} \min \quad & 2x_ {12} + 4x_ {13} + 1x_ {23} + 3x_ {24} + 2x_ {34} \\ \text{s.t.} \quad & x_ {12} + x_ {13} = 8 \quad &\text{(顶点1)} \\ & -x_ {12} + x_ {23} + x_ {24} = 0 \quad &\text{(顶点2)} \\ & -x_ {13} - x_ {23} + x_ {34} = -3 \quad &\text{(顶点3)} \\ & -x_ {24} - x_ {34} = -5 \quad &\text{(顶点4)} \\ & 0 \leq x_ {12} \leq 10,\; 0 \leq x_ {13} \leq 5,\; 0 \leq x_ {23} \leq 8,\; 0 \leq x_ {24} \leq 7,\; 0 \leq x_ {34} \leq 4 \end{aligned} \] 注意:四个顶点方程线性相关(和为0),可去掉一个(如顶点4)以消除冗余。 3. 网络单纯形法求解步骤 网络单纯形法是单纯形法的特化,直接在图上操作,高效且直观。 步骤1:构造初始生成树结构 在图中添加人工边(零成本、大容量)或找一棵生成树支撑流。 实例中,我们取生成树 \( T = \{ (1,2), (1,3), (3,4) \} \)(虚线边为非树边): 树边流量 \( x_ {12}, x_ {13}, x_ {34} \) 为基变量 非树边 \( x_ {23}, x_ {24} \) 为非基变量(初始设为下界0) 步骤2:计算树边流量(满足流量守恒) 在生成树中,流量可由顶点需求唯一确定: 从叶子开始:顶点4需求-5,由 \( x_ {34} \) 满足 ⇒ \( x_ {34} = 5 \)(但容量为4,超出!需调整树或初始解) 实际上,发现初始树不可行(需求无法满足)。改用另一种方法:从可行解开始,如设 \( x_ {12}=5, x_ {13}=3, x_ {23}=0, x_ {24}=5, x_ {34}=0 \) 是可行的(验证:顶点1流出8,顶点3流入3,顶点4流入5,顶点2平衡)。 对应生成树可取 \( T = \{ (1,2), (2,4), (1,3) \} \),非树边 \( (2,3), (3,4) \) 置为下界0。 步骤3:计算顶点势(对偶变量) 对每个顶点 \( i \) 引入势 \( \pi_ i \)(对应流量守恒约束的对偶变量),满足树边 \( (i,j) \) 的 简约成本 为零: \[ \bar{c} {ij} = c {ij} - \pi_ i + \pi_ j = 0 \quad \forall (i,j) \in T \] 任选一个顶点势为参考点(如设 \( \pi_ 1 = 0 \)),然后解出其他: 对 \( (1,2) \in T \):\( 2 - 0 + \pi_ 2 = 0 \) ⇒ \( \pi_ 2 = -2 \) 对 \( (1,3) \in T \):\( 4 - 0 + \pi_ 3 = 0 \) ⇒ \( \pi_ 3 = -4 \) 对 \( (2,4) \in T \):\( 3 - (-2) + \pi_ 4 = 0 \) ⇒ \( \pi_ 4 = -5 \) 步骤4:检查非树边的最优性条件 计算非树边 \( (i,j) \) 的简约成本: \( \bar{c} {23} = c {23} - \pi_ 2 + \pi_ 3 = 1 - (-2) + (-4) = -1 \) \( \bar{c} {34} = c {34} - \pi_ 3 + \pi_ 4 = 2 - (-4) + (-5) = 1 \) 最优条件:对最小化问题,若所有非树边 \( \bar{c} {ij} \geq 0 \) 则最优。这里 \( \bar{c} {23} = -1 < 0 \),故边 \( (2,3) \) 可进基以降低成本。 步骤5:确定进基边与调整流量 进基边:\( e_ {\text{in}} = (2,3) \),其简约成本为负。 在生成树 \( T \) 中加入 \( (2,3) \) 会形成一个 圈 :2 → 3 → 1 → 2(路径:2→3是新边,3→1是树边反向,1→2是树边)。 沿圈调整流量:在圈上,正向边(与进基边方向一致)增加流量 \( \theta \),反向边减少 \( \theta \),同时保持流量守恒。 圈边方向:\( (2,3)^+ \), \( (3,1)^- \)(对应 \( (1,3) \) 反向),\( (1,2)^- \)。 确定 \( \theta \) 上限: 正向边不能超过上界:\( x_ {23} + \theta \leq 8 \)(上界8,当前0)⇒ \( \theta \leq 8 \) 反向边不能低于下界:\( x_ {13} - \theta \geq 0 \)(当前3)⇒ \( \theta \leq 3 \);\( x_ {12} - \theta \geq 0 \)(当前5)⇒ \( \theta \leq 5 \) 取最小值 \( \theta^* = 3 \)(由 \( x_ {13} \) 限制)。 更新圈上流量: \( x_ {23} = 0 + 3 = 3 \) \( x_ {13} = 3 - 3 = 0 \) \( x_ {12} = 5 - 3 = 2 \) 出基边:流量变为下界的边 \( (1,3) \)(流量变为0)离开基。 步骤6:更新生成树与迭代 新生成树 \( T' = \{ (1,2), (2,4), (2,3) \} \),非树边 \( (1,3), (3,4) \)。 重新计算顶点势(仍设 \( \pi_ 1=0 \)): \( (1,2) \):\( 2 - 0 + \pi_ 2 = 0 \) ⇒ \( \pi_ 2 = -2 \) \( (2,4) \):\( 3 - (-2) + \pi_ 4 = 0 \) ⇒ \( \pi_ 4 = -5 \) \( (2,3) \):\( 1 - (-2) + \pi_ 3 = 0 \) ⇒ \( \pi_ 3 = -3 \) 计算非树边简约成本: \( \bar{c}_ {13} = 4 - 0 + (-3) = 1 \geq 0 \) \( \bar{c}_ {34} = 2 - (-3) + (-5) = 0 \geq 0 \) 所有非树边简约成本非负,达到最优。 最优解 : \[ x_ {12}^* = 2, \quad x_ {13}^* = 0, \quad x_ {23}^* = 3, \quad x_ {24}^* = 5, \quad x_ {34}^* = 0 \] 总成本:\( 2 \times 2 + 4 \times 0 + 1 \times 3 + 3 \times 5 + 2 \times 0 = 4+0+3+15=22 \) 4. 对偶问题与经济解释 原问题的对偶变量为顶点势 \( \pi_ i \) 和边上的冗余变量。 对偶问题 : \[ \max \sum_ {i \in V} b_ i \pi_ i - \sum_ {(i,j) \in E} u_ {ij} w_ {ij} + \sum_ {(i,j) \in E} l_ {ij} v_ {ij} \] \[ \text{s.t.} \quad \pi_ i - \pi_ j - w_ {ij} + v_ {ij} \leq c_ {ij}, \quad w_ {ij}, v_ {ij} \geq 0 \] 其中 \( w_ {ij}, v_ {ij} \) 对应容量上下界的对偶变量。 经济解释 : \( \pi_ i \) 可理解为顶点 \( i \) 的 影子价格 (即在该点增加一单位供应的边际成本减少量)。 实例中最优势:\( \pi_ 1=0, \pi_ 2=-2, \pi_ 3=-3, \pi_ 4=-5 \)。 从工厂(顶点1)发货成本基准为0。 客户A(顶点3)的影子价格-3,意味着若其需求增加1单位,总成本将增加3(因为 \( \pi_ 3 - \pi_ 1 = -3 \),实际增加 \( |\pi_ 3| = 3 \))。 客户B(顶点4)更“贵”(-5),因其需求需经更贵路径满足。 简约成本 \( \bar{c} {ij} = c {ij} - \pi_ i + \pi_ j \) 表示通过边 \( (i,j) \) 运输的 净成本 减去两端影子价格差。最优时,对非树边 \( \bar{c}_ {ij} \geq 0 \) 意味着使用该边不会更省(树边正好平衡)。 5. 核心要点总结 网络单纯形法优势 :利用图结构,迭代在生成树上进行,避免普通单纯形法的大矩阵运算,复杂度更低。 最优性判定 :所有非树边简约成本非负(最小化问题)。 经济意义 :顶点势提供资源定价,指导网络资源配置。 此问题广泛用于物流、通信、电力调度等领域,是网络优化和线性规划结合的经典范例。