Чи ефективний A *, навіть коли перешкоди рухаються?


30

Я тільки починаю дізнаватися про пошук шляху і шукаю алгоритм A *, і моя головна стурбованість полягає в тому, що всі приклади, які я бачив, показують статичні перешкоди, які він обчислює навколо.

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

Тож A * все ще достатньо ефективний для використання, коли перешкоди теж рухаються, чи існує інший метод пошуку шляху, який більш красномовно обробляє переміщення перешкод?

Відповіді:


27

Існує кілька алгоритмів, які набагато швидші, ніж A *, коли вам потрібно перерахувати шлях з рухомими перешкодами. Дивіться тут у розділі "Прості перерахунки".

Однак ви, швидше за все, не збираєтесь знайти позачергове рішення для будь-якого з них, тож у 99% випадків вони надмірні для гри. Ваш час було б краще витратити, використовуючи існуюче повністю оптимізоване рішення A * та використовуючи загальноприйняті прийоми для прискорення пошуку маршрутів в іграх:

  • Перерахунок найкращого шляху лише в рідкісних інтервалах
  • Обмін найкращими шляхами серед кількох одиниць ( приклад )
  • Створення ієрархічного графіка, тому потрібно лише перерахувати частину шляху

та ін. Ви можете знайти більше інформації про ці хитрощі та багато іншого на цьому веб-сайті або на A * сторінках Amit


10

Так. А * як і раніше шлях майже в кожному випадку. Це ваш розрахунок вартості вузла, який стає динамічним, а тому складнішим для обчислення та відстеження.

Якщо ви вже знаєте, де будуть в майбутньому перешкоди, що рухаються, ваш A * може врахувати тимчасовість перешкод у функції витрат.

Напр .: Цей вузол буде досягнутий у 4 кліщах, зайнятих від галочки №3 до галочки №6, тому вартість поїздки на цьому вузлі становить 6 - 4 = +2 кліща. Це все ще може бути найкращим шляхом.

Також слід враховувати напрямок руху перешкоди.

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

Тупик - це коли обидва чекають, коли інший рухатиметься, і ніхто не рухається.

Життєвий шлях - це коли обидва ( або більше <- це важливо врахувати) рухаються, щоб уникнути іншого в тому ж напрямку, і в кінцевому підсумку рухаються вперед і назад без прогресу.

Розв’язання жир може стати дуже складним, і це повністю залежить від правил та механізмів зіткнення вашої гри (наприклад: чи повинні вони битися та знищувати перешкоду?).

Часто повертається до того, щоб у ваших рухомих об’єктах було заплановано резервування вузлів / шляхів (не забувайте про скасування, коли вони змінюють шлях або відмирають), щоб інші об’єкти, що рухаються, могли планувати заздалегідь.

Отримавши цю інформацію, ви також можете планувати перехоплення.


19
О, мій боже, "лайдак" - ви описали ту жахливу ліво-праву ухилення, яку мені в кінцевому підсумку потрібно робити у передпокої.
Етан Хоробрий

2
Просте рішення в реальному часі / тупику - вибір випадковим чином між доступними варіантами (наприклад, 50% шансу не рухатися і 50% шансу рухатися ліворуч). Поки кожен актор обирає випадковим чином, є ненульовий шанс, що блокування буде вирішено.
Draco18s

@ Draco18s І експоненціально збільшуйте розмір вашої крихітки вперед-назад, поки один не поступиться (я, можливо, щойно описав, як вирішуються зіткнення Ethernet!)
Корт Аммон - Відновіть Моніку

Я гадаю, що вони могли б замість цього пограти в ножиці з паперових ножиць чи дружню гру «Дилема в'язня Петрі» . ; P
Draco18s
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.