Применим ли поиск точек перехода (A * с JPS) к недиагональным сеткам?

8

Я пытаюсь ускорить поиск пути и обнаружил A * с помощью JPS . Он в основном обрезает плитки перед добавлением их в набор OPEN.

Могу ли я использовать эту технику с моей сеткой, которая позволяет только прямые направления?

Sven
источник

Ответы:

10

Если вы прочтете статью , вы увидите, что они перечисляют это как открытую проблему в разделе «Выводы»:

«Одним интересным направлением дальнейшей работы является расширение точек перехода на другие типы сеток, таких как шестиугольники или текс (Yap 2002). Мы предлагаем достичь этого путем разработки серии правил обрезки, аналогичных тем, которые приведены для квадратных сеток».

Таким образом, чтобы применить поиск точек перехода к вашей ортогональной сетке, вам необходимо решить, какие точки должны считаться точками перехода на этой сетке. Подумав об этом на мгновение, я думаю - но не доказал! - что могут работать следующие правила (основанные на определениях 1 и 2 в документе, несколько перефразированные для удобства чтения):

Узел y - это точка перехода от узла x, движущаяся в направлении d, если y достижима от x, если двигаться прямо в направлении d, и является ближайшим таким узлом к ​​x, чтобы выполнить хотя бы одно из следующих условий:

  1. узел у является целевым узлом,
  2. d - горизонтальное перемещение, и любая из ячеек, вертикально смежных с ячейкой y - d (то есть ячейка за один шаг до y при движении в направлении d), блокируется, или
  3. d - вертикальное движение, и существует узел z, который является точкой перехода от y (по условию 1 или 2) в некотором горизонтальном направлении d '.

Конечно, слова «вертикальный» и «горизонтальный» можно заменить в приведенном выше определении. Дело в том, что нам нужно выбрать какой-то способ нарушения симметрии, чтобы рассматривать только один из возможных путей обхода открытой прямоугольной области. Харабор и Грастьен делают это, предпочитая пути «по диагонали в первую очередь», но, поскольку мы не можем этого сделать, мы должны преуспеть, предпочитая вместо этого пути с вертикальной ориентацией (или сначала с горизонтальной ориентацией).

Это может быть также возможно разработать альтернативные правила обрезки деревьев , которые производят более «естественно выглядящие» пути, например, предпочитая текущий курс через поворот, или , возможно , даже предпочитая постоянно поворачивая пути лестницы. Правило, которое я дал выше, является просто самым простым переводом правила Харабора и Грастиена в ортогональную сетку, которую я мог придумать.

Илмари Каронен
источник
+1 Это именно то, что я собирался ответить. Можно доказать, что это все равно будет оптимальным.
BlueRaja - Дэнни Пфлугхофт
2

На самом деле, если вы посмотрите на определение 45-градусного маршрута, всегда можно преобразовать путь с 45-градусным маршрутом в путь без поворота на 45 градусов. И это также оптимально (вы можете легко доказать это противоречием).

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

Jas
источник