基于线性规划的图最小费用循环流问题求解示例
字数 1827 2025-11-09 16:48:11
基于线性规划的图最小费用循环流问题求解示例
题目描述
考虑一个带权有向图 \(G = (V, E)\),每条边 \((i, j) \in E\) 有三个属性:
- 容量上界 \(u_{ij}\)(非负实数)
- 单位流量的费用 \(c_{ij}\)(实数)
- 容量下界 \(l_{ij}\)(默认为 0,可推广到非零值)
图中无源点和汇点,但每个节点 \(i \in V\) 有一个净流量需求 \(b_i\)(流出减流入),需满足 \(\sum_{i \in V} b_i = 0\)。目标:找到一组边流量 \(x_{ij}\),在满足容量约束和流量平衡的前提下,最小化总费用。数学模型如下:
\[\begin{align} \min \quad & \sum_{(i,j) \in E} c_{ij} x_{ij} \\ \text{s.t.} \quad & \sum_{j: (i,j) \in E} x_{ij} - \sum_{j: (j,i) \in E} x_{ji} = b_i \quad \forall i \in V \quad \text{(流量平衡)} \\ & l_{ij} \leq x_{ij} \leq u_{ij} \quad \forall (i,j) \in E \quad \text{(容量约束)} \end{align} \]
解题步骤
-
问题转化
- 若存在下界 \(l_{ij} > 0\),可通过变量替换 \(x'_{ij} = x_{ij} - l_{ij}\) 将其转化为标准形式,同时调整节点的净需求 \(b_i\)(例如,从节点 \(i\) 的 \(b_i\) 中减去 \(l_{ij}\),向节点 \(j\) 的 \(b_j\) 加上 \(l_{ij}\))。
- 替换后目标函数变为 \(\sum c_{ij} x'_{ij} + \text{常数}\),常数项可忽略。
-
构建线性规划模型
- 变量:每条边的流量 \(x_{ij}\)(或替换后的 \(x'_{ij}\))。
- 约束分为两类:
(1)流量平衡约束(每个节点对应一个方程)
(2)容量约束(每个边对应两个不等式,可通过松弛变量转化为等式)。 - 目标函数为流量与费用的加权和。
-
应用单纯形法求解
- 初始基解:引入人工变量或利用图结构生成初始可行解(如通过虚拟流)。
- 迭代过程:
- 计算检验数 \(\sigma_{ij} = c_{ij} - \pi_i + \pi_j\)(其中 \(\pi_i\) 是对偶变量,即节点势)。
- 若存在边 \((i,j)\) 满足 \(\sigma_{ij} < 0\) 且 \(x_{ij} < u_{ij}\),或 \(\sigma_{ij} > 0\) 且 \(x_{ij} > l_{ij}\),则当前解非最优。
- 选择检验数最小的边进入基,通过比率测试确定离基变量,更新流量和势向量。
- 终止条件:所有检验数满足最优性条件(即无改进空间)。
-
处理无界解与不可行性
- 若图中存在负费用循环且容量无界,问题无界(实际中通常有容量限制)。
- 若流量平衡约束与容量约束冲突(如 \(\sum b_i \neq 0\) 或容量无法满足需求),问题不可行。
-
示例验证
假设一个简单图:节点 \(V = \{1,2\}\),边 \(E = \{(1,2), (2,1)\}\),参数如下:- \(c_{12} = 2, u_{12} = 5, l_{12} = 0\)
- \(c_{21} = 1, u_{21} = 3, l_{21} = 0\)
- \(b_1 = 2, b_2 = -2\)
- 求解得最优解:\(x_{12} = 5, x_{21} = 3\)(总费用 \(2 \times 5 + 1 \times 3 = 13\)),验证流量平衡(节点1净流出 \(5-3=2\),节点2净流入 \(3-5=-2\))。
关键点
- 该问题是网络流问题的推广,单纯形法在此类问题中效率较高(通常表现为运输问题或最小费用流问题)。
- 实际应用中可用于通信网络路由、供应链循环配送等场景。