Interactive Textbook · Minimum Cost Flow

最小费用流:原始-对偶算法

这个网页现在不仅能逐步演示固定案例,还支持 自定义节点、边参数、源点、汇点与目标流量 ,方便你把它直接用作课堂讲解、作业演示或算法实验台。

问题目标
以最小总费用发送 4 单位流
源点 \(s\),汇点 \(t\)
核心工具
Dijkstra + Potentials
在非负缩减费用上寻找最短增广路
教学重点
缩减费用保持非负
更新势函数后,可继续安全使用 Dijkstra

算法导航

Primal-Dual
你会看到:路径高亮、边上流量/剩余容量变化、\(\pi\) 的动态更新,以及总费用如何累积。

缩减费用

原始-对偶算法的关键,是把原费用重标定为缩减费用。这样做的目标是让残量网络中的可行边权保持非负。

\[ c_{ij}^{\pi} = c_{ij} - \pi_i + \pi_j \]

若当前残量边满足 \(c_{ij}^{\pi} \ge 0\),就可以直接在缩减费用上运行 Dijkstra。

势函数更新

设本轮在缩减费用图上的最短路距离为 \(d(v)\),则采用下面的更新规则:

\[ \pi_v \leftarrow \pi_v - d(v) \]

在这个符号约定下,更新后新的缩减费用仍保持非负,而且最短路上的“紧边”会变成 0 缩减费用边。

互补松弛条件

直观地说,最优状态下,“真正承载流量的有效边”会和对偶势函数对齐。

\[ \begin{aligned} 0 < x_{ij} < u_{ij} &\implies c_{ij}^{\pi}=0 \\ x_{ij}=0 &\implies c_{ij}^{\pi}\ge 0 \end{aligned} \]

这正是“原始可行 + 对偶可行 + 紧边增广”能逼近最优解的核心逻辑。

自定义网络参数

你可以直接编辑节点集合、边集合、源点、汇点和目标流量。应用后,图、目标描述与算法状态会同步刷新。

节点格式:以逗号分隔,如 s,a,b,c,t 边格式:from,to,capacity,cost
输入说明
1. 节点名建议使用简短标识,例如 s,a,b,t
2. 每条边一行:起点,终点,容量,单位费用
3. 容量与费用必须是数字,容量需为正。
4. 节点位置会自动按圆形布局生成。
当前加载的是默认示例网络。

网络可视化与逐步演示

边标签格式:容量 / 单位费用 / 当前流量 / 当前正向剩余容量。寻找最短路时,路径会被高亮显示。

 普通可行边  待增广路径  上一次增广路径  饱和边
当前阶段
未初始化
目标流量完成度 0 / 4
点击“初始化”开始演示。
已访问