อัลกอริทึมของ Dijsktra นำไปใช้กับปัญหาพนักงานขายที่เดินทาง


13

ฉันเป็นสามเณร (มือใหม่รวมถึงทฤษฎีความซับซ้อนในการคำนวณ) และฉันมีคำถาม

ช่วยบอกว่าเรามี 'ปัญหาพนักงานขายที่ต้องเดินทาง' การใช้อัลกอริทึมของ Dijkstra ต่อไปนี้จะแก้ปัญหาได้หรือไม่?

จากจุดเริ่มต้นเราคำนวณระยะทางที่สั้นที่สุดระหว่างสองจุด เราไปที่จุด เราลบจุดต้นทาง จากนั้นเราคำนวณจุดระยะทางที่สั้นที่สุดถัดไปจากจุดปัจจุบันและอื่น ๆ ...

ทุกขั้นตอนเราทำให้กราฟเล็กลงในขณะที่เราย้ายจุดระยะทางสั้นที่สุดที่มีอยู่ถัดไป จนกว่าเราจะไปทุกจุด

สิ่งนี้จะช่วยแก้ปัญหาพนักงานขายที่เดินทาง


3
โปรดทราบว่า TSP เป็น NP-complete และอัลกอริธึมของ Dijkstra มีรันไทม์แบบพหุนาม สิ่งที่คุณเสนอจะเป็นวิธีแก้ปัญหาต่อไปของ P = NP คำถามดังนั้นจึงไม่น่าเป็นไปได้ที่แนวทางของคุณจะใช้งานได้ การให้เหตุผลแบบนี้เป็นเพียงการคิดแบบฮิวริสติก!
Raphael

คำตอบ:


24

อัลกอริทึมของ Dijkstra ส่งคืนต้นไม้เส้นทางที่สั้นที่สุดที่มีเส้นทางที่สั้นที่สุดจากจุดเริ่มต้นไปยังจุดสุดยอดซึ่งกันและกัน แต่ไม่จำเป็นต้องเป็นเส้นทางที่สั้นที่สุดระหว่างจุดยอดอื่น ๆ หรือเส้นทางที่สั้นที่สุดที่เข้าสู่จุดยอดทั้งหมด

นี่คือตัวอย่างการนับที่อัลกอริทึมโลภที่คุณอธิบายไม่ทำงาน:

เคาน์เตอร์ตัวอย่างเช่น

a[a,b,c,d,a]a[a,b,d,c,a]a,b,c,dd,a เพื่อกลับไปยังเมืองเริ่มต้น


8

