基于线性规划的“最大流问题中最小化最大边负载的公平分配模型”求解示例
字数 6571 2025-12-24 12:19:44

基于线性规划的“最大流问题中最小化最大边负载的公平分配模型”求解示例

我将为您讲解一个关于网络流中公平分配的经典问题。这个问题是在经典最大流问题的基础上,增加了一个优化目标:在满足最大流量的前提下,最小化任何单条边上的流量负载,以实现更均衡的分配。这在实际网络中非常重要,可以避免某些链路过载。


1. 问题描述

我们有一个有向图 \(G = (V, E)\),其中 \(V\) 是顶点集,\(E\) 是边集。每条边 \(e \in E\) 有一个非负容量 \(c(e)\)。图中有一个源点 \(s \in V\) 和一个汇点 \(t \in V\)

经典最大流问题的目标是找到从 \(s\)\(t\) 的一个可行流 \(f: E \to \mathbb{R}_{\ge 0}\),在满足容量约束(对每条边 \(e\),有 \(0 \le f(e) \le c(e)\))和流量守恒(对每个非源非汇的顶点 \(v\),流入等于流出)的前提下,最大化从 \(s\) 净流出到 \(t\) 的流量值。

在本问题中,我们增加了一个目标:不仅要实现最大流,还要使得整个网络中单条边上流量的最大值尽可能小。这可以避免流量过度集中在少数几条“关键”边上,从而提高网络的健壮性和公平性。

用数学语言描述,我们有两个目标:

  1. 首要目标:最大化从 \(s\)\(t\) 的流量 \(F\)
  2. 次要目标:在实现最大流量 \(F^*\) 的所有可行流中,最小化最大边负载 \(L = \max_{e \in E} f(e)\)

我们可以将其转化为一个两阶段优化问题,或者一个分层(Lexicographic)优化问题。一个更巧妙的方法是通过线性规划一次性建模。


2. 线性规划建模

设决策变量为:

  • \(f(e)\) :边 \(e\) 上的流量。
  • \(F\) :从源点 \(s\) 流出的总流量(也等于流入汇点 \(t\) 的总流量)。
  • \(L\) :一个辅助变量,表示所有边流量的最大值,即 \(L = \max_{e \in E} f(e)\)

我们的线性规划模型如下:

目标函数
我们希望在流量最大的前提下,让最大边负载最小。这可以通过一个分层目标加权和来实现。这里,我们可以构造一个线性组合目标,但更严谨、保证首要目标优先的方法是两阶段法。我们也可以使用一个单一线性规划,通过引入一个极大极小(Minimax) 目标,并约束总流量为某个值。但为了找到“公平的最大流”,我们可以将问题重新表述为:

给定一个最大边负载上限 \(\lambda\),我们能获得的最大流量 \(F\) 是多少?

然后,我们寻找最小的 \(\lambda\),使得在该 \(\lambda\) 下能获得的最大流量 \(F\) 等于全局最大流 \(F^*\)。这就是二分搜索的思路。

不过,我们可以将整个过程整合进一个线性规划,通过将 \(L\) 作为变量,并最大化 \(F - \epsilon L\),其中 \(\epsilon\) 是一个非常小的正数(例如 \(10^{-6}\))。这样,求解器会优先最大化 \(F\),在 \(F\) 达到最大后,再最小化 \(L\)。这称为“ε-约束法”或“字典序优化”的线性规划近似。

最终,我们建立的单目标线性规划如下:

决策变量

  • \(f_{ij} \ge 0\) 对每条有向边 \((i,j) \in E\)
  • \(F \ge 0\)
  • \(L \ge 0\)

目标函数

\[\text{Maximize} \quad F - \epsilon L \]

其中 \(0 < \epsilon \ll 1\) 是一个足够小的数,以确保最大化 \(F\) 是首要目标。

约束条件

  1. 容量与最大负载约束:每条边的流量不能超过其容量,也不能超过我们想最小化的那个最大值 \(L\)

\[ f_{ij} \le c_{ij}, \quad \forall (i,j) \in E \]

\[ f_{ij} \le L, \quad \forall (i,j) \in E \]

