Алгоритм визначення найшвидшого маршруту?


17

Скажімо, ми їдемо від 1 до 5. Найкоротший маршрут буде 1-4-3-5 (всього: 60 км).

Графік

Для цього ми можемо використовувати алгоритм Дейкстри .

Тепер проблема полягає в тому, що найкоротший маршрут не завжди є найшвидшим через дорожні пробки чи інші фактори.

Наприклад:

  • 1-2, як відомо, мають часті пробки, тому цього слід уникати.
  • Раптом до 4-3 трапляється автомобільна аварія, тож цього слід уникати і.
  • І т.д. ...

Тому, ймовірно, ми можемо швидко на маршруті 1-4-5 через відсутність пробок / аварій, тому будемо прибувати о 5 швидше.

Ну, це загальна ідея, і я ще не замислювався над деталями.

Чи є алгоритм вирішення цієї проблеми?


3
Це домашнє завдання? Це не просто en.wikipedia.org/wiki/Travelling_salesman_problem для проходження зваженого графіка?
StuperUser

9
@StuperUser: Ні, TSP - це схема всіх вузлів без дублікатів. У випадку зразка, наприклад, не потрібно потрапляти у вузол 2.
Девід Торнлі

2
@DavidThornley Я бачу. Отже, Dijkstra - це найкоротший маршрут на зваженому графіку? І TSP - це обхід відвідувачів кожного вузла?
StuperUser

1
@Stuper: Найкоротший обхід, так
BlueRaja - Danny Pflughoeft

2
@StuperUser, просто FYI, TSP - це сильна проблема NP-Complete, яка не має рішення, яке може бути запущено в поліноміальний час. ... Отже, тепер ви знаєте.
riwalk

Відповіді:


5

Оскільки ви привнесли скупчення зображень, будьте обережні, щоб вас не зачепив Парадокс Брейса . Якщо кожен обирає оптимальний шлях, це призводить до гіршого часу подорожі для всіх.


49

Так: Dijkstra

Dijkstra так само добре працює в цій ситуації.
Ви просто використовуєте час, а не відстань, як вагу кожної дуги.


9
Зазвичай "відстань" у Діккстрі буде зваженою на всілякі речі, вартість / платне, перевагу автостради, обмеження швидкості - використання простої відстані є лише найпростішим підходом до ніав. Саме це робить алгоритм таким розумним
Мартін Бекетт

6
Хоча Dijsktra зробить це, я, як правило, обираю A * для будь-якої серйозної роботи з просуванням маршруту; евристика дуже допоможе.
Мірча Кірея

6
Посилання: алгоритм пошуку * . Це розширення методу Дейкстри.
mgkrebbs

Поки існує застосований евристичний, A * буде кращим за Dijkstra (за показниками продуктивності).
bummzack

Прийнятну евристику було б дещо складно знайти тут, враховуючи, що ми, мабуть, враховуємо багато факторів (наприклад, пробки).
pwny

16

Так. Алгоритм Дейкстри вирішить цю проблему.

Проблема у вашому випадку полягає в тому, що ви автоматично припускаєте, що найкоротший шлях прирівнюється до пройденої відстані, коли насправді це більш доцільно дорівнювати ВАРТІСТЮ проходження маршруту.

Якщо на одному шляху є блокпост, його COST повинен бути вищим, і алгоритм все ще застосовується.


Так вибачте, якщо я не використав правильне формулювання. Я маю на увазі «найзручніший маршрут» (найменша мінімальна вартість)
anta40

11

Ви повинні просто мати можливість замінити відстань на час між вузлами та вирішити це так само.


10

Дійкстра

Як було сказано раніше, він використовується не тільки на найкоротші відстані. Я вважаю, що ця анімація добре розуміє "силу" (за відсутністю кращого слова) Діккстри:

Дійкстра

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.