7 最小費用流問題 ある1点( s )から他の1点( t )へ指定された流量を最小費用で輸送する計画を求める問題. ( 一般性を失うことなく)s から t へ q だけ流すと考える. ( 枝 ts は考える必要がない) 枝 ij においては,単位流量あたり c の費用がかかる. l = 0,u = a . ( 8 (ij ) 2 E ) b(s) = q ,b(t) = ;q,b(i) = 0( i 2 V i 6= s t ) ij 7.1 ij E) ij 定式化 min X z= 2E c x ij ij (i j ) (*) ( 8 (ij ) 2 ij X s.t. j 0 2SUCC(i) x ij x ij X ; j aij 2PRED(i) ( 8 (ij ) 2 x ji E) 8 q > < = > 0 : ;q (i = s) (i 2 V i = 6 s t) (i=t) (*) の制約条件をすべて満たす x = (x ) を流れと呼ぶ. i = s t における等式制約を流量 q0( q0 < q )で満たす x = (x ) を疑似流れと呼ぶ. x = 0 は疑似流れである. ij ij 7.2 例題ネット ワーク,残余グラフ 残余枝 負の費用の閉路 7.3 最適性の基準 定理 D 流れ x = (xij ) が最小費用流であるための必要十分条件は,残余グラフ G(x) に負の費用の閉路が存 在しないことである. 42 7.4 クライン法(プライマル法) step0: ( 初期化) ( 費用を無視して最大流問題を解けばよい) 流れ x を用意する. step1: ( 負の経路の検出) ( べき乗法,ウォーシャル・フロイド 法による) 残余グラフ G(x) において負の閉路を検出する. 8 > > < d = > > : 残余グラフの距離(費用)行列 cij (ij ) 2 E で ij ;cj i 0 1 x < a のとき, E で x > 0 のとき, ( (ij ):残余枝) ij (ji) 2 i = j のとき, ij ji 上記以外. D( ) の対角成分に負の値が現れなければ( 負の閉路が存在しないので)終了. 負の閉路を検出したら step2 へ進む. k step2: ( 流れの更新) step1 で検出した閉路に沿って流せる最大流量 q を求め,現在の流れ x を次のように更新する. 8 x + q 本来枝 ( ij ) ( ( ij ) 2 E )が閉路に含まれる, > < x = > x ; q 残余枝 (ji)( (ij ) 2 E )が閉路に含まれる, : x (不変) 上記以外. step1 へ 戻る. ij ij ij ij 7.5 例題 43 例題で, 1| 2| 4| 5 に 30 単位, 1| 3| 5 に 30 単位流した場合の距離行列( D(0) )と最短路長行 列( D )および経路情報行列( P ), dij (k ) = min( d( k ;1) ij d( ;1) + d( ;1) ) k k ik kj D (k) の ij 成分が更新されるとき,Pij の値を k とする. (k ) 0 1 0 1 9 1 1 B C B ;3 0 5 7 1C B CC D =B B CC ;9 1 0 8 6 B B @ 1 ;7 1 0 7 CA 0 BB 12 B P =B BB 3 B@ 4 0 1 0 1 9 1 1 B C B ;3 0 5 7 1C B CC D =B B CC ;9 1 0 8 6 B B @ 1 ;7 1 0 7 CA 0 BB 12 B P =B BB 3 B@ 4 (0) 1 1 ;6 ;7 (0) 0 (1) 1 1 ;6 ;7 (1) 0 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 0 1 0 1 9 1 1 B C B ;3 0 5 7 1C B CC D =B B CC ;9 1 0 8 6 B B @ ;10 ;7 ;2 0 7 CA 0 BB 12 B P =B BB 3 B@ 2 0 0 1 9 B B ;4 0 5 B B D =B ;9 1 0 B B @ ;11 ;7 ;2 0 BB 13 B P =B BB 3 B@ 3 (2) 1 1 (3) ;15 1 ; 6 ;7 0 17 7 8 0 ; 6 ;7 15 11 6 4 0 0 0 10 9 B B ;4 0 5 B B D =B ;9 1 0 B B @ ;11 ;7 ;2 (4) 対角成分 17 7 8 0 ;18 ;14 ;9 ;7 1 CC CC CC CA 15 11 6 4 ;3 1 CC CC CC CA (2) (3) (4) D55 が負になった. 44 1 CC CC CC CA 1 2 3 4 5 5 1 2 3 2 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 3 5 1 2 3 2 5 3 2 3 4 5 3 3 3 3 5 0 BB 13 B P =B BB 3 B@ 3 (4) 1 CC CC CC CA 1 2 3 4 5 5 1 2 4 4 4 4 1 2 3 2 4 3 2 3 4 5 1 CC CC CC CA 1 CC CC CC CA 3 3 3 3 4 1 CC CC CC CA 7.6 逐次最短路法(プライマル・デュアル法) なにも流れていない状態 xij = 0, ( q 0 = 0 に対する擬流 x )から出発し ,残余グラフにおいて,単位 量を最小費用で流せる道( path )を探しては,そこにできるだけ多くを流すことを繰り返して,q 0 の 値を大きくしていき,q に達する. 最短路(最小費用路)を探すとき,残余グラフには負の費用の枝があるので,Dijkstra 法 は使えない. 残余グラフの枝の費用を次のように(非負の値に )修正して,Dijkstra 法による最短路探索を可能に したものを,一般に,プライマル・デュアル法と呼んでいる. 8 > > > < e = > > > : (***) c + ; ;c ; + 0 0 ij ij i j ji j i , ( LP の simplex 基準) i 2 Eで 2 Eで 2 Eで 2 Eで 上記以外. 1 「 eij が非負である」 (ij ) (ji) (ij ) (ji) x = 0 のとき, x = a のとき, 0 < x < a のとき, 0 < x < a のとき, ij ji ji ij ij ji ji 「流量 q 0 に対する疑似流 x が最適解である」 は疑似流 x( 流量 q 0 に対する最適解)が流れた状態での sipmlex 乗数( 最短距離)であり, その値は x とともに変化する. の更新は,距離行列 e (現在の に基づく悪化量)における s から i までの最短距離を するとき, + で行なう. ij i i i と i 逐次最短路法 step0: ( 初期化) k := 0; x(0) := 0, (0) := 0, q(0) := 0. step1: ( e の計算) ( ) ( ) 現在の を使い,式 (***) に従って e を計算する. step2: ( 最短路探索) ( ) ( 距離行列 (e ) の上で,Dijksta 法により,s から他の点 i( 含 t )への最短路と最短距離 ij i ij k k i ij k) k ij i を 求める. ( 各枝ごとの悪化量をもとに,総悪化量の小さい経路を探し出す. ) step3: ( の更新) ( +1) := ( ) + ( ) (i = 1 2 : : : m) step4: ( 流れの更新) step2 で求めた s から t への最短路に沿って流せる最大流量 q( i k i k k i i 8 x + q > < := > x ; q : x ( 不変) ように更新する. (k ) x (k ) ij (k +1) ij (k ) (k ) ij (k ) ij 本来枝 (ij )( (ij ) 2 残余枝 (ji)( (ij ) 2 上記以外. k) を求め,現在の流れ x を次の E )が最短路に含まれる, E )が最短路に含まれる, q := q + q q( +1) が q に達したら終了,そうでなければ,k := k + 1 として step1 へ 戻る. (k +1) (k ) (k ) k 45 step1 ( ) : RG(q( ) ) における,s から i への最短経路長( 本来の枝費用 c にもとづく費用). step0 から来たとき( k = 0 のとき)は,何も流していないので,各点へ至る費用は 0 と考える. step4 から来たとき( k 1 のとき)は,s から t への,費用 ( ) を実現する path(最短路/最 小費用路)は RG(q ( ) ) において存在しない. k k ij i k t k e( ) : RG(q( ) ) において,枝 ij に 1 単位流した場合の 1 単位あたりの費用増加額( 現在の k k ij 最短路長=最小費用と比べて). 「 eij 0 」が成立する. (証明) (k ) step2 ( ) : RG(q( ) e( )) において s から i まで,費用の増加が一番小さくなるように流したと きの,増加費用( path 構成枝の費用増加額の和).すなわち,RG(q ( ) e( ) ) における s から i k k k i k k までの最短路長( 最小増加費用路の増加費用) e( ) + ( ) ; ( ) 0 k ij step3 k i k j ( +1) : RG(q( ) e( ) ) の上で,s から t への最小増加費用路に,q だけ流すときの,s か ら各点 i への最短経路長( 本来の枝費用 c にもとづく費用). k k k i ij step4 最短経路(最小費用増加路=現状況での最小費用路)に q だけ流すことにより,RG(q( k + 1) ) では,その経路は消滅する. k := k + 1 では,つぎに短い( 増加費用の和が小さい )path を見つけてそこに流そうとする. ( goto step1 ) 46
© Copyright 2024 ExpyDoc