(注意:第二个约束正是定义了 $ L $ 是所有 $ f_{ij} $ 的上界,而最小化 $ L $ 的目标会驱使 $ L $ 下降到等于最大的那个 $ f_{ij} $。)
  1. 流量守恒约束

\[ \sum_{j: (i,j) \in E} f_{ij} - \sum_{j: (j,i) \in E} f_{ji} = \begin{cases} F, & \text{if } i = s \\ -F, & \text{if } i = t \\ 0, & \text{otherwise} \end{cases} \]

对于所有 $ i \in V $。
  1. 非负性

\[ f_{ij} \ge 0, \quad F \ge 0, \quad L \ge 0. \]

模型解释

  • 目标函数 \(\max \, F - \epsilon L\) 是一个字典序优化的技巧。由于 \(\epsilon\) 非常小,任何 \(F\) 的微小增加对目标值的贡献都远大于 \(L\) 的减少。因此,求解器会优先将 \(F\) 推到其可能的最大值 \(F^*\)
  • 一旦 \(F\) 达到 \(F^*\),目标函数中 \(F\) 部分固定,优化就等价于 \(\min \, L\)(因为 \(-\epsilon L\))。
  • 约束 \(f_{ij} \le L\) 确保了 \(L\) 至少是所有实际流量的最大值。在最小化 \(L\) 的驱动下,最优解中 \(L\) 将等于 \(\max_{e} f(e)\)

这个线性规划模型可以直接用单纯形法或内点法求解。


3. 逐步求解过程(结合一个简单示例)

为了便于理解,我们用一个具体的网络示例。

示例网络

  • 顶点: \(V = \{s, a, b, t\}\)
  • 有向边及容量:
    \(E = \{ (s,a): 4, (s,b): 3, (a,b): 2, (a,t): 3, (b,t): 4 \}\)
  • 源点: \(s\),汇点: \(t\)

我们可以先直观地看一下这个网络。经典最大流很容易算出是 6(路径 s->a->t 流3,s->a->b->t 流1,s->b->t 流3)。但在这个流中,边 (s,a) 负载为4, (b,t) 负载为4, (s,b) 负载为3, (a,t) 负载为3, (a,b) 负载为1。最大边负载 \(L = 4\)

我们能做得更均衡吗?比如让所有边负载不超过 3.5?我们需要用模型来求解。

步骤1:建立线性规划模型

设变量: \(f_{sa}, f_{sb}, f_{ab}, f_{at}, f_{bt}, F, L\)

目标: \(\max \, F - 0.001L\) (取 \(\epsilon = 0.001\))。

约束:

  1. 容量约束

\[ f_{sa} \le 4, \quad f_{sb} \le 3, \quad f_{ab} \le 2, \quad f_{at} \le 3, \quad f_{bt} \le 4. \]

  1. 最大负载约束

\[ f_{sa} \le L, \quad f_{sb} \le L, \quad f_{ab} \le L, \quad f_{at} \le L, \quad f_{bt} \le L. \]

  1. 流量守恒

    • 对于 \(s\)\(f_{sa} + f_{sb} = F\)
    • 对于 \(a\)\(f_{sa} - f_{ab} - f_{at} = 0\)
    • 对于 \(b\)\(f_{sb} + f_{ab} - f_{bt} = 0\)
    • 对于 \(t\)\(f_{at} + f_{bt} = F\)
  2. 非负:所有变量 \(\ge 0\)

步骤2:求解线性规划(理论分析)

我们可以用单纯形法或任何LP求解器求解。但我们可以通过逻辑推理来理解。

首先,忽略次要目标(即先求最大流)。我们求解一个标准的只最大化 \(F\) 的最大流线性规划(去掉目标中的 \(-\epsilon L\) 和约束 \(f_{ij} \le L\))。这得到 \(F^* = 6\)

现在,在保持 \(F = 6\) 的前提下,我们引入 \(L\) 并希望最小化它。问题转化为:

最小化 \(L\)
满足

  • 所有容量约束。
  • 流量守恒约束(其中 \(F=6\) 作为已知常数代入)。
  • \(f_{ij} \le L\) 对所有边。
  • 变量非负。

