Чи існують алгоритми накладання маршрутів, які б обробляли різні типи руху?


12

Я розробляю бота для симулятора настільних ігор BattleTech http://en.wikipedia.org/wiki/BattleTech , це покрокова основа.

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

Я знаю лише алгоритми Dijkstra та A * pathfinding, але проблема полягає в тому, що існує 3 типи рухів: ходити, бігати і стрибати кілька шестикутників (у кожного з них є свої правила). Ходити і бігати майже те саме.

Найкращим шляхом може бути комбінація або кожен тип руху. Ось приклад карти http://megamek.info/sites/default/files/isometric_view.png

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


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

Як саме відрізняються три типи руху? Чи можна їх поєднувати (ходити до плитки A, потім бігти до B, а потім стрибати до C таким же ходом)? Якщо так, то які правила забороняють гравцеві завжди використовувати найдешевший метод, щоб перейти від плитки A до плитки B?
Філіпп

@Philipp Так, вони можуть бути під час використання A *. Ви можете додати до відкритого списку кожну плитку, до якої можна переміщатися з кожним типом руху, тоді, виходячи з ціни кожного з них + хорошої евристики, ви можете визначити, над якою рухатись далі.
акалтар

@Philipp Ні, ви можете використовувати лише один тип переміщення кожного ходу.
alexvisio

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

Відповіді:


10

І Dijkstra, і A * можуть додавати різні витрати на краї (= з'єднання) від однієї плитки до іншої. Вони також дозволяють з'єднати два вузли (= плитки) з більш ніж одним краєм, кожен з різною вартістю.

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

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

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

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.