Где я могу найти информацию об алгоритме поиска путей D * или D * Lite? - PullRequest
32 голосов
/ 25 мая 2010

Здесь есть ссылки на некоторые статьи по D * , но они для меня слишком математичны. Есть ли какая-нибудь информация о D * / D * Lite, более ориентированная на начинающих?

Ответы [ 6 ]

12 голосов
/ 29 июля 2010

В Википедии есть статья на тему: http://en.wikipedia.org/wiki/D*

Также на странице Свена Кенига доступна реализация D * Lite на C: http://idm -lab.org / code / dstarlite.tar Однако я считаю, что непонятную математику гораздо легче читать, чем C исходный код; -)

Другая реализация D * Lite (на C ++) доступна здесь: http://code.google.com/p/dstarlite/

11 голосов
/ 29 июля 2010

Что ж, если для вас труден псевдокод (вам не нужно читать теоремы и доказательства - псевдокод довольно прост, если вы знаете стандартные алгоритмы), и вы жалуетесь на опубликованный код C и C ++, тогда, я думаю, вы нужно заняться чем-то другим: -)

Серьезно, не ожидайте, что кто-то может научить вас алгоритму высшего класса в нескольких веб-абзацах. Возьмите ручку и бумагу и напишите, нарисуйте и следуйте на бумаге, что происходит. Возможно, вам придется прочитать что-то дважды и найти в Google одну или две ссылки, чтобы узнать несколько понятий об этом, и вам вообще не нужно копаться в теоремах и доказательствах - если только вы не надеетесь доказать, что автор ошибался :-) )

Нельзя идти вперед без какой-либо математики - c'est la vie. Представьте, что вы попросили кого-то научить вас, что такое инверсия матрицы, но вы не знаете, что такое векторы. Никто не может помочь вам, пока вы сначала не изучите достаточно математического контекста.

8 голосов
/ 30 июля 2010

Сказав это, почему бы не добавить еще несколько статей, да, у них тоже есть математика :-), но я постараюсь получить кое-что более свежее. Люди обычно лучше объясняют свою работу со временем, поэтому основное внимание уделяется Стенцу, Лихачеву и Кенигу

5 голосов
/ 05 февраля 2016

D * Lite Объяснение для мирянина

D * начинается с вороньего, идеалистического пути между Start и Goal;он обрабатывает препятствия только тогда, когда сталкивается с ними (обычно путем перемещения в соседний узел).То есть - D * Lite не знает о каких-либо препятствиях до тех пор, пока не начнет двигаться по этому идеальному пути.

Священный Грааль в любой реализации поиска пути состоит в том, чтобы сделать его быстрым, в то же время получая кратчайший путьили, по крайней мере, приличный путь (а также обработка [все ваши различные особые условия здесь - для D * Lite это имеет дело с неизвестной картой, как мог бы сделать Марсоход)).

Так что один из D* Большие проблемы Lite - это дешевая адаптация к препятствиям.Найти их легко - вы просто проверяете состояние узлов соседей по мере движения.Но как нам адаптировать оценки стоимости существующей карты, не проходя через каждый узел ... что может быть очень дорогостоящим?

LPA * использует умный прием для адаптации затрат, прием D * Lite нашел хорошее применение,Текущий узел спрашивает своих соседей: Вы знаете меня лучше, как вы думаете, я реалистичен в отношении себя? В частности, он спрашивает об этом значение g, которое является известной стоимостью получения отначальный узел сам по себе, т.е. текущий узел.Соседи смотрят на свои g, смотрят, где находится текущий узел по отношению к ним, и затем предлагают оценку того, что они считают, что его стоимость должна быть.Минимум этих предложений устанавливается как значение rhs текущего узла, которое затем используется для обновления его значения g;при оценке соседи учитывают вновь обнаруженное препятствие (я) (или свободные пробелы), так что при текущих обновлениях g с использованием rhs это происходит с учетом новых препятствий (или свободных пробелов).

И как только мы получим реалистичные значения g по всей доске, конечно, появится новый кратчайший путь.

1 голос
/ 27 июля 2010

Я придумал это
http://idm -lab.org / bib / абстракты / paper / aaai02b.pdf и это
http://www.cs.cmu.edu/~maxim/docs/dlitemap_iros02.pdf

Я надеюсь, что эти ссылки помогут вам:)
Изменить: После публикации я заметил, что ссылки, которые я дал вам, были в ссылке, которую вы также указали. Тем не менее я нашел их прямо в Google. Во всяком случае, я немного их посмотрел, и они не кажутся такими уж сложными. Если вы хорошо знаете A *, вам следует понять и D *.
По опыту могу сказать, что A * можно использовать и для того, что вы хотите.

0 голосов
/ 21 ноября 2018

Замечания Максима Лихачева по классу CMU очень информативны. Он содержит пример того, как распространять динамические изменения, произошедшие на вашем графике. Также объясняется идея непоследовательности, что очень важно для понимания алгоритмов. http://www.cs.cmu.edu/~maxim/classes/robotplanning_grad/lectures/execanytimeincsearch_16782_fall18.pdf

...