网络流与匹配:小费用大流问题及其算法.pdfVIP

  • 0
  • 0
  • 约3.73千字
  • 约 3页
  • 2026-01-30 发布于北京
  • 举报

网络流与匹配:小费用大流问题及其算法.pdf

五、最小费用最大流问题

(一)问题描述

在实际问题中,设计“流”的同时,人们考虑的还不只是流量,而且还有“费用”的因素。例如

下图是一个公路网,Vs是仓库甲所在地,即物资输送的起点,Vt为仓库乙,即物资的终点,

每一条弧标有两个数字。第1个数字表示某一时间通过公路的最多吨数,第2个数字表

示每吨物资通过该公路的费用(单价)。现在的问题是怎样安排,才能使得从起点到终

点的物资最多,又使得总的运费最少?

显然,这是一个网络流图,其每一条弧(Vi,Vj)除给定的容量Cij外,还给定了一个单位流

量费用Bij≥0。上述问题的求解目标是:求一个最大流,使总的费用B(f)取极小

(二)最小费用最大流算法

1、根据最小费用的定义,求最小费用最大流的算法设计思路:

我们首先考察一下,当沿着一条关于可行流F的可增广路P,以δ=1调整F,得到新的可行

流F’,则源点的净输出量V(F’)=V(F)+1。而B(F’)比B(F)增加了多少?

B(F’)-B(F)=[]

Fij’-Fij=δ1

B(F’)-B(F)

我们把称为这条可增广路P的“费用”。

其次,若F是流量为V(F)的所有可行流中费用最小者,而P是关于F的所有可增广路中费

用最小的可增广路,那么沿P去调整F,得到的可行流F’,即流量为V(F’)的所有新的可行

流中的最小费用流。这样,当F是最大流时,它也是我们所要求的最小费用最大流了。

2、由于Bij≥0所以可行流F=0必是流量为0的最小费用流。这样,总可以以F=0开始。

一般地,设已知F是流量U(F)的最小费用流。余下的问题是如何去寻找关于该流F的最小

费用可增广路。为此,我们构造一个带权有向图W(F),他的顶点时原网络D的顶点,而把

D中的每一条弧(Vi,Vj)变成两个方向相反的弧(Vi,Vj)和(Vj,Vi),定义W(F)中弧的权

Wij为:

于是在网络中寻求关于F的最小费用可增广路,就等价于在带权有向图W(F)中,寻求从Vs

到Vt的最短路。

因此有如下算法:

开始时取可行流中最小费用流F=0,记为F(0)=0,一般地,若在第k-1步得到最小费用流

F(k-1),则构造带权有向图W(F(k-1)),在W(F(k-1))中,寻求Vs到Vt的最短路。

若不存在最短路(即最短路的权是+∞),则F(k-1)即最小费用最大流;若存在最短路,则在

原网络D中得此相应的可增广路P,在可增广路P上对F(k-1)进行改进

得到新的最小费用可行流F(k),再对F(k)重复上述步骤。

下面以一开始提到的公路网为例:

最小费用最大流算法实现

1、数据结构

Constmaxn=顶点数

Type

Arctype=record{弧类型}

Max:integer;{容量}

Act:integer;{流量}

End;

Settype=setofbyte;

Var

N1,Node:array[1..maxn]ofinteger;{辅助容量,最佳路径序列}

Arc:array[1..maxn,1..maxn]ofarctype;{网络}

W,b:array[1..maxn,1..maxn]ofinteger;{最小费用和单位费用}

Success:boolean;

Start,ends,a,n,min:integer;{发点,收点,改变量,结点个数,最佳代价}

2、主要算法

1求从start到ends的最短路径,若无最短路,则min=maxint。

Proceduregetting_path(s,tot:integer;m:settype)

{s为待扩展结点,tot当前路径代价,m当前最佳路径结点集合}

Vari:integer;

Begin

Ifs=endsthen

Begi

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档