ผลต่างระหว่างรุ่นของ "204512/บรรยาย 12"

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
 
(ไม่แสดง 44 รุ่นระหว่างกลางโดยผู้ใช้ 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 ใน <math> G_f </math>
+
:<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 ต่ำลง -> f ไม่ใช่ min-cost flow contradiction
+
:augment ไปตาม cycle <math>w</math> ทำให้ cost ของ flow ต่ำลง &rarr; <math>f</math> ไม่ใช่ min-cost flow contradiction
ขากลับ ถ้า <math>f</math> ไม่มี min-cost flow จะมี negative cost cycle ใน <math>Gf</math>
+
:<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> -> เป็น cyculation ลบกันแล้วหักล้างกัน
+
::พิจารณา <math>f^* </math><math>- f </math> &rarr; เป็น 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 รวมเป็นลบดังนั้นมีบาง cycle ที่มี cost เป็นลบ
+
::<math>cost(c) = </math>ผลรวมของ circulation ที่แต่ละวงเป็น cycle ที่มี cost รวมเป็นลบ
== Price Function  ==
+
::ดังนั้นมีบาง cycle ที่มี cost เป็นลบ
<math>\forall edge(x,y)
 
</math>         
 
<math>cp((x,y)>=0
 
  </math>
 
  
 
== Negative cost cycle cancelling algorithm ==
 
== Negative cost cycle cancelling algorithm ==
 
# หา max flow <math>f</math>
 
# หา max flow <math>f</math>
: repeat
+
  Repeat
:: หา negative cost cycle ใน <math>Gf</math>
+
    หา negative cost cycle ใน <math>G_f</math>
:: cancel <math>w</math> จาก <math>f</math>
+
    cancel <math>w</math> จาก <math>f</math>
: until ไม่มี negative cost cycle ใน <math>Gf</math>
+
  Until ไม่มี negative cost cycle ใน <math>G_f</math>
 +
:<u>Running Time</u>
 +
:ถ้า cost เป็น integer และ cap เป็น integer
 +
:นิยาม <math>c = </math>max cost, <math>u = </math>max cap, <math>n = |u|, m = |E|</math>
 +
:ในแต่ละรอบ cost ของ flow จะลดลงอย่างน้อย 1 หน่วย
 +
:bound ของ cost เป็น <math>cost <= m.u.c</math>
 +
:แต่ละรอบใช้เวลาหา negative cost cycle ใช้ belman-ford ใช้เวลา <math>O(m.n)</math>
 +
:รวม <math>O(n.m^2 .u.c)</math>
 +
:cancel cycle <math>w</math> ที่ทำให้ cost ลดลงมากที่สุด
 +
:cancel cycle ที่มี minimum mean cost &rarr; ได้ 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<br><br>
 +
<math>\forall e = (x,y) : D(y) <= D(x)+l(x,y)</math><br><br>
 +
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 = <math>V_{0},V_{1},....,V_{k}</math>
 +
ความยาวของ P บน Cp คือ
 +
<math> Cp(P)= \sum\limits_{i = 1}^k {Cp(V{i-1},V)}
 +
  = P(V{0})+C(V{0},V{1})-P(V{1})+P(V{1})+C(V{1},V{2})-P(V{2})+P(V{2})+C(V{2},V{3})-P(V{3})...
 +
  +P(V{k-1})+C(V{k-1},V{k})-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
 +
Cp(W)=C(W)
 +
หมายเหตุ : ยังไม่ได้ใส่รูป           
 +
การใช้ reduced cost ไม่มีผลต่อการมีอยู่ของ negative cost cycle
 +
 
 +
จะกล่าวว่า Price function P เป็น feasible price function ถ้า
 +
<math>\forall edge(x,y)= cp((x,y)>=0
 +
</math>
 +
 
 +
Lemma : ถ้ากราฟมี negative cost cycle จะไม่มี  feasible price function
 +
 
 +
Proof.
 +
   
 +
หมายเหตุ : ยังไม่ได้ใส่รูป                         
 +
 
 +
พิจารณา price function p ใดๆ พิจารณา negative cost cycle W  Cp(W)=C(W)<0 นั่นคือมีบาง edge 
 +
:<math> {e \in W} </math>
 +
ที่ Cp(e) < 0
 +
นั่นคือ p ไม่ feasible
 +
 
 +
== 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>&rarr;<math>t</math>
 +
::<b>Observation 1</b> <math>D</math> เป็น feasible price function &rarr; <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
 
Running Time
ถ้า cost เป็น integer และ cap เป็น integer
+
<br>1. หา shortest path O(mn) ต่อรอบ
นิยาม <math>c = </math>max cost
+
<br>2. augment flow ทั้งหมด <= mC รอบ
<math>u = </math>max cap, <math>n = |u|, m = |E|</math>
+
<br>3. ทำงานในเวลา O(n<math> m^2 </math>C)
ในแต่ละรอบ cost ของ flow จะลดลงอย่างน้อย 1 หน่วย
+
 
bound ของ cost เป็น <math>cost <= m.u.c</math>
+
Lemma2: ในแต่ละรอบที่ augment flow f ที่ได้เป็น min cost flow
แต่ละรอบใช้เวลาหา negative cost cycle ใช้ belman-ford ใช้เวลา <math>O(m.n)</math>
+
 
รวม <math>O(n.m^2 .u.c)</math>
+
proof : ในรอบแรก f เป็น zero flow เป็น min cost
cancel cycle <math>w</math> ที่ทำให้ cost ลดลงมากที่สุด
+
    พิจารณาการ augment ในรอบที่ i
cancel cycle ที่มี minimum mean cost -> ได้ algorithm ที่ run ใน strongly polynomial time
+
        - flow f ก่อนการ augment เป็น min cost flow
weakly polynomial time = poly(n m log u log c)
+
          ใน Gf ไม่มี negative cost cycle
strongly polynomial time = poly(n m)
+
        - ให้ 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 &Delta; เป็น scale บอกว่าจะ augment flow ใน path ครั้งละ &Delta; หน่วย
 +
  ให้ &Delta; <math>= m.u</math>, <math>f = </math>Zero flow
 +
  Repeat
 +
    Repeat
 +
      หา <math>Gf</math>, หา augmenting path ที่มี cap <math>>=</math> &Delta;
 +
      เติม augment &Delta; หน่วย
 +
    until หา augmenting path ขนาด &Delta; ไม่ได้
 +
  &Delta; <math>=</math> &Delta; <math>/2</math>
 +
  until &Delta; <math><1</math>
 +
== Capacity scalling min cost flow ==
 +
:แต่ละ node จะมี demand <math>b(u)</math>
 +
:โดย parameter &Delta; จะเติม flow ครั้งละ &Delta;
 +
:ให้
 +
::<math>s(</math>&Delta;<math>)</math> เป็นเซตของ node <math>u</math> ที่ <math>b(u)>=</math> &Delta;
 +
::<math>t(</math>&Delta;<math>)</math> เป็นเซตของ node <math>u</math> ที่ <math>b(u)<=</math> &minus &Delta;
 +
::<math>G_f(</math>&Delta;<math>)</math> เป็น residual graph ที่ทุก edge มี cap อย่างน้อย &Delta;
 +
:รูป?
 +
:หลังจาก &Delta; augment flow ที่เหลือไม่เกิน &Delta;
 +
:<math>G_f(</math>&Delta;<math>)</math> ไม่มี negative cost cycle &rarr; มี feasible price function
 +
:&Delta;<math>/2 = G_f(</math>&Delta;<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

  1. หา 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

  1. ไม่มี negative cost cycle ใน
  2. 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