PowerPoint - LOG OPT HOME

Download Report

Transcript PowerPoint - LOG OPT HOME

ネットワーク理論
Text. Part 3 pp. 57-104
• 最短路問題 pp.58-84
• Ford法,双対問題とポテンシャル,
Bellman方程式とBellman-Ford法
• 負の費用をもつ閉路がある場合,閉
路を含まない場合
• 最大流問題 pp.85-94
• 最小費用流問題 pp.95-104
1
大名の最小費用流問題
飛脚が運べる量
(容量)
費用
10(5)
s
10
5(8)
1
1(8)
3(2)
2
2(5)
t
10
6(6)
3
富士山から江戸まで10単位の氷を送りたい.
なるべく安く運ぶにはどうしたらよい?
2
最小費用流問題の特徴
•枝に費用がある
•それぞれの点での流出(入)量が決まっている
sでは-10流出
(10流入)
1では0流出
10(5)
s
10
5(8)
1
1(8)
3(2)
2
流出量を関数bで表すと
b(s)=-10
b(1)=0, b(2)=0, b(3)=0
b(t)=10
2(5)
t
tでは10流出
10
6(6)
3
3
最小費用流問題(グラフ理論的定義)
点集合 V
 枝集合 E
 有向グラフ G=(V,E)
 枝の容量 u: E → R+
 枝の費用 c: E → R
 流出量関数 b: V → R
 目的:
費用の合計が最小となる実行可能フロー
ただし,  bv  0

vV
4
実行可能フローとは?
以下の条件を満たす実数値関数x:E → R
フロー整合条件
(各点における氷の消費・補充
が決まっている)
x
w : wv  E
wv

x
vw
 bv ,  v  V
w :vw  E
容量制約と非負制約
(飛脚の運べる量には限界がある)
0  xe  u e ,  e  E
費用の合計を最小にする実行可能フローを最適フローと呼ぶ
5
閉路消去法(基本的アイディア)
 基本的には最大流問題に対するFord-
Fulkerson法と同じ
 費用の概念が入るので,補助ネット
ワークの作り方が若干異なる
6
補助ネットワーク(最小費用流版)
s
10(1/5)
1
-10(1)
s
1
5流せるところを
1流している状態
費用は(1単位あたり)10
元の問題のネットワーク
残余容量1
1からsへあと1流せる
そのときに増加する費用は
(1単位あたり)-10
補助ネットワーク
10(4)
残余容量4
sから1へあと4流せる
そのときに増加する費用は
(1単位あたり)10
7
補助ネットワーク
5流せるところを
5流している状態
10(5/5)
s
1
元の問題のネットワーク
1
補助ネットワーク
-10(5)
s
5流せる
1単位あたりの費用
増加は-10
残余容量0
もう流せない
8
補助ネットワーク
5流せるところを
流していない状態
10(0/5)
s
1
元の問題のネットワーク
s
1
補助ネットワーク
10(5)
もう流せない
残余容量5
あと5流せる
1単位あたりの費
用増加は10
9
練習(黒板使用)
(補助ネットワークの作り方)
s
15(5/10)
??(??)
t
s
t
??(??)
??(??)
10(3/5)
1(5/8)
1
??(??)
??(??)
??(??)
1
10
練習(黒板使用)
(補助ネットワークの作り方)
s
15(5/10)
-15(5)
t
s
15(5)
t
10(2)
10(3/5)
1(5/8)
1
1(3)
-1(5)
-10(3)
1
11
負閉路
負閉路=
補助ネットワークにおいて費用の合計が負となる閉路
負閉路がある限り,
負閉路内のフローを増やすと,費用は減る
増やせるフロー量の上限は,負閉路内の枝の残余容量の最小値
-15(5)
s
15(5)
t
10(2)
1(3) -1(5)
10+1+(-15)=-4
-10(3)
1
4だけ費用が減る!
12
定理:負の閉路による最適フロー
の特徴づけ
実行可能フローに対する補助ネットワー
クにおいて,負閉路が存在しなけれ
ば,それは最適フローである
証明は省略
13
閉路消去法(アイディア)
最初は適当な実行可能フローからスタート
(実行可能フローの簡単な作り方は後述)
 少しずつフローの費用を減らしていく
(補助ネットワーク上で負閉路を見つけて,
負閉路内の枝の残余容量の最小値だけ,負閉
路上のフローを増やす)


負閉路が見つからなくなったら終わり
14
実行可能フローの簡単な見つけ方
sからtへ直通の枝を作り,費用
をべらぼうに大きくする
1京(10/10)
10(0/5)
s
5(0/8)
1
1(0/8)
t
3(0/2)
6(0/6)
2
3
2(0/5)
sからtへ10単位の氷の
流れを作りたい
では,
閉路消去法を
やってみよう
15
閉路消去法
1京(10/10)
1
10(0/5)
s
1(0/8)
3(0/2)
2
5(0/8)
t
6(0/6)
2(0/5)
3
-1京(10)
1
s
1(8)
10(5)
t
6(6)
3(2)
5(8)
2
2(5)
3
16
閉路消去法
1京(5/10)
1
10(5/5)
s
3(0/2)
2
5(0/8)
1京(5)
1(5/8)
t
6(0/6)
2(0/5)
3
-1京(5)
1(3)
1
s
-1(5)
-10(5)
t
6(6)
3(2)
5(8)
2
2(5)
3
17
閉路消去法
1京(5/10)
1
10(3/5)
s
3(2/2)
2
5(2/8)
1京(5)
1(5/8)
t
6(0/6)
2(0/5)
3
-1京(5)
1(3)
-10(3)
10(2)
s
5(6)
-5(2)
1
-1(5)
t
6(6)
-3(2)
2
2(5)
3
18
閉路消去法
1京(3/10)
1
10(5/5)
s
3(2/2)
2
5(2/8)
1京(7)
1(7/8)
t
6(0/6)
2(0/5)
3
-1京(3)
1(1)
-10(5)
s
5(6)
-5(2)
1
-1(7)
t
6(6)
-3(2)
2
2(5)
3
19
閉路消去法
1京(0/10)
1(7/8)
1
s
10(5/5)
3(2/2)
2
5(5/8)
1京(10)
1(1)
-10(5)
s
5(3)
-5(5)
1
-1(7)
-3(2)
2
t
6(3)
2(2)
-2(3)
3
t
6(3/6)
2(3/5)
3
負の閉路が
見つからないので
終了
-6(3)
20
閉路消去法(擬似コード)
x:=適当な実行可能フロー
while 負閉路がある do
適当な負閉路Cを選択
Δ:=C内の枝の残余容量の最小値
C上にフローをΔだけ増加
21