这等价于:在保证总流量为6的前提下,寻找一个最大边负载最小的流分配。

步骤3:分析最小化 \(L\) 的阶段

由于 \(F=6\) 固定,我们看关键边:

  • 总流出 \(f_{sa} + f_{sb} = 6\)
  • 总流入 \(f_{at} + f_{bt} = 6\)
  • 边 (a,b) 容量为2,是一个瓶颈。

我们希望各边流量尽量平均,即尽量接近 \(L\)。但 \(L\) 不能太小,否则会限制总流量。

试设 \(L = 3.5\)

  • \(s\) 出发的两条边,最多提供 \(3.5 + 3.5 = 7\) 的容量,但 \(f_{sb} \le 3\)(容量限制),所以实际最多 \(f_{sa} \le 3.5, f_{sb} \le 3\) => 从s最大流出 \(6.5\),满足要求。

  • 进入 \(t\) 的两条边,最多提供 \(3.5 + 3.5 = 7\) 的容量,但 \(f_{at} \le 3\)(容量限制),所以实际最多 \(f_{at} \le 3, f_{bt} \le 3.5\) => 进入t最大流入 \(6.5\),满足要求。

  • 关键是内部边 (a,b) 容量为2,也小于等于 \(L=3.5\),没问题。

  • 我们需要检查是否存在一个流分配满足所有守恒方程。这可以通过求解一个可行流问题验证。实际上,我们可以尝试构造:
    \(f_{sa} = x, f_{sb} = 6-x\)
    由a点守恒: \(x = f_{ab} + f_{at}\)
    由b点守恒: \((6-x) + f_{ab} = f_{bt}\)
    由t点守恒: \(f_{at} + f_{bt} = 6\)
    且约束: \(f_{ab} \le 2, f_{at} \le 3, f_{bt} \le 4\)
    以及所有 \(f \le 3.5\)

    尝试 \(x = 3.5\): 则 \(f_{sb}=2.5\)
    从a: \(3.5 = f_{ab} + f_{at}\),且 \(f_{at} \le 3\) => \(f_{ab} \ge 0.5\)
    从b: \(2.5 + f_{ab} = f_{bt}\)
    从t: \(f_{at} + f_{bt} = 6\)
    解这个方程组:由 \(f_{at} = 3.5 - f_{ab}\),代入t点: \((3.5 - f_{ab}) + (2.5 + f_{ab}) = 6\) => 6=6,恒成立。所以我们有自由度。
    我们希望 \(f_{ab} \le 2\),且 \(f_{at} \le 3\)\(f_{bt} = 2.5+f_{ab} \le 3.5\) => \(f_{ab} \le 1.0\)
    同时 \(f_{at} = 3.5 - f_{ab} \le 3\) => \(f_{ab} \ge 0.5\)
    \(f_{ab} = 0.75\),则 \(f_{at} = 2.75\)\(f_{bt} = 3.25\),所有值满足 \(\le 3.5\) 且满足容量约束。所以 \(L=3.5\) 是可行的。

试设 \(L = 3\)
此时,从s出发: \(f_{sa} \le 3, f_{sb} \le 3\)(容量限制更紧),最大流出为6,必须用满: \(f_{sa}=3, f_{sb}=3\)
进入t: \(f_{at} \le 3, f_{bt} \le 3\),但 \(f_{at}+f_{bt}=6\) 迫使 \(f_{at}=3, f_{bt}=3\)
看a点守恒: \(f_{sa}=3 = f_{ab} + f_{at} = f_{ab} + 3\) => \(f_{ab} = 0\)
b点守恒: \(f_{sb}+f_{ab}=3+0 = f_{bt}=3\),成立。
所有流量值: (3,3,0,3,3),最大边负载确实是3。检查容量: \(f_{ab}=0 \le 2\),其他都等于容量上限。所以 \(L=3\) 也是可行的!而且比3.5更优。

试设 \(L=2.9\)
从s出发: \(f_{sa} \le 2.9, f_{sb} \le 2.9\)(但 \(f_{sb}\) 容量为3,所以受L限制),最大总流出 \(\le 5.8 < 6\),无法达到总流量6。所以不可行。

