1.前言
- 在学习最小费用流算法时,对其算法的设计,条件的设计,算法的流程有很大的疑惑,遂花时间来理解
- 本文仅个人理解,仅供参考
- 阅读本文前,最好已经了解过最大流算法,知道如何寻找增广路
- 博主目前无法证明最小费用流算法的正确定,这里只介绍其原理及流程
- 后续可能会添加实例,或者介绍最大流算法
2.问题

给定流值v,找到从 s->t 流值为 v 的流中,花费最小的那个流
3.可以写成如下规划

我们在图中,会用一对数表示一条边的信息,(a, b):
-
其中 a 代表边的长度,也就是单位花费
-
b 代表边的容量,也就是允许通过的最大流值

4.上述规划问题的对偶问题
将原问题的 x i j ≤ c i j x_{ij} \le c_{ij} xij≤cij 写成 − x i j − 新 变 量 = − c i j -x_{ij}-新变量 = -c_{ij} −xij−新变量=−cij 就很容易写成下面的形式

- 每个变量没有很直观的物理意义,我们构造出来只是为了解决原始问题,但是在后面的分析中,我们能够很直观地看出每个变量的作用
5.互补松紧条件
若原问题的可行解 { x i j } \{x_{ij}\} { xij},对偶问题的可行解 { p i , r i j } \{p_i, r_{ij}\} { pi,rij}分别是原问题和对偶问题的最优解,则其充要条件是互补松紧条件,如下所示:
注意:必须要先是可行解,满足互补松紧条件之后,才能是最优解

我们进一步观察,可以通过上述两个等式,推导出下面两个条件

本算法的妙处之一:构造 r i j = m a x ( 0 , p j − p i − w i j ) r_{ij} = max(0, p_j -p_i-w_{ij}) rij=max(0,pj−pi−wij) ,这使得 r i j ≥ p j − p i − w i j r_{ij} \ge p_j-p_i-w_{ij} rij≥pj−pi

本文详细解析了最小费用流算法,包括问题描述、规划对偶、互补松紧条件的应用,以及如何通过增广路寻找最小费用流。关键在于理解互补松紧条件如何确保找到最优解,以及如何在实际操作中维护这一条件。

3017

被折叠的 条评论
为什么被折叠?



