Як відрізняються найсучасніші алгоритми визначення маршруту для зміни графіків (D *, D * -Lite, LPA * тощо)?


96

Останніми роками було розроблено багато алгоритмів накладання маршрутів, які можуть обчислити найкращий шлях у відповідь на зміни графіків набагато швидше, ніж A * - що вони таке, і чим вони відрізняються? Вони для різних ситуацій чи деякі інші застаріли?


Це ті, що мені вдалося знайти досі:

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


Моя конкретна проблема: у мене є сітка з початком, обробкою та деякими стінами. Зараз я використовую A *, щоб знайти найкращий шлях від початку до кінця.

Зображення2

Потім користувач перемістить одну стіну , і мені доведеться ще раз перерахувати весь шлях. «Рухатися стіна / перераховувати-шлях» крок відбувається багато разів поспіль, тому я шукаю алгоритм , який буде мати можливість швидко перерахувати найкращий шлях без необхідності запуску повного ітерації A *.

Хоча я не обов'язково шукаю змін до A * - це може бути абсолютно окремий алгоритм.


3
Ви подивилися на D *? Це покроковий алгоритм, і якщо я правильно пам’ятаю, слід вирішувати ситуацію саме так. Я одного разу побачив робота, який використовував його для проходження маршрутів, де в навколишньому середовищі були випадкові ходунки.
Juho

7
@Kaveh: Чому не потрібно просити огляд сучасних алгоритмів динамічного простеження маршрутів "рівень дослідження?" Field-D * менше 5 років, а НАВЧАННЯ менше 3 ..
BlueRaja - Danny Pflughoeft

7
Я не впевнений, чому це питання не підходить для цього форуму. це аж ніяк не врегульована та стара тема
Суреш Венкат

5
@ BlueRaja-DannyPflughoeft Я також думаю, що це хороше питання на рівні досліджень. Я додам відповідь на основі свого коментаря та трохи розгорну її.
Джухо

4
@ BlueRaja-DannyPflughoeft Пов'язаний на reddit.
U2EF1

Відповіді:


77

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

