จดบันทึกคำบรรยายโดย:
- นาย ชาคริต กิตโร รหัส 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 จาก
ใดๆ แล้วให้
ระยะทางสั้นที่สุดจาก
→
Wikimedia Error
Error
Too many requests (f061ab2)
- Observation 1
Wikimedia Error
Error
Too many requests (f061ab2)
เป็น feasible price function → 
- Observation 2 ถ้าพิจารณา shortest path
จาก
ไปยัง node ใดๆ ทุกๆ edge
บน
มี ::
Wikimedia Error
Error
Too many requests (f061ab2)
D
Wikimedia Error
Error
Too many requests (f061ab2)

-
Wikimedia Error
Error
Too many requests (f061ab2)

-
Wikimedia Error
Error
Too many requests (f061ab2)
D
Wikimedia Error
Error
Too many requests (f061ab2)

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(n
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
*ยังไม่ได้ใส่รูป
ให้
Wikimedia Error
Error
Too many requests (f061ab2)
เป็น flow ที่ได้จากหลักการ augment
พิจารณา G
Wikimedia Error
Error
Too many requests (f061ab2)
claim : d เป็น feasible price function บน G
Wikimedia Error
Error
Too many requests (f061ab2)
พิจารณา edge(x,y) บน G
Wikimedia Error
Error
Too many requests (f061ab2)
case1:
Wikimedia Error
Error
Too many requests (f061ab2)
case2:
Wikimedia Error
Error
Too many requests (f061ab2)
นั่นคือ
Wikimedia Error
Error
Too many requests (f061ab2)
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
นั้นคือ
Wikimedia Error
Error
Too many requests (f061ab2)
เป็น min cost flow
Ford Fulkerson + Capacity Scalling
มี parameter Δ เป็น scale บอกว่าจะ augment flow ใน path ครั้งละ Δ หน่วย
ให้ Δ
Wikimedia Error
Error
Too many requests (f061ab2)
,
Wikimedia Error
Error
Too many requests (f061ab2)
Zero flow
Repeat
Repeat
หา
, หา augmenting path ที่มี cap
Wikimedia Error
Error
Too many requests (f061ab2)
Δ
เติม augment Δ หน่วย
until หา augmenting path ขนาด Δ ไม่ได้
Δ
Wikimedia Error
Error
Too many requests (f061ab2)
Δ
Wikimedia Error
Error
Too many requests (f061ab2)
until Δ
Wikimedia Error
Error
Too many requests (f061ab2)
Capacity scalling min cost flow
- แต่ละ node จะมี demand
Wikimedia Error
Error
Too many requests (f061ab2)

- โดย parameter Δ จะเติม flow ครั้งละ Δ
- ให้
-
Wikimedia Error
Error
Too many requests (f061ab2)
Δ
Wikimedia Error
Error
Too many requests (f061ab2)
เป็นเซตของ node
ที่
Wikimedia Error
Error
Too many requests (f061ab2)
Δ
-
Wikimedia Error
Error
Too many requests (f061ab2)
Δ
Wikimedia Error
Error
Too many requests (f061ab2)
เป็นเซตของ node
ที่
Wikimedia Error
Error
Too many requests (f061ab2)
&minus Δ
-
Wikimedia Error
Error
Too many requests (f061ab2)
Δ
Wikimedia Error
Error
Too many requests (f061ab2)
เป็น residual graph ที่ทุก edge มี cap อย่างน้อย Δ
- รูป?
- หลังจาก Δ augment flow ที่เหลือไม่เกิน Δ
-
Wikimedia Error
Error
Too many requests (f061ab2)
Δ
Wikimedia Error
Error
Too many requests (f061ab2)
ไม่มี negative cost cycle → มี feasible price function
- Δ
Wikimedia Error
Error
Too many requests (f061ab2)
Δ
Wikimedia Error
Error
Too many requests (f061ab2)

- อาจมี negative cost cycle นั้นคือ
ไม่มี min cost บน
Wikimedia Error
Error
Too many requests (f061ab2)
ที่
Wikimedia Error
Error
Too many requests (f061ab2)

-
Wikimedia Error
Error
Too many requests (f061ab2)
สร้างคู่ demand excess