Налаштування Астар, щоб знайти найближче місце до недосяжного пункту призначення


12

Я реалізував AStar в Java, і він працює нормально для області з перешкодами, де вибране місце досягається.

Однак, коли пункт призначення недоступний, обчислений "шлях" ні в якому разі не до найближчого місця (до недоступного місця), а натомість є деяким випадковим шляхом.

Чи є можливий спосіб налаштувати Астар на пошук шляху до найближчого місця до недосяжного місця призначення?

Відповіді:


21

Слідкуйте за вузлом з найнижчим EstimatedDistanceToEnd(тобто найнижчим h(x)), і якщо жоден кінцевий вузол недоступний для зворотного відстеження, замість цього поверніть його з цього вузла.


Простий. Я це люблю!
Джон Макдональд

Я просто ляснув головою і пішов "дох", коли прочитав вашу відповідь. Дякую!
Shivan Dragon

1

Це насправді не питання *. A * - це питання пошуку шляху від точки A до точки B. Незважаючи на те, що він може бути розширений, результати можуть бути легко безладними та непередбачуваними. Натомість вам потрібен алгоритм, який вибирає найближче доступне місце призначення.

Ось один із способів зробити це: Якщо A * повертає дійсний шлях (вузли початку / кінця у вузлах входу збігу шляху), поверніть шлях. Інакше ...

  • Почніть пошук з початкового вузла
  • Пройдіть усі пов’язані вузли (не забудьте позначити відвідуваних, щоб уникнути нескінченної рекурсії)
  • Порівняйте відстані до пункту призначення, щоб знайти найближчий вузол

Щось на зразок Flood Fill здається придатним en.wikipedia.org/wiki/Flood_fill зауважте, що вам все одно потрібно A * від стартового вузла до вузла з найменшою відстані. Також зауважте, що це завжди включає огляд усіх підключених вузлів і, таким чином, може бути надзвичайно повільним.
Рой Т.

Так, це може бути повільним. Але повільність, швидше за все, випливає з того, що вузли розкидані по пам'яті; що можна легко виправити. Крім того, можна пришвидшити це, пожертвувавши деякою точністю - просто пропустіть посилання, які занадто далеко або вказують у неправильному напрямку.
змія5

1
@Roy: A *, BFS, і всі подібні алгоритми Pathfinding будуть точно так повільно , як повені наповнювач, тому що вони все потрібно перевіряти кожен підключений вузол , щоб переконатися , що немає ніякого шляху до кінця. Однак є способи полегшити це питання; дивіться тут .
BlueRaja - Danny Pflughoeft
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.