อัลกอริทึมในการกำหนดเส้นทางที่เร็วที่สุด?


17

สมมติว่าเราไปจาก 1 ถึง 5 เส้นทางที่สั้นที่สุดจะเป็น 1-4-3-5 (รวม: 60 กม.)

กราฟ

เราสามารถใช้อัลกอริทึมของ Dijkstraเพื่อทำสิ่งนั้น

ตอนนี้ปัญหาคือเส้นทางที่สั้นที่สุดไม่ใช่เส้นทางที่เร็วที่สุดเสมอไปเนื่องจากการจราจรติดขัดหรือปัจจัยอื่น ๆ

ตัวอย่างเช่น:

  • เป็นที่ทราบกันว่า 1-2 มีการจราจรติดขัดบ่อยดังนั้นควรหลีกเลี่ยง
  • ทันใดนั้นอุบัติเหตุทางรถยนต์ก็เกิดขึ้นในช่วง 4-3 ดังนั้นจึงควรหลีกเลี่ยงด้วย
  • ฯลฯ ...

ดังนั้นอาจเป็นไปได้ว่าเราสามารถเร่งความเร็วบนเส้นทาง 1-4-5 เนื่องจากไม่มีการจราจรติดขัด / อุบัติเหตุดังนั้นจะมาที่ 5 เร็วขึ้น

นั่นเป็นแนวคิดทั่วไปและฉันยังไม่ได้คิดถึงรายละเอียดเพิ่มเติม

มีอัลกอริทึมในการแก้ปัญหานี้หรือไม่?


3
เป็นการบ้านหรือไม่? นี่ไม่ใช่แค่en.wikipedia.org/wiki/Travelling_salesman_problemสำหรับการสำรวจกราฟถ่วงน้ำหนักใช่หรือไม่
StuperUser

9
@StuperUser: ไม่ TSP เป็นวงจรของโหนดทั้งหมดโดยไม่ซ้ำกัน ในกรณีตัวอย่างไม่จำเป็นต้องกดปุ่มโหนด 2 ตัวอย่างเช่น
David Thornley

2
@ DavidThornley ฉันเห็น ดังนั้น Dijkstra สำหรับเส้นทางที่สั้นที่สุดบนกราฟถ่วงน้ำหนัก? และ TSP จะแวะผ่านทุกโหนดหรือไม่
StuperUser

1
@Stuper: Traversal ที่สั้นที่สุดใช่
BlueRaja - Danny Pflughoeft

2
@ SuperUser เพียง FYI, TSP เป็นปัญหา NP-Complete อย่างยิ่งโดยไม่มีวิธีแก้ปัญหาที่สามารถเรียกใช้ในเวลาพหุนาม ... ตอนนี้คุณก็รู้แล้ว
riwalk

คำตอบ:


5

เนื่องจากคุณนำความแออัดในภาพต้องระวังคุณไม่ได้รับการติดโดยBraess' Paradox หากทุกคนเลือกเส้นทางที่ดีที่สุดจะส่งผลให้เวลาในการเดินทางแย่ลงสำหรับทุกคน


49

ใช่: Dijkstra

Dijkstra ทำงานได้ดีสำหรับสถานการณ์นี้
คุณแค่ใช้เวลามากกว่าระยะทางเป็นน้ำหนักของอาร์คแต่ละอัน


9
โดยทั่วไปแล้ว 'ระยะทาง' ใน Dijkstra จะถูกถ่วงน้ำหนักสำหรับสิ่งต่าง ๆ ทุกประเภทราคา / ค่าผ่านทางการกำหนดค่าทางด่วนการ จำกัด ความเร็ว - การใช้เพียงระยะทางเป็นวิธีการที่ง่ายที่สุดของ niave นี่คือสิ่งที่ทำให้อัลกอริทึมนั้นฉลาดมาก
Martin Beckett

6
แม้ว่า Dijsktra จะทำเช่นกัน แต่โดยทั่วไปฉันจะเลือก A * สำหรับการหางานที่จริงจัง การวิเคราะห์พฤติกรรมจะช่วยได้มาก
Mircea Chirea

6
Link: A * วิธีการค้นหา มันเป็นส่วนเสริมของวิธีการของ Dijkstra
mgkrebbs

ตราบใดที่มีฮิวริสติกที่เกี่ยวข้อง A * จะดีกว่าของ Dijkstra (ในแง่ของประสิทธิภาพ)
bummzack

ฮิวริสติกที่ยอมรับได้นั้นค่อนข้างท้าทายในการพิจารณาที่นี่เนื่องจากเราดูเหมือนจะคำนึงถึงปัจจัยหลายประการ (เช่นการจราจรติดขัด)
pwny

16

ใช่. อัลกอริทึมของ Dijkstra จะแก้ปัญหานี้ได้

ปัญหาในกรณีของคุณคือการที่คุณถือว่าเส้นทางที่สั้นที่สุดโดยอัตโนมัติเท่ากับระยะทางที่เดินทางเมื่อในความเป็นจริงมันจะมีค่าเท่ากับค่าใช้จ่ายในการเดินทาง

หากหนึ่งเส้นทางมีสิ่งกีดขวางบนถนนดังนั้นค่าใช้จ่ายของมันควรจะสูงกว่าและอัลกอริทึมยังคงใช้


ใช่ขอโทษถ้าฉันไม่ได้ใช้ถ้อยคำที่ถูกต้อง สิ่งที่ฉันหมายถึงคือ 'เส้นทางที่สะดวกที่สุด' (ราคาต่ำสุดที่สุด)
anta40

11

คุณควรจะสามารถแทนที่ระยะทางของคุณด้วยเวลาระหว่างโหนดและแก้ปัญหาด้วยวิธีเดียวกัน


10

Dijkstra

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

Dijkstra

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