因此,最小的最大边负载 \(L^* = 3\),此时总流量 \(F^*=6\) 依然能达到。

步骤4:解读结果

我们找到了“最公平”的最大流方案:流量分配为 \(f_{sa}=3, f_{sb}=3, f_{ab}=0, f_{at}=3, f_{bt}=3\),总流量为6,最大边负载为3。相比于初始那个负载为4的方案,这个方案将流量更均匀地分摊到了各条边上(除了未使用的 (a,b)),最大负载从4降到了3。

这在实际网络中意味着:通过智能地路由流量(这里让所有流量走两条不重叠的路径 s-a-t 和 s-b-t),避免了任何单条边的拥塞,提高了网络资源的利用率均衡度。


4. 算法总结与扩展

  1. 求解方法:本问题可以通过求解一个单目标线性规划(使用 \(\max F - \epsilon L\) 目标)直接获得。计算复杂度取决于所使用的LP算法(如多项式时间的内点法)。
  2. 实际应用:这个模型在通信网络、交通规划、数据中心的负载均衡中非常有用。例如,在软件定义网络(SDN)中,控制器可以基于此模型计算路由,以在满足吞吐量需求的同时,最小化任何链路的利用率峰值。
  3. 变体与扩展
    • 可以最小化负载的方差负载的加权最大值(不同边有不同的重要性)。
    • 可以结合多商品流(多种流量需求),在满足每种需求的同时,最小化全局最大链路利用率。
    • 该问题是“最小最大利用率流问题”或“拥塞最小化最大流问题”的一个典型例子,常常与并发流(Concurrent Flow) 问题相关联。

这个示例展示了如何在线性规划的框架下,将公平性等二级目标自然地整合到经典网络流问题中,并通过巧妙的建模和标准的优化算法进行求解。

