D*

редактировать

D*(произносится как «D-звезда») - это любой из следующих трех связанных алгоритмов инкрементного поиска :

  • Исходный алгоритм D * Энтони Стенца представляет собой алгоритм инкрементного инкрементального поиска.
  • Focused D * - это алгоритм инкрементного эвристического поиска, разработанный Энтони Стенцем, который сочетает в себе идеи A * и исходного D *. Сфокусированный D * - результат дальнейшего развития оригинального D *.
  • D * Lite - это алгоритм инкрементального эвристического поиска, разработанный Свеном Кенигом и Максимом Лихачевым, который основан на LPA *, алгоритм инкрементного эвристического поиска, который объединяет идеи A * и Dynamic SWSF-FP.

Все три алгоритма поиска решают одни и те же основанные на предположениях задачи планирования пути, включая планирование с допущением о свободном пространстве, когда робот должен перейти к заданным координатам цели на неизвестной местности. Он делает предположения о неизвестной части местности (например, что на ней нет препятствий) и находит кратчайший путь от ее текущих координат до координат цели при этих предположениях. Затем робот следует по пути. Когда он наблюдает новую информацию на карте (например, ранее неизвестные препятствия), он добавляет эту информацию на свою карту и, при необходимости, перепланировывает новый кратчайший путь из текущих координат в заданные координаты цели. Он повторяет процесс до тех пор, пока не достигнет координат цели или не определит, что координаты цели не могут быть достигнуты. При пересечении неизвестной местности могут часто обнаруживаться новые препятствия, поэтому такое перепланирование должно быть быстрым. Алгоритмы инкрементного (эвристического) поиска ускоряют поиск последовательностей схожих поисковых проблем, используя опыт решения предыдущих проблем для ускорения поиска текущей. Если предположить, что координаты цели не меняются, все три алгоритма поиска более эффективны, чем повторные поиски A *.

D * и его варианты широко использовались для мобильного робота и автономного транспортного средства навигации. Современные системы обычно основаны на D * Lite, а не на оригинальном D * или Focussed D *. Фактически, даже лаборатория Стенца в некоторых реализациях использует D * Lite, а не D *. Такие навигационные системы включают в себя прототип системы, испытанный на марсоходах Opportunity и Spirit, а также систему навигации победителя конкурса DARPA Urban Challenge, разработанные в Университет Карнеги-Меллона.

Оригинальный D * был представлен Энтони Стенцем в 1994 году. Название D * происходит от термина «Dynamic A *», потому что алгоритм ведет себя как A *, за исключением того, что стоимость дуги может изменяться как алгоритм работает.

Содержание
  • 1 Операция
    • 1.1 Расширение
    • 1.2 Обработка препятствий
    • 1.3 Возникла другая тупиковая ситуация
  • 2 Псевдокод
    • 2.1 Расширение
    • 2.2 Проверка повышения
  • 3 Варианта
    • 3.1 Focused D *
    • 3.2 D * Lite
  • 4 Минимальная стоимость в сравнении с текущей стоимостью
  • 5 Ссылки
  • 6 Внешние ссылки
Операция

Основная операция D * изложены ниже.

Подобно алгоритму Дейкстры и A *, D * поддерживает список узлов для оценки, известный как «OPEN list». Узлы помечаются как имеющие одно из нескольких состояний:

  • NEW, что означает, что они никогда не помещались в список OPEN
  • OPEN, что означает, что в настоящее время они находятся в списке OPEN
  • CLOSED, что означает его больше нет в списке ОТКРЫТЬ
  • ПОДНЯТЬ, что означает, что его стоимость выше, чем в последний раз, когда он был в списке ОТКРЫТЫЙ
  • НИЖНИЙ, что указывает на то, что его стоимость ниже, чем в последний раз в списке OPEN

Расширение

Алгоритм работает путем итеративного выбора узла из списка OPEN и его оценки. Затем он распространяет изменения узла на все соседние узлы и помещает их в список OPEN. Этот процесс распространения называется «расширением». В отличие от канонического A *, который следует по пути от начала до конца, D * начинает поиск в обратном направлении от целевого узла. Каждый расширенный узел имеет обратный указатель, который относится к следующему узлу, ведущему к цели, и каждый узел знает точную стоимость для цели. Когда начальный узел является следующим расширяемым узлом, алгоритм выполнен, и путь к цели можно найти, просто следуя обратным указателям.

Обработка препятствий

Когда препятствие обнаруживается на намеченной траектории, все затронутые точки снова помещаются в список ОТКРЫТЬ, на этот раз отмеченные ПОДЪЕМОМ. Однако перед увеличением стоимости узла RAISED алгоритм проверяет его соседей и проверяет, может ли он снизить стоимость узла. В противном случае состояние RAISE распространяется на все потомки узлов, то есть узлы, на которые есть обратные указатели. Затем эти узлы оцениваются, и состояние RAISE передается, формируя волну. Когда узел RAISED может быть уменьшен, его обратный указатель обновляется и передает состояние LOWER своим соседям. Эти волны состояний RAISE и LOWER являются сердцем D *.