Посилання на кожен статтю можна знайти у запитанні, зазначеному вище.

  • Прості перерахунки
    • D * (aka Dynamic A * ) (1994): На початковому етапі D * працює дуже аналогічно A *, знаходячи найкращий шлях від початку до кінця дуже швидко. Однак, коли одиниця рухається від початку до кінця, якщо графік зміниться, D * здатний дуже швидко перерахувати найкращий шлях від позиції цього одиниці до фінішу, набагато швидше, ніж просто повторно запустити A * з позиції цього блоку. D *, однак, має репутацію надзвичайно складної, і була повністю застаріла набагато простішим D * -Lite.
    • Сфокусований D * (1995): поліпшення D *, щоб зробити його швидшим / "більш реальним часом". Я не можу знайти порівняння з D * -Lite, але враховуючи, що це старше, а про D * -Lite говорять набагато більше, я припускаю, що D * -Lite якось краще.
    • DynamicSWSF-FP (1996): зберігає відстань від кожного вузла до вузла фінішу. Має велику початкову настройку для обчислення всіх відстаней. Після зміни графіка він може оновити лише ті вузли, відстані яких змінилися. Непов’язаний як з A *, так і з D *. Корисно, коли ви хочете знайти відстань від декількох вузлів до фінішу після кожної зміни; в іншому випадку, LPA * або D * -Lite, як правило, більш корисні.
    • LPA * / Поступовий A * (2001): LPA * (Планування впродовж життя A *) , також відомий як Поступовий A * (а іноді і заплутано, як "LPA", хоча це не має відношення до іншого алгоритму, названого LPA), є комбінація DynamicSWSF-FP та A *. Під час першого запуску він точно такий же, як A *. Однак після незначних змін у графіку наступні пошуки з тієї ж пари старту / фінішу можуть використовувати інформацію з попередніх запусків, щоб різко зменшити кількість вузлів, які потрібно перевірити, порівняно з A *. Це саме моя проблема, тому звучить, як LPA * буде найкращим чином. LPA * відрізняється від D * тим, що він завжди знаходить найкращий шлях від того самого старту до того ж фінішу; він не використовується, коли стартова точка рухається(наприклад, одиниці, що рухаються по початковому найкращому шляху) . Однак ...
    • D * -Lite (2002): Цей алгоритм використовує LPA * для імітації D *; тобто він використовує LPA *, щоб знайти новий найкращий шлях для одиниці, коли він рухається по початковому найкращому шляху і графік змінюється. D * -Lite вважається набагато простішим, ніж D *, і оскільки він завжди працює як мінімум так швидко, як D *, він повністю застарів D *. Таким чином, ніколи не існує жодних причин використовувати D *; використовуйте натомість D * -Lite.
  • Рух будь-якого кута
    • Поле D * (2007): варіант D * -Lite, який не обмежує рух до сітки; тобто найкращий шлях може мати одиницю, що рухається під будь-яким кутом, а не лише 45- (або 90-) градусів між точками сітки. Була використана НАСА для проходження маршрутів для марсоходів.
    • Theta * (2007): Варіант A *, який дає кращі (короткі) шляхи, ніж поле D *. Однак, оскільки він базується на A *, а не на D * -Lite, він не має можливостей швидкої перепланування, якими володіє поле D *. Дивіться також .
    • Інкрементальний Phi * (2009): найкраще з обох світів. Версія Theta *, яка є додатковою (вона також дозволяє швидко перезаписувати)
  • Переміщення цільових точок
    • GAA * (2008): GAA * (Узагальнений адаптивний A *) - це варіант A *, який обробляє рухомі цільові точки. Це узагальнення ще більш раннього алгоритму під назвою "Переміщення цільової адаптивності A *".
    • GRFA * (2010): GFRA * (Узагальнене отримання Fringe-Retrieving A *) є (?) Узагальненням GAA * до довільних графіків (тобто не обмежується двовимірним) із застосуванням методів іншого алгоритму під назвою FRA *.
    • MTD * -Lite (2010): MTD * -Lite (рухома мета D * -Lite) - це "розширення D * Lite, яке використовує принцип, що стоїть за генералізованим Fringe-Retrieving A *" для швидкої заміни пошуку рухомих цілей.
    • Tree-AA * (2011): (???) Здається, що це алгоритм пошуку невідомої місцевості, але заснований на адаптивному A *, як і всі інші алгоритми в цьому розділі, тому я його розміщую тут. Не впевнений, як він порівнюється з іншими в цьому розділі.
  • Швидкий / Неоптимальний
    • У будь-який час D * (2005): Це варіант "Anytime" D * -Lite, який виконується комбінуванням D * -Lite з алгоритмом, який називається Anytime Repaiting A * . Алгоритм "У будь-який час" - це той, який може працювати за будь-яких часових обмежень - для початку він дуже швидко знайде неоптимальний шлях, а потім покращить цей шлях, тим більше часу йому буде надано.
    • HPA * (2004): HPA * (Ієрархічний пошук шляху A *) призначений для пошуку шляху великої кількості одиниць на великому графіку, наприклад, у відеоіграх RTS (стратегія реального часу) . Усі вони матимуть різні початкові місця та потенційно різні кінцеві місця. HPA * розбиває графік на ієрархію, щоб швидше знайти «майже оптимальні» шляхи для всіх цих одиниць набагато швидше, ніж запуск A * на кожному з них окремо. Дивитися також
    • PRA * (2005): З того, що я розумію, PRA * (Часткове уточнення A *) вирішує ту саму проблему, що і HPA *, але по-іншому. Вони обоє мають "схожі характеристики продуктивності".
    • HAA * (2008): HAA * (Ієрархічна примітка A *) - це узагальнення HPA *, що дозволяє обмежувати проходження деяких одиниць по деяких місцевостях (наприклад, невеликий шлях, яким можуть пройти деякі одиниці, але більші не можуть; або отвір, який можуть перетнути лише літаючі апарати тощо)
  • Інше / невідомо
    • LPA (1997): LPA (алгоритм пошуку шляхів без циклу), схоже, є алгоритмом маршрутизації, який лише незначно пов'язаний з проблемами, які вирішують інші алгоритми тут. Я згадую лише про те, що в цьому документі в кількох місцях Інтернету заплутано (і неправильно) посилається як на документ, що представляє LPA *, чого це не так.
    • LEARCH (2009): LEARCH - це комбінація алгоритмів машинного навчання, яка використовується для того, щоб навчити роботів самостійно знаходити майже оптимальні шляхи. Автори пропонують комбінувати LEARCH з полем D * для кращих результатів.
    • BDDD * (2009): ??? Я не можу отримати доступ до паперу.
    • SetA * (2002): ??? Це, мабуть, варіант A *, який здійснює пошук за моделлю «бінарної діаграми рішення» (BDD) графіка? Вони стверджують, що в деяких випадках він працює «на кілька порядків швидше, ніж A *» . Однак якщо я правильно розумію, це випадки, коли кожен вузол на графіку має багато ребер?

З огляду на все це, виявляється, що LPA * найкраще підходить для моєї проблеми.


Ну .. Я також знайшов цей документ від @lhrios, який порівнює деякі алгоритми.
mg007

