ค้นหาเส้นทางที่สั้นและอ้วน


10

การสร้างแรงจูงใจ:ในอัลกอริธึมการขยายพา ธ สูงสุดของโฟลว์มาตรฐานลูปด้านในนั้นต้องการการค้นหาพา ธ จากแหล่งข้อมูลเพื่อให้จมลงในกราฟที่มีน้ำหนักโดยตรง ตามทฤษฎีแล้วเป็นที่ทราบกันดีว่าในการที่อัลกอริธึมจะยุติลงเมื่อมีความจุที่ไม่ลงตัวเราจำเป็นต้องวางข้อ จำกัด บนเส้นทางที่เราพบ ยกตัวอย่างเช่นอัลกอริทึม Edmonds-Karp บอกให้เราหาเส้นทางที่สั้นที่สุด

สังเกตุพบว่าเราอาจต้องการหาไขมัน (มีคำที่ดีกว่าสำหรับเส้นทางนี้หรือไม่) ตัวอย่างเช่นเมื่อใช้การขยายความจุเราจะพบเส้นทางที่สั้นที่สุดที่สามารถรับการไหลอย่างน้อยไม่มีข้อ จำกัด เกี่ยวกับระยะเวลาที่เส้นทางจะเป็น เมื่อเราไม่พบเส้นทางใด ๆ อีกต่อไปเราจะลดϵและทำซ้ำϵϵ

ฉันสนใจที่จะปรับทางเลือกในการเพิ่มเส้นทางสำหรับแอพพลิเคชั่นเฉพาะของการไหลแบบสูงสุดและฉันต้องการสำรวจการแลกเปลี่ยนระหว่างเส้นทางสั้นและเส้นทางไขมัน (หมายเหตุ: ไม่จำเป็นสำหรับฉันที่จะแก้ปัญหาเสมอฉันสนใจมากที่สุดในการหาขอบเขตล่างที่ใหญ่ที่สุดในระยะเวลาที่สั้นที่สุดของกำแพง)

คำถาม:มีวิธีมาตรฐานในการสอดแทรกระหว่างแนวทางพา ธ ที่สั้นที่สุดและวิธีการปรับสเกลความจุหรือไม่? นั่นคือมีอัลกอริทึมสำหรับการค้นหาเส้นทางที่สั้นและอ้วนหรือไม่โดยที่พารามิเตอร์บางตัวจะควบคุมความยาวของเส้นทางที่เรายินดีแลกกับความอ้วน ที่สุดขั้วฉันต้องการที่จะกู้คืนเส้นทางที่สั้นที่สุดในปลายด้านหนึ่งและเส้นทางสไตล์การปรับความจุในอีกด้านหนึ่ง


3
โปรดทราบว่าหากคุณพยายามเพิ่มประสิทธิภาพทั้งความสั้นและความอ้วนในเวลาเดียวกันคุณจะเข้าสู่อาณาจักรของการเพิ่มประสิทธิภาพแบบหลายเกณฑ์ซึ่งหมายถึงในกรณีส่วนใหญ่ความแข็งแบบ NP
Raphael

ϵ

@Daniel Apon - มี pseudocode สำหรับปรับขนาดความจุในหน้า 31 ของสไลด์เหล่านี้: cs.princeton.edu/~wayne/kleinberg.../07maxflow.pdf
dan_x

@ ราฟาเอล - โปรดทราบว่าฉันกำลังมองหาเป้าหมายเดียวที่อาจเป็นเช่นการผสมผสานเชิงเส้นของความยาวและความอ้วน ยังถือว่าเป็นการเพิ่มประสิทธิภาพหลายเกณฑ์หรือไม่
dan_x

ϵ

คำตอบ:


2

ด้วยจิตวิญญาณของความคิดเห็นของคุณเกี่ยวกับ "ค่อนข้างดี แต่ไม่จำเป็นต้องเหมาะสมที่สุด" ฉันขอเสนอแนวคิดต่อไปนี้โดยไม่มีการรับประกันว่าจะได้ผลดีที่สุด!

เพื่อความสมบูรณ์นี่คือ pseudocode ที่คุณอ้างถึง (หมายเหตุ: อัลกอริธึมที่เชื่อมโยงถือว่าความจุของขอบคือจำนวนเต็มระหว่าง 1 ถึง C และการไหลและค่าความจุที่เหลือนั้นเป็นส่วนประกอบ):

Scaling-Max-Flow (G, s, t, C) {
   foreach e ∈ E f (e) ← 0
   Δ←พลังงานที่เล็กที่สุดของ 2 ที่มากกว่าหรือเท่ากับ C
   G_f ←กราฟที่เหลือ

   ในขณะที่ (Δ≥ 1) {
      G_f (Δ) ←Δ-กราฟที่เหลือ
      ในขณะที่ (มีเส้นทางเพิ่ม P ใน G_f (Δ)) {
         f ←เพิ่ม (f, C, P)
         อัปเดต G_f (Δ)
      }
      Δ←Δ / 2
   }
   ส่งคืน f
}

ϵϵ=Δϵ

0ρ1ρ

ϵρ

ϵ(ρ)ϵ+(1ρ)

ρ=0ρ=10<ρ<1ϵ1


ขอบคุณสำหรับความคิด - มันใกล้เคียงกับสิ่งที่ฉันมีอยู่ในใจ ข้อกังวลเดียวของฉันคือว่านี่เป็นเพียง "ตารางการสลายตัว" ที่แตกต่างกันสำหรับการปรับขนาดกำลังการผลิตใช่ไหม
dan_x

เมื่อคุณสลายตัวมากขึ้นคุณจะได้เส้นทางที่สั้นกว่าและเมื่อคุณสลายตัวน้อยลงคุณจะได้เส้นทางที่อ้วนขึ้น สิ่งที่ฉันมีอยู่ในใจคือแต่ละเส้นทางจะได้รับคะแนนตามปริมาณไขมันและระยะเวลาที่สั้นจากนั้นอัลกอริทึมจะค้นหาเส้นทางทั้งหมดที่มีคะแนนมากกว่าเกณฑ์
dan_x

แต่ถ้าไม่มีวิธีการมาตรฐานในการทำเช่นนี้ฉันสามารถนั่งลงและคิดให้ได้อัลกอริทึมที่ทำในสิ่งที่ฉันต้องการ
dan_x
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.