2010-09-04 3 views
19

Я реализую двунаправленный поиск A * (двунаправленный, как при поиске, выполняется как из источника, так и из пункта назначения одновременно, и когда эти два поиска встречаются, у меня будет самый короткий путь - по крайней мере, с добавлением немного дополнительной логики).Двунаправленный A * (A-star) Поиск

Есть ли у кого-нибудь опыт использования однонаправленного A * и двунаправленного (!) - какого рода прирост производительности я могу ожидать? Я рассчитывал на это более или менее, уменьшая вдвое время поиска, как минимум, но могу ли я увидеть большие выгоды, что это? Я использую алгоритм для определения кратчайших маршрутов в дорожной сети - если это в какой-то мере актуально (я читал о алгоритме MS Reach, но хочу сделать шаги для этого, а не прыгать прямо).

+0

Примечание - название вопроса повторяет A * в текстовой форме, чтобы облегчить поиск. –

+1

FYI: вот ссылка на бумагу MS на Reach for A * (A-star): http://www.avglab.com/andrew/pub/alenex06.pdf – shindigo

ответ

8

В лучшем случае это было бы запустить в O (б ​​^ (п/2)) вместо O (б ​​^ п), но это только если вам повезет :)

(где б является вашим коэффициентом разветвления, а n - числом узлов, которым будет считаться однонаправленный A *)

Все зависит от того, насколько легко эти два поиска встречаются, если они находят друг друга в хорошей точке на полпути в начале поиска покончено с большим количеством времени поиска, но если они вступают в дико разные направления, вы можете получить что-то медленнее, чем просто A * (из-за всей дополнительной бухгалтерии)

+1

Спасибо Майкл - некоторые дополнительные исследования показали, что я вряд ли повезет - двунаправленный A * предположительно довольно неудобен, когда дело касается обоих направлений, сходящихся на одном узле. Я могу дать ему преимущество или, скорее всего, потратит некоторое время на выяснение Reach. –

+0

На больших количествах вы явно выигрываете при двунаправленном поиске. Лаборатории Microsoft Research используют этот алгоритм, но с гораздо более сложными улучшениями. –

1

Вы можете w муравей попробовать http://sourceforge.net/projects/tway/ есть бенчмаркинг сценарий, который сравнивает со стандартным ASTAR (для NY данных городских дорог, кажется, дает преимущество по времени 30%)

1

внедрило 3 разных двунаправленной A * Поиск Algos (см cskit) ,

Для просмотра алгоритмов в действии от корневого типа проекта mvn exec:java (требуется Maven). Удачи!

(Edit:. This library обеспечивает 3 различных двунаправленной A * алгоритмы Все три являются оптимальными.)

0

Вы можете рассмотреть кластерный в гораздо более эффективный усилитель. Также см. this article

Смежные вопросы