Я знаю, що це старе, але я думаю, що варто зазначити невеликий недолік у вашому описі поля D *. Звичайний D * не обмежений "сіткою", він обмежений дискретним графіком. Справа в цьому документі полягає в тому, що для того, щоб змусити роботу A *, D * і т. Д. Вам потрібно розмежувати безперервний простір на шматки, що обмежує кути, по яких можна рухатися. Поле D * усуває це обмеження і дозволяє вам обробляти держави-наступники безперервно, а не дискретно (мається на увазі більш чи менш хитрість). Він просто використовує 2D сітку як приклад, D * / A * і т.д. ні в якому разі не обмежуються сіткою.
LinearZoetrope

Я мушу зазначити, що поле D * обмежене сіткою, хоча в роботі зазначається, що вони працювали в тривимірній версії. Це пов’язано з інтерполяцією, яку вона використовує. Досі існує висновок, що A * і D * працюють над графіками з довільним числом держав-наступників, поле D * - це лише вдосконалення для сценаріїв, де D * використовує планування на основі сітки.
LinearZoetrope

Важлива відмінність поля D * від Theta * / Incremental Phi * полягає в тому, що поле D * може мати унікальні ваги для кожного квадрата, тоді як Theta * і Incremental Phi * обмежуються однаковою вагою для всіх квадратів, які можна відвідати. Отже, інкрементальний Phi * не перевершує поле D *.
HelloGoodbye

1
@Jsor: Ось тривимірна версія поля D *: 3D Field D - JPL Robotics
HelloGoodbye

16

Існує велике застереження при використанні D *, D * -Lite або будь-якого з додаткових алгоритмів цієї категорії (і варто зазначити, що цей застереження рідко згадується в літературі). Ці типи алгоритмів використовують зворотний пошук. Тобто вони обчислюють витрати назовні від вузла цілі, як пульсація, яка поширюється назовні. Коли вартість ребер змінюється (наприклад, ви додаєте або видаляєте стіну у своєму прикладі), всі вони мають різні ефективні стратегії лише для оновлення підмножини досліджуваних (так званих "відвідуваних" вузлів, на які впливають зміни.

Велике застереження полягає в тому, що розташування цих змін щодо місця розташування цілі робить величезну різницю в ефективності алгоритмів. Я показав у різних працях і свою тезу, що цілком можливо, що в гіршому випадку виконання будь-якого з цих покрокових алгоритмів може бути гіршим, ніж викидати всю інформацію та починати заново з чогось неінкрементального, як звичайний старий A *.

Коли змінена інформація про вартість близька до периметра розширюваного фронту пошуку ("відвіданий" регіон), мало шляхів доводиться змінювати, і додаткові оновлення швидко проходять. Доречний приклад - мобільний робот з датчиками, прикріпленими до його тіла. Датчики бачать світ лише біля робота, а значить, зміни є і в цьому регіоні. Цей регіон є початковою точкою пошуку, а не метою, і тому все працює добре, і алгоритми дуже ефективні при оновленні оптимального шляху для виправлення змін.

Коли змінена інформація про вартість близька до мети пошуку (або ваш сценарій бачить ціль зміни локації, а не лише початок), ці алгоритми зазнають катастрофічного уповільнення. У цьому сценарії майже всю збережену інформацію потрібно оновлювати, оскільки змінена область настільки близька до мети, що майже всі попередньо обчислені шляхи проходять через зміни і повинні бути повторно оцінені. Через надмірне зберігання додаткової інформації та обчислення для поступових оновлень, повторна оцінка за цією шкалою відбувається повільніше, ніж новий початок.

Оскільки ваш приклад сценарію дозволяє користувачеві переміщати будь-яку стіну, яку він бажає, ви будете зазнавати цієї проблеми, якщо будете використовувати D *, D * -Lite, LPA * і т.д. Час роботи вашого алгоритму буде змінним, залежно від користувача вхід. Загалом, "це погано" ...

Наприклад, група Алонцо Келлі в КМУ мала фантастичну програму під назвою PerceptOR, яка намагалася поєднувати наземних роботів з повітряними роботами, які обмінювалися інформацією про сприйняття в режимі реального часу. Коли вони намагалися скористатися вертольотом, щоб забезпечити оновлення витрат у режимі реального часу на систему планування наземного транспортного засобу, вони натрапили на цю проблему, оскільки вертоліт міг літати попереду наземного транспортного засобу, побачивши зміни вартості ближче до мети, і тим самим сповільнити вниз їх алгоритми. Чи обговорювали вони це цікаве спостереження? Ні. Зрештою, найкращим, що їм вдалося, було те, щоб вертоліт летів прямо над наземним транспортним засобом - це зробило його найдорожчою щогловою щоглою в світі. Звичайно, я дріб'язковий. Але це велика проблема, про яку ніхто не хоче говорити - і вони повинні,

Є лише кілька паперів, які обговорюють це, в основному я. З робіт, написаних авторами чи студентами авторів оригінальних робіт, перелічених у цьому запитанні, я можу придумати лише одну, яка фактично згадує про цю проблему. Ліхачов і Фергюсон пропонують спробувати оцінити масштаб необхідних оновлень і промити збережену інформацію, якщо, за оцінками, додаткове оновлення триватиме довше, ніж новий початок. Це досить розумне рішення, але є й інші. Мій доктор наук узагальнює подібний підхід у широкому спектрі обчислювальних задач і виходить за рамки цього питання, однак ви можете вважати, що посилання є корисними, оскільки в ньому є ретельний огляд більшості цих алгоритмів та інше. Див. Http://db.acfr.usyd.edu.au/download.php/Allen2011_Tthes.pdf?id=2364 для деталей.


1
Дякую за додавання цих деталей :) У моєму додатку стіна рухається до початку так само часто, як і до кінця. Я реалізував BFS, A * та LPA *; A * насправді був трохи повільніше, ніж BFS (мої простори, як правило, обмежені, тому A * шукає лише трохи менше вузлів, ніж BFS; тим часом BFS потребує лише черги, яка може бути реалізована швидше, ніж може бути черга з пріоритетом) , але використовуючи середнє значення LPA *, щоб бути вдвічі швидшим.
BlueRaja - Danny Pflughoeft

