基于线性规划的图最大流问题的多源点多汇点扩展模型求解示例
题目描述
考虑一个带权有向图 \(G = (V, E)\),其中每条边 \((u, v) \in E\) 有一个非负容量 \(c(u, v) \geq 0\)。问题中存在多个源点 \(S \subseteq V\) 和多个汇点 \(T \subseteq V\)(\(S \cap T = \emptyset\))。每个源点 \(s_i \in S\) 有一个供应量 \(a(s_i) > 0\),每个汇点 \(t_j \in T\) 有一个需求量 \(b(t_j) > 0\),且总供应量等于总需求量(即 \(\sum_{s_i \in S} a(s_i) = \sum_{t_j \in T} b(t_j)\))。目标是在满足容量约束和流量守恒约束的前提下,最大化从源点到汇点的总流量。
解题过程
- 问题建模:
定义决策变量 \(f(u, v)\) 表示边 \((u, v)\) 上的流量。目标函数和约束如下:
\[ \text{最大化} \quad \sum_{t_j \in T} \sum_{u \in V} f(u, t_j) \]
约束条件:
- 容量约束:对每条边 \((u, v) \in E\),有 \(0 \leq f(u, v) \leq c(u, v)\)。
- 流量守恒:对每个非源点非汇点的节点 \(v \in V \setminus (S \cup T)\),流入等于流出:
\[ \sum_{u \in V} f(u, v) = \sum_{w \in V} f(v, w) \]
- 源点约束:对每个源点 \(s_i \in S\),净流出不超过供应量:
\[ \sum_{w \in V} f(s_i, w) - \sum_{u \in V} f(u, s_i) \leq a(s_i) \]
- 汇点约束:对每个汇点 \(t_j \in T\),净流入等于需求量:
\[ \sum_{u \in V} f(u, t_j) - \sum_{w \in V} f(t_j, w) = b(t_j) \]
注意:目标函数也可写为总流出或总流入,因流量守恒而等价。
-
转换为单源单汇问题:
通过添加一个超级源点 \(s^*\) 和超级汇点 \(t^*\) 简化问题:- 从 \(s^*\) 到每个源点 \(s_i \in S\) 添加边,容量为 \(a(s_i)\)。
- 从每个汇点 \(t_j \in T\) 到 \(t^*\) 添加边,容量为 \(b(t_j)\)。
新图中,目标变为求从 \(s^*\) 到 \(t^*\) 的最大流。若最大流值等于总供应量(或总需求量),则原问题有可行解。
-
求解方法:
使用标准最大流算法(如Edmonds-Karp或Push-Relabel)求解转换后的图。步骤如下:- 步骤1:构建扩展图 \(G'\),包含原图所有节点和边,新增 \(s^*\) 和 \(t^*\),并添加容量边。
- 步骤2:在 \(G'\) 上运行最大流算法,得到流函数 \(f\)。
- 步骤3:若最大流值 \(F = \sum_{s_i \in S} a(s_i)\),则原问题有解;否则无可行解。原问题的解为 \(f\) 在原图边上的限制。
-
实例验证:
设图有 \(V = \{s_1, s_2, t_1, t_2, u\}\),边容量:
\((s_1, u): 3\), \((s_2, u): 2\), \((u, t_1): 4\), \((u, t_2): 1\)。
供应量 \(a(s_1)=3, a(s_2)=2\),需求量 \(b(t_1)=4, b(t_2)=1\)。- 添加超级源点 \(s^*\) 到 \(s_1, s_2\) 的边(容量3和2),超级汇点 \(t^*\) 从 \(t_1, t_2\) 的边(容量4和1)。
- 在 \(G'\) 上求最大流:流路径 \(s^* \to s_1 \to u \to t_1\) 送3单位,\(s^* \to s_2 \to u \to t_2\) 送1单位,\(s^* \to s_2 \to u \to t_1\) 送1单位。总流值为5,等于总供应量,解可行。
-
复杂性与应用:
复杂度取决于所用最大流算法(如Edmonds-Karp为 \(O(|V||E|^2)\))。该模型适用于物流网络中的多仓库配送、通信网络的多播流等问题。