В последние годы было разработано множество алгоритмов поиска путей, которые могут вычислять лучший путь в ответ на изменения графика гораздо быстрее, чем A * - что это такое и чем они отличаются? Они для разных ситуаций, или некоторые устаревшие?
Это те, которые я смог найти до сих пор:
- Д * (1994)
- Сосредоточенный D * (1995)
- DynamicSWSF-FP (1996)
- LPA (1997)
- LPA * / Инкремент A * (2001)
- D * Lite (2002)
- SetA * (2002)
- HPA * (2004)
- В любое время D * (2005)
- PRA * (2005)
- Поле D * (2007)
- Тета * (2007)
- HAA * (2008)
- GAA * (2008)
- УЧЕБА (2009)
- BDDD * (2009 - я не могу получить доступ к этой статье: |)
- Инкрементальный Фи * (2009)
- GFRA * (2010)
- MTD * -Lite (2010)
- Дерево-АА * (2011)
Я не уверен, какие из них применимы к моей конкретной проблеме - я прочитаю их все, если необходимо, но это сэкономило бы мне много времени, если бы кто-то мог написать резюме.
Моя конкретная проблема: у меня есть сетка с началом, финишем и некоторыми стенами. В настоящее время я использую A *, чтобы найти лучший путь от начала до конца.
Затем пользователь переместит одну стену , и мне придется снова пересчитать весь путь. «Двигаться стена / пересчитывать-путь» шаг происходит много раз подряд, поэтому я ищу алгоритм , который будет иметь возможность быстро пересчитать наилучший путь без необходимости запуска полного итерации A *.
Хотя я не обязательно ищу изменение A * - это может быть совершенно отдельный алгоритм.
источник
Ответы:
Итак, я пролистал бумаги, и это то, что я блестел. Если в предмете есть кто-то более осведомленный, пожалуйста, исправьте меня, если я ошибаюсь (или добавьте свой собственный ответ, и я приму его вместо этого!) .
Ссылки на каждый документ можно найти в вопроснике, выше.
Учитывая все это, кажется, что LPA * лучше всего подходит для моей проблемы.
источник
При использовании D *, D * -Lite или любого из дополнительных алгоритмов в этой категории есть большая оговорка (и стоит отметить, что эта оговорка редко упоминается в литературе). Эти типы алгоритмов используют обратный поиск. То есть они вычисляют затраты наружу от узла цели, как пульсация, распространяющаяся наружу. Когда цены на ребра изменяются (например, вы добавляете или удаляете стену в вашем примере), все они имеют различные эффективные стратегии для обновления только подмножества исследуемых (так называемых «посещенных») узлов, на которые влияют изменения.
Большое предостережение состоит в том, что расположение этих изменений относительно местоположения цели имеет огромное значение для эффективности алгоритмов. Я показал в различных статьях и в моем тезисе, что для наихудшего варианта производительности любого из этих инкрементальных алгоритмов вполне возможно быть хуже, чем выбрасывать всю информацию и начинать заново с чего-то неинкрементного, как обычный старый A *.
Когда измененная информация о стоимости близка к периметру расширяющегося фронта поиска («посещенная» область), нужно изменить несколько путей, и постепенные обновления выполняются быстро. Уместным примером является мобильный робот с датчиками, прикрепленными к его телу. Датчики видят только мир рядом с роботом, и, следовательно, изменения происходят в этом регионе. Эта область является отправной точкой поиска, а не целью, и поэтому все работает хорошо, и алгоритмы очень эффективны при обновлении оптимального пути для исправления изменений.
Когда измененная информация о стоимости близка к цели поиска (или ваш сценарий видит места изменения цели, а не только начало), эти алгоритмы терпят катастрофическое замедление. В этом сценарии необходимо обновить почти всю сохраненную информацию, поскольку измененная область настолько близка к цели, что почти все предварительно рассчитанные пути проходят через изменения и должны быть переоценены. Из-за накладных расходов на хранение дополнительной информации и вычислений для выполнения инкрементных обновлений переоценка в этом масштабе медленнее, чем новый старт.
Поскольку ваш примерный сценарий позволяет пользователю перемещать любую стену по своему усмотрению, вы столкнетесь с этой проблемой, если будете использовать D *, D * -Lite, LPA * и т. Д. Производительность вашего алгоритма во времени будет переменной, в зависимости от пользователя. вход. В общем, "это плохо" ...
Например, у группы Алонзо Келли в CMU была фантастическая программа под названием PerceptOR, которая пыталась объединить наземных роботов с воздушными роботами, и все они обменивались информацией о восприятии в режиме реального времени. Когда они попытались использовать вертолет для предоставления в реальном времени обновлений стоимости системы планирования наземного транспортного средства, они столкнулись с этой проблемой, поскольку вертолет мог лететь впереди наземного транспортного средства, видя изменения стоимости ближе к цели и, таким образом, замедляя вниз их алгоритмы. Обсуждали ли они это интересное наблюдение? В конце концов, лучшее, что им удалось, - это заставить вертолет летать прямо над наземным транспортным средством, что сделало его самой дорогой в мире мачтой для датчиков. Конечно, я мелкая Но это большая проблема, о которой никто не хочет говорить - и они должны,
Есть только несколько статей, которые обсуждают это, в основном я. Из работ, написанных авторами или студентами авторов оригинальных работ, перечисленных в этом вопросе, я могу вспомнить только одну, которая действительно затрагивает эту проблему. Лихачев и Фергюсон предлагают попытаться оценить масштаб требуемых обновлений и очистить сохраненную информацию, если предполагается, что добавочное обновление займет больше времени, чем новый старт. Это довольно разумный обходной путь, но есть и другие. Моя кандидатская диссертация обобщает аналогичный подход в широком спектре вычислительных задач и выходит за рамки этого вопроса, однако вы можете найти полезные ссылки, поскольку в ней содержится подробный обзор большинства из этих алгоритмов и многое другое. См. Http://db.acfr.usyd.edu.au/download.php/Allen2011_Thesis.pdf?id=2364. для деталей.
источник
Основная идея состоит в том, чтобы использовать инкрементный алгоритм, который может использовать преимущества предыдущих вычислений, когда начальный рассчитанный маршрут блокируется. Это часто исследуется в контексте роботов, навигации и планирования.
Кениг и Ликкачев, Быстрое перепланирование для навигации в неизвестной местности, IEEE Transactions on Robotics, Vol. 21, № 3, июнь 2005 года представляет D * Lite. Можно с уверенностью сказать, что D * устарел в том смысле, что D * Lite всегда так же быстр, как D *. Кроме того, D * является сложным, трудным для понимания, анализа и расширения. На рисунке 9 показан псевдокод для D * Lite, а в таблице 1 показаны экспериментальные результаты с D * Lite по сравнению с BFS, Backward A *, Forward A *, DynamicSWSF-P и D *.
Я не знаю новых алгоритмов, которые вы перечисляете (Anytime D *, Field D *, LEARCH). Совсем недавно я увидел робота, который использовал D * Lite для планирования в среде со случайными бродягами. В этом смысле я не думаю, что D * Lite отнюдь не устарела. Что касается вашей практической задачи, я думаю, что нет ничего плохого в том, чтобы пробовать обычный инженерный путь: используйте какой-то подход, а если он не соответствует вашим потребностям, попробуйте что-то другое (более сложное).
источник
Я хотел бы добавить кое-что о быстро исследуемых рандомизированных деревьях или RRT. Основная идея хорошо обсуждается по всему Интернету, но, вероятно, можно начать со ссылок со страницы Википедии и с оригинальными статьями Куффнера и ЛаВалля по этой теме.
Наиболее важной особенностью RRT является то, что они могут справляться с реально значимыми пространствами чрезвычайно большой размерности без удушья. Они могут обрабатывать динамику, не являются оптимальными, но являются вероятностно полными (гарантированно успешными, если это возможно, когда время вычислений уходит в бесконечность), и способны обрабатывать движущиеся цели. Существуют некоторые расширения, которые позволяют им работать в нестатических пространствах, лучшее из которых выглядит как работа с Multipartite RRT, которую я связал ниже.
источник
Структуры данных, называемые оракулами расстояния, решают такие проблемы. Тем не менее, большинство результатов исследований только для статических графиков.
Если графики являются сетками (и, следовательно, плоскими), существуют некоторые динамические структуры данных (неясно, достаточно ли малы константы для рассматриваемого приложения):
Точные кратчайшие пути:
Jittat Fakcharoenphol, Satish Rao: плоские графики, отрицательные весовые ребра, кратчайшие пути и время, близкое к линейному. J. Comput. Сист. Sci. 72 (5): 868-889 (2006)
Примерные кратчайшие пути:
Филип Н. Клейн, Сайрам Субраманян: полностью динамическая схема приближения для кратчайших путей в плоских графах. Algorithmica 22 (3): 235-249 (1998)
Иттай Абрахам, Шири Чечик, Кирилл Гавойль: полностью динамические оракулы приблизительного расстояния для плоских графов через запрещенные метки расстояния. STOC 2012: 1199-1218
источник
В школе я баловался с оптимизацией колонии муравьев . В некоторых текстах это рекламировалось как решение для непрерывно меняющихся графиков, маршрутизации сетей и т. Д. Это не инженерное решение, а адаптация от того, как муравьи перемещаются по препятствиям, распространяя феромоны для обозначения хороших и плохих путей. Я понятия не имею, работает ли это для вашей проблемы, но я думаю, что это интересная точка зрения.
источник