ตามที่ปรากฏในคำตอบอื่น ๆ ข้อเสนอแนะของคุณไม่สามารถแก้ปัญหาพนักงานขายการเดินทางได้อย่างมีประสิทธิภาพให้ฉันโปรดระบุวิธีที่ดีที่สุดที่รู้จักในด้านการค้นหาการเรียนรู้แบบฮิวริสติก (เนื่องจากฉันเห็นอัลกอริทึมของ Dijkstra .

(u,v)(v,u)

วิธีที่ดีที่สุด (ฉันรู้) ประกอบด้วยการทำงานของสาขาและ Bound ลึกแรกค้นหาวิธีการแก้ปัญหาที่แก้ปัญหาคือค่าใช้จ่ายของขั้นต่ำSpanning Tree (MST) เนื่องจาก MST สามารถคำนวณได้ในเวลาพหุนามด้วยอัลกอริทึมของ PrimหรืออัลกอริทึมของKruskalดังนั้นจึงสามารถคาดหวังให้ส่งคืนโซลูชันได้ภายในระยะเวลาที่เหมาะสม สำหรับการอภิปรายที่ยอดเยี่ยมของอัลกอริทึมทั้งสองนี้ฉันขอแนะนำให้คุณดูที่คู่มือการออกแบบอัลกอริทึม

ตามจริงแล้วฉันขอเน้นว่าเนื่องจากวิธีการนี้ไม่แนะนำให้เห็นความคืบหน้ามากนักในการหาขอบเขตที่เหมาะสมของปัญหานี้ดังนั้นฉันคิดว่ามันเป็นคำถามที่ร้อนแรงในการค้นหาเชิง combinatorial

หวังว่าจะช่วยได้


2

ฉันไม่รู้ว่าใครที่นี่ไม่สังเกตเห็นว่าการใช้อัลกอริทึมของ Dijkstra นั้นไม่จำเป็นอย่างสิ้นเชิงในกรณีนี้หรือไม่ คุณสามารถใช้อัลกอริทึมโลภได้โดยเพียงแค่เลือกโหนดที่อยู่ใกล้ที่สุดซึ่งรู้จักกันในชื่อ apriori อัลกอริทึมของ Dijkstra ใช้สำหรับค้นหาเส้นทาง แต่คุณทำเพียงขั้นตอนเดียวในแต่ละครั้ง สิ่งนี้เห็นได้ชัดว่าไม่พบวิธีแก้ปัญหาที่ดีที่สุดสำหรับ TSP แต่วิธีการที่ดีมากหลายวิธีก็ไม่พบเช่นกัน ตัวแก้ปัญหาที่เหมาะสมที่สุดสำหรับ TSP นั้นมีความต้องการในการคำนวณมาก


1

คำตอบคือไม่นั่นไม่ใช่วิธีที่ดีในการแก้ปัญหา TSP ตัวอย่างตัวนับที่ดีคือจุดที่ทุกจุดอยู่บนบรรทัดดังต่อไปนี้:

--5 ------------------ 3 ----- 1--0 --- 2 ---------- 4

การใช้อัลกอริธึมของ Dijsktra จะทำให้พนักงานขายที่ยากจนเริ่มต้นที่จุด 0 ก่อนอื่นให้ไปที่ 1 จากนั้นไปที่ 2 จากนั้นก็ถึง 3 และ 3 ต่อไป ซึ่งไม่ดีที่สุด

หวังว่าจะช่วย มาดูบทแรกในหนังสือดีเลิศของ Steven S. Skiena ที่ชื่อ "การออกแบบอัลกอริทึม" ซึ่งอธิบายตัวอย่างนี้ในรายละเอียดเพิ่มเติม

ปัญหา TSP ไม่ได้หาทางที่สั้นที่สุดระหว่างสองจุด แต่ในการทำเส้นทางระหว่างจุดทั้งหมดที่เหมาะสมที่สุด เมื่อคุณมีเส้นทางที่ดีที่สุดคุณสามารถใช้ Dijsktra เพื่อค้นหาเส้นทางที่สั้นที่สุดระหว่างแต่ละจุดในเส้นทาง


2
Dijkstra เป็นอัลกอริทึมพา ธ สั้นที่สุดของซอร์สเดียว แต่จะไม่ "ทำให้" พนักงานขายเริ่มต้นที่ 0 และจะไม่ส่งคืนเส้นทาง มันจะส่งกลับต้นไม้เส้นทางที่สั้นที่สุดที่มีเส้นทางที่สั้นที่สุดไปยังแต่ละจุดสุดยอดจากจุดยอดที่กำหนด
Joe

ตามเนื้อผ้าปัญหา TSP [ en.wikipedia.org/wiki/ ...... ] คือ "เมื่อได้รับรายชื่อเมืองและระยะทางตามเข็มคู่ภารกิจคือการหาเส้นทางที่สั้นที่สุดที่จะเข้าชมแต่ละเมืองเพียงครั้งเดียวและกลับไปยังเมืองต้นทาง " ในทางเทคนิคเป็นไปไม่ได้ที่จะสนองความต้องการเหล่านั้นบนเส้นทาง - คุณจะต้องไม่กลับไปที่เมืองเริ่มต้นหรือเมืองซ้ำ
Joe

อย่างไรก็ตามบนเส้นทางถ้าเราผ่อนคลายข้อ จำกัด เหล่านั้นอย่างใดอย่างหนึ่งปัญหาคือเรื่องเล็กน้อย
Joe

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