Я пытаюсь реализовать алгоритм AI для Bomberman. В настоящее время у меня есть работающая, но не очень умная элементарная реализация (нынешний ИИ переусердствует в размещении бомб).
Это первый ИИ, который я когда-либо пытался реализовать, и я немного застрял. Более сложные алгоритмы, которые я имею в виду (те, которые я ожидаю для принятия лучших решений) слишком сложны, чтобы быть хорошими решениями.
Какие общие советы вы имеете для реализации Bomberman AI? Существуют ли радикально разные подходы к тому, чтобы сделать бота более оборонительным или агрессивным?
Изменить: текущий алгоритм
Мой текущий алгоритм работает примерно так (псевдокод):
1) Постарайтесь поместить бомбу, а затем найдите ячейку, безопасную от всех бомб, включая ту, которую вы только что установили. Чтобы найти эту ячейку, выполните итерации по четырем направлениям; если вы можете найти любую безопасную расходящуюся ячейку и достичь ее вовремя (например, если направление вверх или вниз, ищите ячейку, найденную слева или справа от этого пути), тогда безопасно разместить бомбу и двигаться в этом направлении.
2) Если вы не можете найти и безопасные расходящиеся клетки, попробуйте НЕ ставить бомбу и посмотрите снова. На этот раз вам нужно будет искать безопасную ячейку только в одном направлении (вам не нужно отклоняться от нее).
3) Если вы все еще не можете найти безопасную камеру, ничего не делайте.
for $(direction) in (up, down, left, right):
place bomb at current location
if (can find and reach divergent safe cell in current $(direction)):
bomb = true
move = $(direction)
return
for $(direction) in (up, down, left, right):
do not place bomb at current location
if (any safe cell in the current $(direction)):
bomb = false
move = $(direction)
return
else:
bomb = false
move = stay_put
Этот алгоритм делает бота очень счастливым (он будет очень часто размещать бомбы). Он не убивает себя, но имеет привычку делать себя уязвимым, заходя в тупики, где его могут заблокировать и убить другие игроки.
Есть ли у вас какие-либо предложения о том, как я могу улучшить этот алгоритм? Или, может быть, я должен попробовать что-то совершенно другое?
Одна из проблем этого алгоритма состоит в том, что он имеет тенденцию оставлять у бота очень мало (часто только одну) безопасных ячеек, на которых он может стоять. Это потому, что бот оставляет за собой множество бомб, если он не убивает себя.
Однако, оставляя за собой след бомб, остается мало мест, где можно спрятаться. Если один из других игроков или ботов решает разместить бомбу где-то рядом с вами, часто случается, что вам негде спрятаться и вы умираете.
Мне нужен лучший способ решить, когда устанавливать бомбы.