“问题页应把求解路线分开:连续最短路每次在残量网络增广并用势保持非负约化成本;Network Simplex在生成树基之间 pivot,工程行为与最坏理论不同;带下界需求环流先处理可行性和基准…”
形式陈述 ​
残量费用 ​
最小费用流
势与 Dijkstra ​
负费用反向边使 Dijkstra 不能直接使用。维护顶点势
先以 Bellman–Ford 距离初始化,使所有可达残量边约化费用非负;此后用 Dijkstra 得距离
最优性不变量 ​
势的对偶可行性等价于残量网络无负约化边;增广后新反向边的约化费用为零。达到目标流量时若残量网络无负费用环,就不存在保持流量而降低费用的循环调整,流为最优。
直觉
每次最短残量路把新增流量送到当前最便宜的可修正路线;反向弧允许后来撤销早先选择。节点势把可能为负的原费用重写成非负约化费用,并在每轮最短距离更新后保持这一性质,所以后续仍可使用 Dijkstra。
例子与边界
例子与边界 ​
先沿一条便宜路径送流后,后续更优组合可能需要走反向边撤销其中一段;反向费用取负正是表达这种修正。按单位容量增广会做
复杂度与起始可行流 ​
若每轮用二叉堆 Dijkstra 为
有下界/需求时应先用可行环流归约找到起始流。若根本无可行流,SSP 不能从零流硬增广后宣称最优;原始可行性和费用最优性是两道证书。
推论与应用
节点势维护约化费用非负,最短路增广同时更新原始流和对偶势,因此该算法是原始—对偶方法:可行流是原始对象,势与零约化费用边给出对偶互补条件。
一轮增广的数值核对 ​
假设当前势为
而最短路上的边等号成立。于是下一轮仍可使用 Dijkstra,且新增反向边的约化费用也为零。
一次路径增广量是路径剩余容量与尚缺流量的最小值。若容量整数且每轮至少增广 1,朴素复杂度可写
初始图有负费用边时,零势未必对偶可行;可先用 Bellman–Ford 求初始势,或从已知可行对偶开始。若存在可达负费用环且流量未固定,最优性与有界性问题也要先处理。
参考资料
- Ravindra Ahuja, Thomas Magnanti, James Orlin, Network Flows, 1993.
- Jack Edmonds, Richard Karp, Theoretical Improvements in Algorithmic Efficiency for Network Flow Problems, JACM, 1972.