基于线性规划的“最大流问题中最小化最大边负载的公平分配模型”求解示例 我将为您讲解一个关于网络流中公平分配的经典问题。这个问题是在经典最大流问题的基础上,增加了一个优化目标:在满足最大流量的前提下,最小化任何单条边上的流量负载,以实现更均衡的分配。这在实际网络中非常重要,可以避免某些链路过载。 1. 问题描述 我们有一个有向图 \( G = (V, E) \),其中 \( V \) 是顶点集,\( E \) 是边集。每条边 \( e \in E \) 有一个非负容量 \( c(e) \)。图中有一个源点 \( s \in V \) 和一个汇点 \( t \in V \)。 经典最大流问题的目标是找到从 \( s \) 到 \( t \) 的一个可行流 \( f: E \to \mathbb{R}_ {\ge 0} \),在满足 容量约束 (对每条边 \( e \),有 \( 0 \le f(e) \le c(e) \))和 流量守恒 (对每个非源非汇的顶点 \( v \),流入等于流出)的前提下,最大化从 \( s \) 净流出到 \( t \) 的流量值。 在本问题中,我们增加了一个目标:不仅要实现最大流,还要使得整个网络中 单条边上流量的最大值 尽可能小。这可以避免流量过度集中在少数几条“关键”边上,从而提高网络的健壮性和公平性。 用数学语言描述,我们有两个目标: 首要目标 :最大化从 \( s \) 到 \( t \) 的流量 \( F \)。 次要目标 :在实现最大流量 \( F^* \) 的所有可行流中,最小化最大边负载 \( L = \max_ {e \in E} f(e) \)。 我们可以将其转化为一个 两阶段优化问题 ,或者一个 分层(Lexicographic)优化问题 。一个更巧妙的方法是通过线性规划一次性建模。 2. 线性规划建模 设决策变量为: \( f(e) \) :边 \( e \) 上的流量。 \( F \) :从源点 \( s \) 流出的总流量(也等于流入汇点 \( t \) 的总流量)。 \( L \) :一个辅助变量,表示所有边流量的最大值,即 \( L = \max_ {e \in E} f(e) \)。 我们的线性规划模型如下: 目标函数 : 我们希望在流量最大的前提下,让最大边负载最小。这可以通过一个 分层目标 或 加权和 来实现。这里,我们可以构造一个 线性组合目标 ,但更严谨、保证首要目标优先的方法是 两阶段法 。我们也可以使用一个 单一线性规划 ,通过引入一个 极大极小(Minimax) 目标,并约束总流量为某个值。但为了找到“公平的最大流”,我们可以将问题重新表述为: 给定一个 最大边负载上限 \( \lambda \),我们能获得的最大流量 \( F \) 是多少? 然后,我们寻找最小的 \( \lambda \),使得在该 \( \lambda \) 下能获得的最大流量 \( F \) 等于全局最大流 \( F^* \)。这就是 二分搜索 的思路。 不过,我们可以将整个过程整合进一个线性规划,通过将 \( L \) 作为变量,并最大化 \( F - \epsilon L \),其中 \( \epsilon \) 是一个非常小的正数(例如 \( 10^{-6} \))。这样,求解器会 优先最大化 \( F \) ,在 \( F \) 达到最大后,再 最小化 \( L \) 。这称为“ε-约束法”或“字典序优化”的线性规划近似。 最终,我们建立的 单目标线性规划 如下: 决策变量 : \( f_ {ij} \ge 0 \) 对每条有向边 \( (i,j) \in E \)。 \( F \ge 0 \)。 \( L \ge 0 \)。 目标函数 : \[ \text{Maximize} \quad F - \epsilon L \] 其中 \( 0 < \epsilon \ll 1 \) 是一个足够小的数,以确保最大化 \( F \) 是首要目标。 约束条件 : 容量与最大负载约束 :每条边的流量不能超过其容量,也不能超过我们想最小化的那个最大值 \( L \)。 \[ f_ {ij} \le c_ {ij}, \quad \forall (i,j) \in E \] \[ f_ {ij} \le L, \quad \forall (i,j) \in E \] (注意:第二个约束正是定义了 \( L \) 是所有 \( f_ {ij} \) 的上界,而最小化 \( L \) 的目标会驱使 \( L \) 下降到等于最大的那个 \( f_ {ij} \)。) 流量守恒约束 : \[ \sum_ {j: (i,j) \in E} f_ {ij} - \sum_ {j: (j,i) \in E} f_ {ji} = \begin{cases} F, & \text{if } i = s \\ -F, & \text{if } i = t \\ 0, & \text{otherwise} \end{cases} \] 对于所有 \( i \in V \)。 非负性 : \[ f_ {ij} \ge 0, \quad F \ge 0, \quad L \ge 0. \] 模型解释 : 目标函数 \( \max \, F - \epsilon L \) 是一个字典序优化的技巧。由于 \( \epsilon \) 非常小,任何 \( F \) 的微小增加对目标值的贡献都远大于 \( L \) 的减少。因此,求解器会优先将 \( F \) 推到其可能的最大值 \( F^* \)。 一旦 \( F \) 达到 \( F^* \),目标函数中 \( F \) 部分固定,优化就等价于 \( \min \, L \)(因为 \( -\epsilon L \))。 约束 \( f_ {ij} \le L \) 确保了 \( L \) 至少是所有实际流量的最大值。在最小化 \( L \) 的驱动下,最优解中 \( L \) 将等于 \( \max_ {e} f(e) \)。 这个线性规划模型可以直接用单纯形法或内点法求解。 3. 逐步求解过程(结合一个简单示例) 为了便于理解,我们用一个具体的网络示例。 示例网络 : 顶点: \( V = \{s, a, b, t\} \) 有向边及容量: \( E = \{ (s,a): 4, (s,b): 3, (a,b): 2, (a,t): 3, (b,t): 4 \} \) 源点: \( s \),汇点: \( t \)。 我们可以先直观地看一下这个网络。经典最大流很容易算出是 6(路径 s->a->t 流3,s->a->b->t 流1,s->b->t 流3)。但在这个流中,边 (s,a) 负载为4, (b,t) 负载为4, (s,b) 负载为3, (a,t) 负载为3, (a,b) 负载为1。最大边负载 \( L = 4 \)。 我们能做得更均衡吗?比如让所有边负载不超过 3.5?我们需要用模型来求解。 步骤1:建立线性规划模型 设变量: \( f_ {sa}, f_ {sb}, f_ {ab}, f_ {at}, f_ {bt}, F, L \)。 目标: \( \max \, F - 0.001L \) (取 \( \epsilon = 0.001 \))。 约束: 容量约束 : \[ f_ {sa} \le 4, \quad f_ {sb} \le 3, \quad f_ {ab} \le 2, \quad f_ {at} \le 3, \quad f_ {bt} \le 4. \] 最大负载约束 : \[ f_ {sa} \le L, \quad f_ {sb} \le L, \quad f_ {ab} \le L, \quad f_ {at} \le L, \quad f_ {bt} \le L. \] 流量守恒 : 对于 \( s \): \( f_ {sa} + f_ {sb} = F \)。 对于 \( a \): \( f_ {sa} - f_ {ab} - f_ {at} = 0 \)。 对于 \( b \): \( f_ {sb} + f_ {ab} - f_ {bt} = 0 \)。 对于 \( t \): \( f_ {at} + f_ {bt} = F \)。 非负 :所有变量 \( \ge 0 \)。 步骤2:求解线性规划(理论分析) 我们可以用单纯形法或任何LP求解器求解。但我们可以通过逻辑推理来理解。 首先,忽略次要目标(即先求最大流)。我们求解一个标准的 只最大化 \( F \) 的最大流线性规划(去掉目标中的 \( -\epsilon L \) 和约束 \( f_ {ij} \le L \))。这得到 \( F^* = 6 \)。 现在,在保持 \( F = 6 \) 的前提下,我们引入 \( L \) 并希望最小化它。问题转化为: 最小化 \( L \) 满足 : 所有容量约束。 流量守恒约束(其中 \( F=6 \) 作为已知常数代入)。 \( f_ {ij} \le L \) 对所有边。 变量非负。 这等价于:在保证总流量为6的前提下,寻找一个最大边负载最小的流分配。 步骤3:分析最小化 \( L \) 的阶段 由于 \( F=6 \) 固定,我们看关键边: 总流出 \( f_ {sa} + f_ {sb} = 6 \)。 总流入 \( f_ {at} + f_ {bt} = 6 \)。 边 (a,b) 容量为2,是一个瓶颈。 我们希望各边流量尽量平均,即尽量接近 \( L \)。但 \( L \) 不能太小,否则会限制总流量。 试设 \( L = 3.5 \) : 从 \( s \) 出发的两条边,最多提供 \( 3.5 + 3.5 = 7 \) 的容量,但 \( f_ {sb} \le 3 \)(容量限制),所以实际最多 \( f_ {sa} \le 3.5, f_ {sb} \le 3 \) => 从s最大流出 \( 6.5 \),满足要求。 进入 \( t \) 的两条边,最多提供 \( 3.5 + 3.5 = 7 \) 的容量,但 \( f_ {at} \le 3 \)(容量限制),所以实际最多 \( f_ {at} \le 3, f_ {bt} \le 3.5 \) => 进入t最大流入 \( 6.5 \),满足要求。 关键是内部边 (a,b) 容量为2,也小于等于 \( L=3.5 \),没问题。 我们需要检查是否存在一个流分配满足所有守恒方程。这可以通过求解一个可行流问题验证。实际上,我们可以尝试构造: 设 \( f_ {sa} = x, f_ {sb} = 6-x \)。 由a点守恒: \( x = f_ {ab} + f_ {at} \)。 由b点守恒: \( (6-x) + f_ {ab} = f_ {bt} \)。 由t点守恒: \( f_ {at} + f_ {bt} = 6 \)。 且约束: \( f_ {ab} \le 2, f_ {at} \le 3, f_ {bt} \le 4 \)。 以及所有 \( f \le 3.5 \)。 尝试 \( x = 3.5 \): 则 \( f_ {sb}=2.5 \)。 从a: \( 3.5 = f_ {ab} + f_ {at} \),且 \( f_ {at} \le 3 \) => \( f_ {ab} \ge 0.5 \)。 从b: \( 2.5 + f_ {ab} = f_ {bt} \)。 从t: \( f_ {at} + f_ {bt} = 6 \)。 解这个方程组:由 \( f_ {at} = 3.5 - f_ {ab} \),代入t点: \( (3.5 - f_ {ab}) + (2.5 + f_ {ab}) = 6 \) => 6=6,恒成立。所以我们有自由度。 我们希望 \( f_ {ab} \le 2 \),且 \( f_ {at} \le 3 \), \( f_ {bt} = 2.5+f_ {ab} \le 3.5 \) => \( f_ {ab} \le 1.0 \)。 同时 \( f_ {at} = 3.5 - f_ {ab} \le 3 \) => \( f_ {ab} \ge 0.5 \)。 取 \( f_ {ab} = 0.75 \),则 \( f_ {at} = 2.75 \), \( f_ {bt} = 3.25 \),所有值满足 \( \le 3.5 \) 且满足容量约束。所以 \( L=3.5 \) 是可行的。 试设 \( L = 3 \) : 此时,从s出发: \( f_ {sa} \le 3, f_ {sb} \le 3 \)(容量限制更紧),最大流出为6,必须用满: \( f_ {sa}=3, f_ {sb}=3 \)。 进入t: \( f_ {at} \le 3, f_ {bt} \le 3 \),但 \( f_ {at}+f_ {bt}=6 \) 迫使 \( f_ {at}=3, f_ {bt}=3 \)。 看a点守恒: \( f_ {sa}=3 = f_ {ab} + f_ {at} = f_ {ab} + 3 \) => \( f_ {ab} = 0 \)。 b点守恒: \( f_ {sb}+f_ {ab}=3+0 = f_ {bt}=3 \),成立。 所有流量值: (3,3,0,3,3),最大边负载确实是3。检查容量: \( f_ {ab}=0 \le 2 \),其他都等于容量上限。所以 \( L=3 \) 也是可行的!而且比3.5更优。 试设 \( L=2.9 \) : 从s出发: \( f_ {sa} \le 2.9, f_ {sb} \le 2.9 \)(但 \( f_ {sb} \) 容量为3,所以受L限制),最大总流出 \( \le 5.8 < 6 \),无法达到总流量6。所以不可行。 因此,最小的最大边负载 \( L^* = 3 \),此时总流量 \( F^* =6 \) 依然能达到。 步骤4:解读结果 我们找到了“最公平”的最大流方案:流量分配为 \( f_ {sa}=3, f_ {sb}=3, f_ {ab}=0, f_ {at}=3, f_ {bt}=3 \),总流量为6,最大边负载为3。相比于初始那个负载为4的方案,这个方案将流量更均匀地分摊到了各条边上(除了未使用的 (a,b)),最大负载从4降到了3。 这在实际网络中意味着:通过智能地路由流量(这里让所有流量走两条不重叠的路径 s-a-t 和 s-b-t),避免了任何单条边的拥塞,提高了网络资源的利用率均衡度。 4. 算法总结与扩展 求解方法 :本问题可以通过求解一个 单目标线性规划 (使用 \( \max F - \epsilon L \) 目标)直接获得。计算复杂度取决于所使用的LP算法(如多项式时间的内点法)。 实际应用 :这个模型在通信网络、交通规划、数据中心的负载均衡中非常有用。例如,在软件定义网络(SDN)中,控制器可以基于此模型计算路由,以在满足吞吐量需求的同时,最小化任何链路的利用率峰值。 变体与扩展 : 可以最小化 负载的方差 或 负载的加权最大值 (不同边有不同的重要性)。 可以结合 多商品流 (多种流量需求),在满足每种需求的同时,最小化全局最大链路利用率。 该问题是“ 最小最大利用率流问题 ”或“ 拥塞最小化最大流问题 ”的一个典型例子,常常与 并发流(Concurrent Flow) 问题相关联。 这个示例展示了如何在线性规划的框架下,将公平性等二级目标自然地整合到经典网络流问题中,并通过巧妙的建模和标准的优化算法进行求解。