Як слід пересаджувати A *?


10

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

Яке звичайне рішення для цього? Чи є спосіб "перезапустити" A *, не повторюючи весь пошук? Потрібно просто провести пошук трохи рідше (кожні півсекунди чи секунди) і визнати, що на шляху буде невелика неточність?

Відповіді:


13

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


+1. Це також описує Мат Бакленд у своїй книзі AI. Він називає це "Планування маршруту нарізаного часу" ( books.google.ch/… ). Хороший матеріал.
bummzack

8

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

      Distance > 100, run A* every 2 seconds
100 > Distance >  50, run A* every 1 second
50  > Distance >  25, run A* every 10 frames
25  > Distance <  25, run A* every frame

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


8

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

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


5

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


4

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


2
Якщо це невелике статичне середовище.

Залежить від наявної платформи та пам'яті.
Нейт

@Joe, @Nate, правда.
Пітер Тейлор

2

Я створив гру для змагань у 48 іграх, де персонаж A * слідкує за гравцем навколо рівня. Оскільки моя * * реалізація була повільною (вона не могла запустити кожен кадр), я поставив інтервал на три секунди затримки. Це мало непередбачуваний результат, що дозволив гравцеві «обдурити» ШІ на кілька моментів. Це насправді зробило гру веселішою.

Пізніше я покращив продуктивність реалізації A * і спробував запустити її на кожному кадрі. Гра перестала бути веселою, бо ворог завжди ідеально шукає гравця.

Це було несподівано і гарний досвід навчання.


1
Це хороший момент. Я пам’ятаю, як читав про пошук шляху у pac-man, де вони навмисно використовували недосконалий алгоритм, що дозволяв гравцеві перехитрити привидів. Кожен привид мав дещо іншу недосконалість, надаючи їм більше характеру. Тут є те, що в іграх, веселощах та іншому.
Нік Ван Брунт

0

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


Я використовую рульову поведінку (конкретно шукаю) у випадках, коли немає ніяких перешкод між агентом та його ціллю. На жаль, у моєму середовищі є такі речі, як скручування коридорів, де необхідні розумніші рішення.
Григорій Ейвері-Вейр
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.