9

Основна ідея полягає у використанні додаткового алгоритму, який може скористатися попередніми обчисленнями, коли початковий обчислений маршрут блокується. Це часто досліджується в контексті роботи, навігації та планування.

Koenig & Likkachev, Швидке перепланування для навігації в невідомій місцевості, IEEE транзакції з робототехніки, Vol. 21, № 3, червень 2005 р. Вводить D * Lite. Мабуть, можна сказати, що D * застаріло в сенсі, що D * Lite завжди такий же швидкий, як і D *. Крім того, D * є складним, його важко зрозуміти, проаналізувати та розширити. На малюнку 9 наведено псевдокод для D * Lite, а в таблиці 1 наведені експериментальні результати з D * Lite порівняно з BFS, назад A *, вперед A *, DynamicSWSF-P і D *.

Я не знаю новіших алгоритмів, які ви перераховуєте (У будь-який час D *, Поле D *, НАВЧАННЯ). Зовсім недавно я побачив робота, який використовував D * Lite для планування в навколишньому середовищі з випадковими ходунками. У цьому сенсі я не думаю, що D * Lite ні в якому разі не застарів. Для вашої практичної проблеми, мабуть, немає ніякої шкоди в спробі звичайного інженерного способу: скористайтеся деяким підходом, і якщо він не відповідає вашим потребам, спробуйте щось інше (більш складне).


4

Я хотів би додати щось про швидко досліджувані рандомізовані дерева або RRT. Основна ідея має гарне обговорення в Інтернеті, але, мабуть, безпечно почати зі посилань із сторінки Вікіпедії та з оригінальних робіт Куфнера та Лавалле на цю тему.

Найважливішою особливістю RRT є те, що вони можуть обробляти реально оцінені простори надзвичайно високого розміру, не задушуючись. Вони можуть обробляти динаміку, не є оптимальними, але ймовірнісно завершені (гарантовано успішні, якщо можливо, оскільки час обчислень йде до нескінченності) та здатні керувати рухомими цілями. Є деякі розширення, які дозволяють їм працювати в нестатичних просторах, найкращим з яких виглядає робота з багатопартійною RRT, яку я зв'язав нижче.


0

Структури даних, які називаються оракулами відстані, вирішують такі проблеми. Однак більшість результатів досліджень є лише для статичних графіків.

Якщо графіки є сітками (і, отже, планарними), існують деякі динамічні структури даних (незрозуміло, чи константи достатньо малі для відповідного додатка):

Точні найкоротші шляхи:

Jittat Fakcharoenphol, Satish Rao: Плоскі графіки, ребра негативної ваги, найкоротші шляхи та майже лінійний час. J. Comput. Сист. Наук. 72 (5): 868-889 (2006)

Приблизні найкоротші шляхи:

Філіп Н. Кляйн, Сайрам Субраманіан: Повністю динамічна схема апроксимації для найкоротших шляхів на площинних графіках. Algorithmica 22 (3): 235-249 (1998)

Іттай Авраам, Ширі Чечик, Кирило Гавойль: Повністю динамічні орієнтовні оракули відстані для плоских графіків через заборонені мітки відстані. STOC 2012: 1199-1218


Вибачте, але якщо вони працюють лише на статичних графіках, то що ви розумієте під "вони справляються з такими проблемами?" Проблема, яка задається, стосується конкретно нестатичних графіків.
BlueRaja - Danny Pflughoeft

дозвольте мені змінити акцент: більшість результатів призначені лише для статичних графіків. існують деякі динамічні структури даних. після чого перелік цих динамічних структур даних.
Крістіан Соммер

0

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

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