ผลต่างระหว่างรุ่นของ "204512/บรรยาย 12"
(ไม่แสดง 34 รุ่นระหว่างกลางโดยผู้ใช้ 2 คน) | |||
แถว 1: | แถว 1: | ||
---- | ---- | ||
'''จดบันทึกคำบรรยายโดย:''' | '''จดบันทึกคำบรรยายโดย:''' | ||
− | :นาย | + | :นาย ชาคริต กิตโร รหัส 50653757 |
− | :นาย | + | :นาย รักพงค์ แก้วพวง รหัส 50653880 |
<br /> | <br /> | ||
---- | ---- | ||
แถว 13: | แถว 13: | ||
ให้ Max flow <math>f</math> หาว่า <math>f</math> เป็น min-cost หรือไม่ | ให้ Max flow <math>f</math> หาว่า <math>f</math> เป็น min-cost หรือไม่ | ||
ให้ <math> G_f </math> เป็น residual graph ของ <math>f</math> | ให้ <math> G_f </math> เป็น residual graph ของ <math>f</math> | ||
− | :<u>Thm</u> Max flow <math>f</math> เป็น min-cost เมื่อ และต่อเมื่อไม่มี negative cost cycle | + | :<u>Thm</u> Max flow <math>f</math> เป็น min-cost เมื่อ และต่อเมื่อไม่มี negative cost cycle <math>w</math> |
:<u>Prof</u> พิสูจน์ว่า <math>f</math> เป็น min-cost จะไม่มี negative cost cycle ใน <math> G_f </math> | :<u>Prof</u> พิสูจน์ว่า <math>f</math> เป็น min-cost จะไม่มี negative cost cycle ใน <math> G_f </math> | ||
:<u>Assume</u> <math>f</math> เป็น min-cost และมี negative cost cycle ใน <math> G_f </math> | :<u>Assume</u> <math>f</math> เป็น min-cost และมี negative cost cycle ใน <math> G_f </math> | ||
− | ?รูป | + | :?รูป |
− | augment ไปตาม cycle w ทำให้ cost ของ flow ต่ำลง | + | :augment ไปตาม cycle <math>w</math> ทำให้ cost ของ flow ต่ำลง → <math>f</math> ไม่ใช่ min-cost flow contradiction |
− | + | :<u>Prof</u> พิสูจน์ว่า ถ้า <math>f</math> ไม่มี min-cost flow จะมี negative cost cycle ใน <math>Gf</math> | |
− | ให้ <math>f^*</math> เป็น min-cost max flow พิจารณา <math>f^* </math><math>- f </math> | + | ::ให้ <math>f^*</math> เป็น min-cost max flow |
− | มองในเชิงของ flow; <math>cost(f^*) < cost(f) </math> | + | ::พิจารณา <math>f^* </math><math>- f </math> มองในเชิงของ flow; <math>cost(f^*) < cost(f) </math> |
− | พิจารณา <math>f^* </math><math>- f </math> | + | ::พิจารณา <math>f^* </math><math>- f </math> → เป็น cyculation ลบกันแล้วหักล้างกัน |
− | <math>cost(f^* - f)</math><math> = diff (cost(f^*), cost(f))</math> | + | ::<math>cost(f^* - f)</math><math> = diff (cost(f^*), cost(f))</math> |
− | ทำให้ <math>cost(f^* - f) = cost</math> เป็นลบ แสดงว่าต้องมี cycle อย่างน้อย 1 อัน เป็นลบ | + | ::ทำให้ <math>cost(f^* - f) = cost</math> เป็นลบ แสดงว่าต้องมี cycle อย่างน้อย 1 อัน เป็นลบ |
− | <math>cost(f^* - f) = </math><math>cost(f^*) - </math><math>cost(f) </math><math>< 0</math> <- <math>c = f^* - </math><math>f</math> | + | ::<math>cost(f^* - f) = </math><math>cost(f^*) - </math><math>cost(f) </math><math>< 0</math> <- <math>c = f^* - </math><math>f</math> |
− | <math>cost(c) = </math>ผลรวมของ circulation ที่แต่ละวงเป็น cycle ที่มี cost | + | ::<math>cost(c) = </math>ผลรวมของ circulation ที่แต่ละวงเป็น cycle ที่มี cost รวมเป็นลบ |
− | + | ::ดังนั้นมีบาง cycle ที่มี cost เป็นลบ | |
== Negative cost cycle cancelling algorithm == | == Negative cost cycle cancelling algorithm == | ||
# หา max flow <math>f</math> | # หา max flow <math>f</math> | ||
− | + | Repeat | |
− | + | หา negative cost cycle ใน <math>G_f</math> | |
− | + | cancel <math>w</math> จาก <math>f</math> | |
− | + | Until ไม่มี negative cost cycle ใน <math>G_f</math> | |
− | Running Time | + | :<u>Running Time</u> |
− | ถ้า cost เป็น integer และ cap เป็น integer | + | :ถ้า cost เป็น integer และ cap เป็น integer |
− | นิยาม <math>c = </math>max cost | + | :นิยาม <math>c = </math>max cost, <math>u = </math>max cap, <math>n = |u|, m = |E|</math> |
− | <math>u = </math>max cap, <math>n = |u|, m = |E|</math> | + | :ในแต่ละรอบ cost ของ flow จะลดลงอย่างน้อย 1 หน่วย |
− | ในแต่ละรอบ cost ของ flow จะลดลงอย่างน้อย 1 หน่วย | + | :bound ของ cost เป็น <math>cost <= m.u.c</math> |
− | bound ของ cost เป็น <math>cost <= m.u.c</math> | + | :แต่ละรอบใช้เวลาหา negative cost cycle ใช้ belman-ford ใช้เวลา <math>O(m.n)</math> |
− | แต่ละรอบใช้เวลาหา negative cost cycle ใช้ belman-ford ใช้เวลา <math>O(m.n)</math> | + | :รวม <math>O(n.m^2 .u.c)</math> |
− | รวม <math>O(n.m^2 .u.c)</math> | + | :cancel cycle <math>w</math> ที่ทำให้ cost ลดลงมากที่สุด |
− | cancel cycle <math>w</math> ที่ทำให้ cost ลดลงมากที่สุด | + | :cancel cycle ที่มี minimum mean cost → ได้ algorithm ที่ run ใน strongly polynomial time |
− | cancel cycle ที่มี minimum mean cost | + | :weakly polynomial time = poly(n m log u log c) |
− | weakly polynomial time = poly(n m log u log c) | + | :strongly polynomial time = poly(n m) |
− | strongly polynomial time = poly(n m) | ||
== Shortest Paths == | == Shortest Paths == | ||
แถว 67: | แถว 66: | ||
<math> =P(V{0})+ \sum\limits_{i = 1}^k {(V{i-1},V{1})}-P(V{k})</math> | <math> =P(V{0})+ \sum\limits_{i = 1}^k {(V{i-1},V{1})}-P(V{k})</math> | ||
− | + | <math> =P(V{0})+C(P)-P(V{k})</math> | |
− | |||
พิจารณา cycle W | พิจารณา cycle W | ||
− | + | Cp(W)=C(W) | |
หมายเหตุ : ยังไม่ได้ใส่รูป | หมายเหตุ : ยังไม่ได้ใส่รูป | ||
− | + | การใช้ reduced cost ไม่มีผลต่อการมีอยู่ของ negative cost cycle | |
จะกล่าวว่า Price function P เป็น feasible price function ถ้า | จะกล่าวว่า Price function P เป็น feasible price function ถ้า | ||
แถว 87: | แถว 85: | ||
พิจารณา price function p ใดๆ พิจารณา negative cost cycle W Cp(W)=C(W)<0 นั่นคือมีบาง edge | พิจารณา price function p ใดๆ พิจารณา negative cost cycle W Cp(W)=C(W)<0 นั่นคือมีบาง edge | ||
:<math> {e \in W} </math> | :<math> {e \in W} </math> | ||
− | + | ที่ Cp(e) < 0 | |
นั่นคือ p ไม่ feasible | นั่นคือ p ไม่ feasible | ||
== Optimulity condition == | == Optimulity condition == | ||
+ | # ไม่มี negative cost cycle ใน <math>G_f</math> | ||
+ | # Thm flow <math>f</math> จะเป็น min cost flow ถ้ามี price function <math>P</math> | ||
+ | :<u>Assume</u> กราฟไม่มี negative cost cycle หา shortest path จาก <math>s</math> ใดๆ แล้วให้ <math>D(u) = </math>ระยะทางสั้นที่สุดจาก <math>s</math>→<math>t</math> | ||
+ | ::<b>Observation 1</b> <math>D</math> เป็น feasible price function → <math>D(x) + C(x,y) - D(y) = 0</math> | ||
+ | ::<b>Observation 2</b> ถ้าพิจารณา shortest path <math>p</math> จาก <math>s</math> ไปยัง node ใดๆ ทุกๆ edge <math>e</math> บน <math>p</math> มี ::<math>C</math><sub>D</sub><math>(v,e) = 0</math> | ||
+ | ::<math>D(v) = D(u) + C(u,v)</math> | ||
+ | ::<math>C</math><sub>D</sub><math>(u,v) = D(u) + C(u,v) - D(v)</math> | ||
+ | |||
+ | |||
+ | |||
+ | == Successive Shortest Path == | ||
+ | เป็น Algorithm ที่ใช้่ในการหา Max flow จาก s ไป t | ||
+ | |||
+ | f<- Zero Flow | ||
+ | Repeat : | ||
+ | หา min cost path บน Gf (*) จาก s ไป t | ||
+ | (ด้วย shortest path algorithm ที่ทำงานบนกราฟที่มี cost เป็นลบได้ เช่น Belman-Ford) | ||
+ | augment flow ตาม path นั้น | ||
+ | until f เป็น max flow | ||
+ | |||
+ | Running Time | ||
+ | <br>1. หา shortest path O(mn) ต่อรอบ | ||
+ | <br>2. augment flow ทั้งหมด <= mC รอบ | ||
+ | <br>3. ทำงานในเวลา O(n<math> m^2 </math>C) | ||
+ | |||
+ | Lemma2: ในแต่ละรอบที่ augment flow f ที่ได้เป็น min cost flow | ||
+ | |||
+ | proof : ในรอบแรก f เป็น zero flow เป็น min cost | ||
+ | พิจารณาการ augment ในรอบที่ i | ||
+ | - flow f ก่อนการ augment เป็น min cost flow | ||
+ | ใน Gf ไม่มี negative cost cycle | ||
+ | - ให้ d(u) เป็นระยะทางสั้นที่สุดยน Gf จาก s ที่หาได้ในขึ้นตอน(*) | ||
+ | จาก observation 2 จะได้ว่า Cd(e)=0 สำหรับทุกๆ edge e บน shortest path จาก s ไป t | ||
+ | |||
+ | *ยังไม่ได้ใส่รูป | ||
+ | |||
+ | ให้ <math> f^' </math> เป็น flow ที่ได้จากหลักการ augment | ||
+ | พิจารณา G<math> f^'</math> | ||
+ | claim : d เป็น feasible price function บน G<math> f^'</math> | ||
+ | พิจารณา edge(x,y) บน G<math> f^'</math> | ||
+ | case1: <math> {(x,y) \in Gf} </math> | ||
+ | case2: <math> {(x,y) \notin Gf} </math> นั่นคือ <math> {(y,x) \in Gf)}</math> C(y,x) shortest path และถูก augment | ||
+ | |||
+ | นั่นคือ Cd(y,x)=0 | ||
+ | Cd(x,y)=d(x)+c(x,y)-dy | ||
+ | = -(-d(x)-c(x,y)+dy) | ||
+ | = -(dx(x)+c(x,y)-dy) | ||
+ | = -Cd(y,x) | ||
+ | -Cd(y,x)>=0 | ||
+ | นั้นคือ <math> { f^' } </math> เป็น min cost flow | ||
+ | |||
+ | == Ford Fulkerson + Capacity Scalling == | ||
+ | มี parameter Δ เป็น scale บอกว่าจะ augment flow ใน path ครั้งละ Δ หน่วย | ||
+ | ให้ Δ <math>= m.u</math>, <math>f = </math>Zero flow | ||
+ | Repeat | ||
+ | Repeat | ||
+ | หา <math>Gf</math>, หา augmenting path ที่มี cap <math>>=</math> Δ | ||
+ | เติม augment Δ หน่วย | ||
+ | until หา augmenting path ขนาด Δ ไม่ได้ | ||
+ | Δ <math>=</math> Δ <math>/2</math> | ||
+ | until Δ <math><1</math> | ||
+ | == Capacity scalling min cost flow == | ||
+ | :แต่ละ node จะมี demand <math>b(u)</math> | ||
+ | :โดย parameter Δ จะเติม flow ครั้งละ Δ | ||
+ | :ให้ | ||
+ | ::<math>s(</math>Δ<math>)</math> เป็นเซตของ node <math>u</math> ที่ <math>b(u)>=</math> Δ | ||
+ | ::<math>t(</math>Δ<math>)</math> เป็นเซตของ node <math>u</math> ที่ <math>b(u)<=</math> &minus Δ | ||
+ | ::<math>G_f(</math>Δ<math>)</math> เป็น residual graph ที่ทุก edge มี cap อย่างน้อย Δ | ||
+ | :รูป? | ||
+ | :หลังจาก Δ augment flow ที่เหลือไม่เกิน Δ | ||
+ | :<math>G_f(</math>Δ<math>)</math> ไม่มี negative cost cycle → มี feasible price function | ||
+ | :Δ<math>/2 = G_f(</math>Δ<math>/2)</math> | ||
+ | :อาจมี negative cost cycle นั้นคือ <math>f</math> ไม่มี min cost บน <math>edge(x,y)</math> ที่ <math>C_d < 0</math> | ||
+ | :<math>saturate(x,y)</math> สร้างคู่ demand excess |
รุ่นแก้ไขปัจจุบันเมื่อ 08:28, 6 ตุลาคม 2550
จดบันทึกคำบรรยายโดย:
- นาย ชาคริต กิตโร รหัส 50653757
- นาย รักพงค์ แก้วพวง รหัส 50653880
เนื้อหา
Min-cost flow
ให้กราฟ ความจุ บนเส้นเชื่อม หา Max-flow ที่ cost ต่ำที่สุด for flow
ให้ Max flow หาว่า เป็น min-cost หรือไม่ ให้ เป็น residual graph ของ
- Thm Max flow เป็น min-cost เมื่อ และต่อเมื่อไม่มี negative cost cycle
- Prof พิสูจน์ว่า เป็น min-cost จะไม่มี negative cost cycle ใน
- Assume เป็น min-cost และมี negative cost cycle ใน
- ?รูป
- augment ไปตาม cycle ทำให้ cost ของ flow ต่ำลง → ไม่ใช่ min-cost flow contradiction
- Prof พิสูจน์ว่า ถ้า ไม่มี min-cost flow จะมี negative cost cycle ใน
- ให้ เป็น min-cost max flow
- พิจารณา มองในเชิงของ flow;
- พิจารณา → เป็น cyculation ลบกันแล้วหักล้างกัน
- ทำให้ เป็นลบ แสดงว่าต้องมี cycle อย่างน้อย 1 อัน เป็นลบ
- <-
- ผลรวมของ circulation ที่แต่ละวงเป็น cycle ที่มี cost รวมเป็นลบ
- ดังนั้นมีบาง cycle ที่มี cost เป็นลบ
Negative cost cycle cancelling algorithm
- หา max flow
Repeat หา negative cost cycle ใน cancel จาก Until ไม่มี negative cost cycle ใน
- Running Time
- ถ้า cost เป็น integer และ cap เป็น integer
- นิยาม max cost, max cap,
- ในแต่ละรอบ cost ของ flow จะลดลงอย่างน้อย 1 หน่วย
- bound ของ cost เป็น
- แต่ละรอบใช้เวลาหา negative cost cycle ใช้ belman-ford ใช้เวลา
- รวม
- cancel cycle ที่ทำให้ cost ลดลงมากที่สุด
- cancel cycle ที่มี minimum mean cost → ได้ algorithm ที่ run ใน strongly polynomial time
- weakly polynomial time = poly(n m log u log c)
- strongly polynomial time = poly(n m)
Shortest Paths
ระยะทาง D: V-> R
เงื่อนไขที่ D เป็น shortest path
D(x)+l(x,y)-D(y)>=0
Price Function reduced cost
เรียก function p : V-> R ว่าเป็น price function สำหรับ price function p นิยาม reduced cost Cp(x,y) = p(x) + c(x,y)-p(y)
พิจารณา path P = ความยาวของ P บน Cp คือ
พิจารณา cycle W Cp(W)=C(W) หมายเหตุ : ยังไม่ได้ใส่รูป การใช้ reduced cost ไม่มีผลต่อการมีอยู่ของ negative cost cycle
จะกล่าวว่า Price function P เป็น feasible price function ถ้า
Lemma : ถ้ากราฟมี negative cost cycle จะไม่มี feasible price function
Proof.
หมายเหตุ : ยังไม่ได้ใส่รูป
พิจารณา price function p ใดๆ พิจารณา negative cost cycle W Cp(W)=C(W)<0 นั่นคือมีบาง edge
ที่ Cp(e) < 0 นั่นคือ p ไม่ feasible
Optimulity condition
- ไม่มี negative cost cycle ใน
- Thm flow จะเป็น min cost flow ถ้ามี price function
- Assume กราฟไม่มี negative cost cycle หา shortest path จาก ใดๆ แล้วให้ ระยะทางสั้นที่สุดจาก →
- Observation 1 เป็น feasible price function →
- Observation 2 ถ้าพิจารณา shortest path จาก ไปยัง node ใดๆ ทุกๆ edge บน มี ::D
- D
Successive Shortest Path
เป็น Algorithm ที่ใช้่ในการหา Max flow จาก s ไป t
f<- Zero Flow Repeat : หา min cost path บน Gf (*) จาก s ไป t (ด้วย shortest path algorithm ที่ทำงานบนกราฟที่มี cost เป็นลบได้ เช่น Belman-Ford) augment flow ตาม path นั้น until f เป็น max flow
Running Time
1. หา shortest path O(mn) ต่อรอบ
2. augment flow ทั้งหมด <= mC รอบ
3. ทำงานในเวลา O(nC)
Lemma2: ในแต่ละรอบที่ augment flow f ที่ได้เป็น min cost flow
proof : ในรอบแรก f เป็น zero flow เป็น min cost
พิจารณาการ augment ในรอบที่ i - flow f ก่อนการ augment เป็น min cost flow ใน Gf ไม่มี negative cost cycle - ให้ d(u) เป็นระยะทางสั้นที่สุดยน Gf จาก s ที่หาได้ในขึ้นตอน(*) จาก observation 2 จะได้ว่า Cd(e)=0 สำหรับทุกๆ edge e บน shortest path จาก s ไป t
*ยังไม่ได้ใส่รูป
ให้ เป็น flow ที่ได้จากหลักการ augment พิจารณา G claim : d เป็น feasible price function บน G พิจารณา edge(x,y) บน G case1: case2: นั่นคือ C(y,x) shortest path และถูก augment นั่นคือ Cd(y,x)=0 Cd(x,y)=d(x)+c(x,y)-dy = -(-d(x)-c(x,y)+dy) = -(dx(x)+c(x,y)-dy) = -Cd(y,x) -Cd(y,x)>=0 นั้นคือ เป็น min cost flow
Ford Fulkerson + Capacity Scalling
มี parameter Δ เป็น scale บอกว่าจะ augment flow ใน path ครั้งละ Δ หน่วย ให้ Δ , Zero flow Repeat Repeat หา , หา augmenting path ที่มี cap Δ เติม augment Δ หน่วย until หา augmenting path ขนาด Δ ไม่ได้ Δ Δ until Δ
Capacity scalling min cost flow
- แต่ละ node จะมี demand
- โดย parameter Δ จะเติม flow ครั้งละ Δ
- ให้
- Δ เป็นเซตของ node ที่ Δ
- Δ เป็นเซตของ node ที่ &minus Δ
- Δ เป็น residual graph ที่ทุก edge มี cap อย่างน้อย Δ
- รูป?
- หลังจาก Δ augment flow ที่เหลือไม่เกิน Δ
- Δ ไม่มี negative cost cycle → มี feasible price function
- ΔΔ
- อาจมี negative cost cycle นั้นคือ ไม่มี min cost บน ที่
- สร้างคู่ demand excess