Я разрабатываю бота для симулятора настольной игры BattleTech http://en.wikipedia.org/wiki/BattleTech , он пошаговый.
Доска разделена на шестиугольники, каждый из которых имеет свой тип местности и высоту. Вы управляете роботом, который движется над ними, чтобы уничтожить других роботов.
Я знаю только алгоритмы поиска путей Dijkstra и A *, но проблема в том, что есть 3 типа движений: ходить, бегать и прыгать по нескольким шестиугольникам (у каждого из них свои правила). Ходить и бегать практически одинаково.
Лучший путь может быть комбинацией или каждым типом движения. Вот пример карты http://megamek.info/sites/default/files/isometric_view.png
Знаете ли вы хороший алгоритм для этого сложного поиска пути или способ объединения результатов A * для каждого типа движения?
источник
Ответы:
И Dijkstra, и A * могут добавлять разные затраты к ребрам (= соединениям) от одной плитки к другой. Они также позволяют соединить два узла (= плитки) с более чем одним ребром, каждый из которых имеет свою стоимость.
Альтернативный режим прыжка будет означать, что существует альтернативный прямой фронт от каждого тайла к каждому тайлу на расстоянии прыжка. Но поскольку мех может либо идти, либо прыгать в повороте, стоимость использования этого края будет равна точкам перемещения всего хода плюс оставшиеся точки текущего хода, когда в этом ходу уже был ход.
Согласно вашему описанию, решение о ходьбе и беге не имеет большого значения для выбора пути, но, скорее всего, это стратегическое решение. Актер определенно может ходить, когда в текущий ход можно добраться до места назначения, не прибегая к бегу. Но в противном случае есть много факторов, таких как:
Нет жесткого правила для принятия этого решения. Лучшее, что вы можете сделать, - это использовать эвристический подход. Присвойте положительные или отрицательные значения точкам всем обстоятельствам, сложите их и посмотрите, будет ли результат положительным или отрицательным.
Есть также еще один фактор при поиске пути, который вы должны учитывать: при некоторых условиях для робота может иметь смысл избегать окончания своего хода в определенных местах. Находясь в опасной зоне, использовать три поворота для перехода от А к В, но заканчивая каждый в укрытии, может быть лучше, чем использовать только два, но быть выставленным в конце каждого. А может и нет. Это зависит от обстоятельств и точной игровой механики. Опять же, это стратегическое решение, которое вы должны принять на основе эвристики. Вы можете представить это, добавив дополнительную стоимость к краям, которые заканчивают ход на опасном тайле, чтобы отговорить ИИ от этого хода.
источник