最小费用流问题的研究

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

最小费用流问题的研究
摘要 本文主要研究的是最小费用流问题。

在给出一些定义定理的基础上进一步求解最小费用流问题从而得到更好的算法。

关键字 最小费用流问题 剩余网络 容许网络 算法 复杂度
1最小费用流问题的概述
给定一个有向网络),(A N G =。

其中},...,,...,3,2,1{n i N =表示顶点集合,A 表示G 中的所有弧构成的一个集合。

任意的弧A j i ∈),(,用ij c 表示弧),(j i 上单位流量的费用,用ij u 表示弧),(j i 上的最大流量,任意的N i ∈用)(i b 表示在i 这一点处所提供的流量或所需要的流量。

当0)(>i b 时,表示在i 这一点处所提供的流量为)(i b ,当0)(<i b 时,表示在i 这一点处所需要的流量为)(i b 。

最小费用流问题是指在有容量约束的网络中,当网络容量带有费用约束的时候,我们希望一定的流量在通过网络的时候的费用最小,这就形成了最小费用流模型。

模型如下:
Min ()(),ij ij i j A z x c x ∈=
∑ Subject to
(){}(){}():,:,ij ji j i j A j i j A x x b i ∈∈-
=∑∑
for all i N ∈, 0ij ij x u ≤≤ for all (),i j A ∈
2.cycle-canceling algorithm
定义2.1 给定一个有向网络),(A N G =,给定一个流x ,我们来构造一个网络:对于G 中任意的一条弧A j i ∈),(,我们用弧),(j i 和),(i j 来表示,弧),(j i 的费用用ij c 来表示,弧
),(j i 的剩余容量用ij ij ij x u r -=来表示,弧),(i j 费用用ij ji c c -=来表示,
,弧),(i j 的剩余容量用ij ji x r =来表示。

去掉剩余容量为非正的弧后所构成的图形用)(x G 表示。

我们把)(x G 叫做剩余网络。

定理2.1(Negative Cycle Optimality Conditions )设x *
是最小费用流问题的一个可行解,那么x *是最小费用流问题的一个最优解当且仅当满足negative cycle optimality conditions: 剩余网络)(*x G 中不存在负圈。

根据负圈的最优条件,为了得到可行流x ,我们可以利用找最大流的算法建立一个可行流x ,再根据可行流x 构造剩余网络)(x G 。

在剩余网络)(x G 中找负圈W ,取
(){}:min :,ij r i j W δ=∈沿着W 上的弧增广δ个单位的流,
消去负费用的圈W 。

更新)(x G ,再找负圈,重复上述过程,直到)(x G 中不存在负圈为止。

这样的算法称为cycle-canceling algorithm 。

2.1算法的具体步骤如下:
algorithm cycle-canceling:
begin
establish a feasible flow x in the network;
while ()G x contains a negative cycle do
begin
use some algorithm to identify a negative cycle W ;
(){}:m i n :,ij r i j W δ=∈
augment δ units of flow in the cycle W and update ()G x ;
end;
end;
2.2算法的复杂度分析
在剩余网络)(x G 中用标签法找负圈时,其时间复杂度为)(nm O 。

算法的主要工作量在于连续寻找负圈并消去负圈。

我们用C 表示弧上的费用中的最大者,用U 表示所有弧上的容量中的最大者,由于任何可行流的费用不可能超过mCU ,而每次消去一个负圈至少使得费用下降一个单位,一次消去负圈最多执行)(mCU O 。

由此可知,该算法的时间复杂度为)(2CU nm O
3 successive shortest path algorthmi
定义3.1 任意的顶点N i ∈,我们用)(i π表示顶点i 的势,用向量π表示图中所有顶点的势,用πij c 表示弧),(j i 上的减少费用,且规定:)()(j i c c ij ij πππ
+-=。

定理3.1(Reduced Cost Optimality Conditions )设*x 是最小费用流问题的一个可行解,那么*x 是最小费用流问题的一个最优解当且仅当表示顶点势的向量π满足reduced cost
optimality conditions :对于任意一条弧)(),(*x G j i ∈,都有0≥πij c 成立。

定义3.2 设x 是一个流,当x 满足容量的限制和非负的限制,但不满足点的平衡条件的限制时,我们把x 叫做pseudoflows 。

对于任意一个psedudoflows x ,当N i ∈是一个不平
衡的点时,我们有
∑∑-+
=)},(:{)},(:{)()(j i j ij i j j ji x x i b i e
对于任意的N i ∈,当0)(>i e 时,表示顶点i 为过剩的点;当0)(<i e 时,表示顶点i 为不足的点;当0)(=i e 时,表示顶点i 为平衡的点。

所以有
0)()(==∑∑∈∈N i N i i b i e 故有
∑∑∈∈-=E
i D i i e i e )()(
其中},0)(|{N i i b i D ∈∀>= },0)(|{N i i b i E ∈∀<=。

由上可知,一个有向网络),(A N G =中如果含有一个过剩点,那么在这个网络中至少含有一个不足点。

推论3.2 假设pseudoflows x 和顶点势的向量π满足减少费用的最优条件。

设向量d 表示剩余网路)(x G 中从顶点s 到其它所有点的最短路的距离,用π
ij c 表示)(x G 中弧的长度,则我们得到以下两条性质:
(1) pseudoflows x 和顶点势的向量d -=ππ'满足减少费用的最优条件;
(2) 从顶点s 到其它任意一个顶点的一条最短路P 上的任意一条弧),(j i 的减少用
0'=πij c 根据定理和推论,当我们遇到的流x 为pseudoflows 时,我们要保证pseudoflows x 和表示顶点势的向量π满足减少费用的最优条件的情况下,把所有的不平衡的点转变成平衡的点,也就是说,要把pseudoflows 转x 变成可行流x 。

3.3算法的具体步骤如下:
algorithm successive shortest path
begin
:0:0
;x a n d π== ()():e i b i = for all i N ∈;
initialize the sets (){}(){}
::0::E i e i andD i e i =>=<0;
while E ≠∅ do
begin
select a node k E ∈ and a node l D ∈;
determine shortest path distance ()d j from node k to all
other nodes in ()G x with respect to the reduce costs c ;
let P denote a shortest path from node k to node l ;
update :d ππ=-;
()()(){}:m i n ,m i n :,ij e k e l r i j P ⎡⎤δ=-∈⎣⎦;
augment δ units of flow along the path P ;
update x , ()G x , E , D ,and the reduced costs;
end;
end;
3.4.算法的复杂度分析
算法的主要工作量在于连续寻找费用的最短路,假设寻找最短路算法的复杂度为
),,(C m n S ,
那么在剩余网络)(x G 中应用最短路算法的复杂度为),,(nC m n S 。

在沿着最短路增广流的过程中,每次最少增广一个单位的流,所以最多增广)(nU O ,所以本算法的复杂度为)),,((nC m n nUS O 。

3.5算法的改进
在找最短路的过程中,我们不必把k 点到所有点的最短路都找出来。

我们可以用Dijkstra 算法找出k 点到l 点的最短路,这就需要修改顶点的势:
当i 是被永久标记时,)()()(i d i i -=ππ;
当i 是被临时标记时,)()()(l d i i -=ππ
或者是
当i 是被永久标记时,)()()()(l d i d i i +-=ππ;
当i 是被临时标记时,)()(i i ππ=
用上述方法可以减少复杂度。

4 primal-dual algorithm
定义 4.1 在剩余网络)(x G 中,由减少费用0=πij c 的弧所构成的图形用()G x ︒
表示,称()G x ︒
为容许网络。

我们把给定的有向网络),(A N G =中的顶点集N 分为三类:},0)(|{N i i b i D ∈∀>= },0)(|{N i i b i E ∈∀<=;},0)(|{N i i b i F ∈∀==。

引入两个顶点t s ,。

我们做:
任意的D i ∈,我们增加一条费用为0,容量为)(i b 的弧),(i s ;
任意的E i ∈,我们增加一条费用为0,容量为)(i b -的弧),(t i 。

可得
∑∈=D
i i b s b )()(,)()(s b t b -=。

从而得到一个新的网络),,,,,('U C A N t s G =。

因为我们在构造),,,,,('U C A N t s G =的过程中,所增加的弧的 费用都为0,所以我们可以把),,,,,('U C A N t s G =看做是原始网络),(A N G =中给定的一个最小费用流问题。

当我们遇到的流x 为pseudoflows 时,我们可以用上述的思想构造新的网络),,,,,('U C A N t s G =,),,,,,('U C A N t s G =是仅有单个过剩顶点和单个不足顶点的简单网络。

那么我们要保证pseudoflows x 和表示顶点势的向量π满足减少费用的最优条件的情况下,把单个的不平衡的顶点转变成平衡的顶点,也就是说,要把pseudoflows 转x 变成可行流x ,
4.2算法的具体步骤如下:
algorithm primal-dual;
begin
:0:0
x a n d π==; ()():e s b s = and ()():;e t b t =
while ()0e s > do
begin
determine shortest path distances ().d from node s to all other nodes in ()G x with
respect to the reduced costs c ∏ ;
update :d ππ=-;
define the admissible network ()G x ︒;
establish a maximum flow from node s to node t in ()G x ︒;
update ()e s ()e t ,and ()G x ;
end;
end
4.3.算法复杂度的分析
从算法的过程可以看出,每次循环迭代修改弧上的流量和顶点上的势各一次。

由于流量不可能超过nU ,且任何顶点上的势不可能超过nC -,因此总迭代次数不会超过
},min{nC nU 。

假设最短路算法的复杂度为),.(C m n S ,最大流算法的复杂度为),.(U m n M ,
则本算法复杂度为)]),(),.(}[,(min{mU n M nC m n S nC nU O +。

5.out-of-kilter algorithm
定理5.1(Complementary Slackness Optimality Conditions )设x *
是最小费用流问题的一个可行解,那么x *是最小费用流问题的一个最优解当且仅当表示顶点势的向量π,减少费用πij c 和流值ij x 满足:Complementary Slackness Optimality Conditions: if 0>πij c ,then 0*=ij x ;
if ij ij u x <<*0,then 0=πij c ;
if 0<πij c ,then ij ij u x =*。

连续最短路算法和原始对偶算法都是在流不满足点平衡条件的情况下使用的。

那么当我们遇到的流满足点平衡条件的限制而不慢足容量的约束条件时,我们怎样解决此时的最小费用流问题呢?
根据定理,我们可以把有向网络),(A N G =中的弧分为两类:第一类是满足互补松弛性的最优条件的弧,我们把这类弧叫做in-kilter 弧;第二类是不满足互补松弛性的最优条件的弧,我们把这类弧叫做out-of-kilter 弧。

那么我们现在所要考虑的问题就是怎样把out-of-kilter 弧转变成in-kilter 弧?
定义5.1 在减少费用πij c 不变的情况下,将out-of-kilter 弧),(j i 转变成in-kilter 弧),(j i 所需要修改的流量叫做弧),(j i 的kilter 数,记为ij k 。

定义5.2 在剩余网络)(x G 中,规定:当0≥πij c 时0=ij k ;当0<πij c 时ij ij r k =。

根据定理定义,在剩余网络)(x G 中的任意一条弧),(j i ,当0≥π
ij c 时,弧),(j i 满足减少费用的最优条件;当0<πij c 时,弧),(j i 不满足减少费用的最优条件。

在弧),(j i 不满足减少费用的最优条件的情况下,我们可以沿弧),(j i 发送ij r 个单位的流,使得弧),(j i 的容量变为0,从而剩余网络中不再含有),(j i 这一条弧。

5.2算法的具体步骤如下:
algorithm out-of-kilter;
begin
:0π=;
estable a feasible flow x in the network;
define the residual network ()G x and compute the kilter numbers of arcs;
while the network contains an out-of-kilter arc do
begin
select an out-of-kilter arc (),p q in ()G x ;
define the length of each arc (),i j in ()G x as max {}0,c ∏;
let ().d denote the shortest path distances from node q to all other nodes in ()(){},G x q p -
and let P denote a shortest path from node q to note p ; update
()()()i i d i ππ'=- for all i N ∈; if 0pq c π≤ then
begin
(){}:,W P p q =⋃;
(){}:min :,ij r i j W δ=∈;
augment δ units of flow along W ;
update x ,()G x ,and the reduced costs;
end;
end;
end;
5.3算法复杂度的分析
从算法的过程可以看出每次循环迭代修改圈上的流值和顶点上的势各一次,并使所有弧上的kilter 数至少下降一个单位。

设最短路算法的复杂度为),.(C m n S 。

当取初始流0=x 时,由于kilter 数不超过U ,所以此算法的复杂度为)),.((C m n mUS O 。

当初始流0≠x 时,设初始流和势对应的总kilter 数为K ,则总迭代次数不会超过K ,故算法的复杂度为)),.((C m n mKS O 。

相关文档
最新文档