К этому моменту волны не могут «коснуться» целого ряда других точек. Следовательно, алгоритм работал только с точками, на которые влияет изменение стоимости.

Возникла еще одна тупиковая ситуация.

На этот раз тупик нельзя обойти так элегантно. Ни одна из точек не может найти новый маршрут через соседа к месту назначения. Поэтому они продолжают распространять свое повышение стоимости. Можно найти только точки за пределами канала, которые могут привести к месту назначения по жизнеспособному маршруту. Так развиваются две нижние волны, которые расширяются в виде точек, отмеченных как недостижимые с новой информацией о маршруте.

Псевдокод
while (! OpenList.isEmpty ()) {точка = openList.getFirst (); развернуть (точка); }

Expand

void expand (currentPoint) {логическое isRaise = isRaise (currentPoint); двойная стоимость; для каждого (сосед в currentPoint.getNeighbors ()) {если (isRaise) {если (сосед.nextPoint == currentPoint) {сосед.setNextPointAndUpdateCost (currentPoint); openList.add (сосед); } else {стоимость = neighbour.calculateCostVia (currentPoint); if (cost < neighbor.getCost()) { currentPoint.setMinimumCostToCurrentCost(); openList.add(currentPoint); } } } else { cost = neighbor.calculateCostVia(currentPoint); if (cost < neighbor.getCost()) { neighbor.setNextPointAndUpdateCost(currentPoint); openList.add(neighbor); } } } }

Проверить повышение

логического isRaise (point) {двойная стоимость; if (point.getCurrentCost ()>point.getMinimumCost ()) {для каждого (соседа в point.getNeighbors ()) {cost = point.calculateCostVia (neighbour); if (cost < point.getCurrentCost()) { point.setNextPointAndUpdateCost(neighbor); } } } return point.getCurrentCost()>point.getMinimumCost ();}
Variants

Focused D *

Как следует из названия, Focused D * является расширением of D *, который использует эвристику для фокусировки распространения RAISE и LOWER к роботу. Таким образом, обновляются только важные состояния, так же как A * вычисляет затраты только для некоторых узлов.

D * Lite

D * Lite не основан на исходном D * или Focused D *, но реализует то же поведение. Его проще понять и его можно реализовать с помощью меньшего количества строк кода, поэтому название "D * Lite". По производительности оно не хуже Focused D *. D * Lite основан на Lifelong Planning A *, который был введен Кенигом и Лихачевым несколько лет назад ранее. D * Lite

Минимальная стоимость по сравнению с текущей стоимостью

Для D * важно различать текущие и минимальные затраты. Первый важен только во время сбора, а второй важен, потому что сортирует OpenList. Функция, которая возвращает минимальную стоимость, всегда является наименьшей стоимостью для текущей точки, поскольку это первая запись в OpenList.

Ссылки
  1. ^Стенц, Энтони (1994), «Оптимальное и эффективное планирование пути для частично известных сред», Труды Международной конференции по робототехнике и автоматизации: 3310–3317, CiteSeerX 10.1.1.15.3683
  2. ^Стенц, Энтони (1995), «Сфокусированный алгоритм D * для перепланирования в реальном времени», Труды Международной совместной конференции по искусственному интеллекту: 1652–1659, CiteSeerX 10.1.1.41.8257
  3. ^Hart, P.; Nilsson, N.; Рафаэль Б. (1968), "Формальная основа эвристического определения путей с минимальной стоимостью", IEEE Trans. Syst. Наука и кибернетика, SSC-4 (2): 100–107, doi : 10.1109 / TSSC.1968.300136
  4. ^Koenig, S.; Лихачев, М. (2005), «Быстрое перепланирование для навигации в неизвестной местности», Транзакции по робототехнике, 21 (3): 354–363, CiteSeerX 10.1.1.65.5979, doi : 10.1109 / tro.2004.838026
  5. ^Koenig, S.; Лихачев, М.; Д. Фурси (2004), «Планирование на протяжении всей жизни A *», Искусственный интеллект, 155 (1-2): 93–146, doi : 10.1016 / j. artint.2003.12.001
  6. ^Рамалингам, Г.; Репс, Т. (1996), «Инкрементальный алгоритм для обобщения задачи поиска кратчайшего пути», Journal of Algorithms, 21 (2): 267–305, CiteSeerX 10.1.1.3.7926, doi : 10.1006 / jagm.1996.0046
  7. ^Koenig, S.; Смирнов, Ю.; Тови, К. (2003), «Границы производительности для планирования в неизвестной местности», Искусственный интеллект, 147 (1-2): 253–279, doi : 10.1016 / s0004-3702 (03) 00062-6
  8. ^Вуден, Д. (2006). Планирование пути для мобильных роботов на основе графиков (диссертация). Технологический институт Джорджии.
  9. ^Стенц, Энтони (1995), «Сфокусированный алгоритм D * для перепланирования в реальном времени», Труды Международной совместной конференции по искусственному интеллекту: 1652–1659, CiteSeerX 10.1.1.41.8257
Внешние ссылки
Последняя правка сделана 2021-05-16 08:08:07
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте