Интеллектуальное размещение бомбардировщика AI Bomberman


13

Я пытаюсь реализовать алгоритм 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

Этот алгоритм делает бота очень счастливым (он будет очень часто размещать бомбы). Он не убивает себя, но имеет привычку делать себя уязвимым, заходя в тупики, где его могут заблокировать и убить другие игроки.

Есть ли у вас какие-либо предложения о том, как я могу улучшить этот алгоритм? Или, может быть, я должен попробовать что-то совершенно другое?

Одна из проблем этого алгоритма состоит в том, что он имеет тенденцию оставлять у бота очень мало (часто только одну) безопасных ячеек, на которых он может стоять. Это потому, что бот оставляет за собой множество бомб, если он не убивает себя.

Однако, оставляя за собой след бомб, остается мало мест, где можно спрятаться. Если один из других игроков или ботов решает разместить бомбу где-то рядом с вами, часто случается, что вам негде спрятаться и вы умираете.

Мне нужен лучший способ решить, когда устанавливать бомбы.


Трудно придумать что-то, что работает на 100% на ровном месте. Но, возможно, если вы добавите алгоритм, который у вас есть на данный момент, мы все сможем помочь в его постепенном улучшении. Вы также, вероятно, не первый любитель, пытающийся внедрить ИИ Bomberman, и я нашел немало конкурсов ИИ Bomberman со случайным поиском в Google, который может оказаться для вас бесценным источником информации.
Рой Т.

Я думаю, что вы можете обобщить AI Бомбермена в двух вещах: 1) пытаясь защитить себя от взрывов бомб других игроков 2) размещать бомбы на игровой доске, чтобы попытаться заставить других умереть (помня правило 1): чтобы избежать взрыва / пойман в ловушку своими собственными бомбами).
Tigrou

Вероятно, было бы лучше, если бы вы опубликовали хотя бы общий обзор вашей текущей реализации (при условии, что в нем много кода), и мы могли бы помочь вам решить вашу проблему с их чрезмерным усердием при размещении бомб.
Тетрад

@Tetrad Я нахожусь в процессе реализации нового алгоритма. Я посмотрю, как это происходит, и опубликую алгоритм здесь, если это необходимо.
Пол Манта

хотя это не настоящий совет, но вы можете взглянуть на код кланового бомбардировщика . Это игра, во многом похожая на Bomberman.
Ali1S232

Ответы:


4

Проблема, с которой вы сталкиваетесь, заключается в том, что ваш ИИ никогда не останавливается, чтобы принять разумное решение о том, куда он должен поместить свою следующую бомбу, в результате чего он просто сбрасывает бомбы всякий раз, когда может, и затем решает «дерьмо, дерьмо, что мне теперь делать! ?»

Пауза, чтобы думать

Прямо сейчас ваш AI просто никуда не денется. Иногда, однако, это действительно должно двигаться к цели. Например, если он видит усиление и думает, что может добраться до него раньше игрока, возможно, ему следует найти безопасный путь к этой плитке и двигаться туда, следя за бомбами и избегая их по пути.

Такое же поведение при перемещении к цели можно использовать, когда он думает о том, где разместить следующую бомбу .

Когда ваш ИИ может разместить бомбу, вместо того, чтобы делать это немедленно, он должен кратко использовать алгоритм поиска, чтобы выбрать из доступных мест размещения бомбы на основе таких критериев, как:

  • Это поблизости? (чтобы он не шел к диагональному противоположному углу карты каждый раз, когда хочет разместить бомбу)
  • Есть ли место, где я могу спрятаться от взрыва - и могу ли я добраться туда до взрыва бомбы?
  • Взрыв взорвет плитки и даст мне бонусы?
  • Будет ли это потенциально атаковать игрока? (более легкий ИИ мог бы избежать этого в ранней игре, агрессивный ИИ будет преследовать это, не забывая при этом о бонусах)

Когда это решение было принято, ИИ выбрал место для размещения бомбы и место, где можно спрятаться от взрыва. Теперь он может идти к месту, положить свою бомбу, а затем идти к своему укрытию. Как только он достигает своего укрытия, он может хотеть продолжать идти и находить места для бомб (если у него несколько бомб), при условии, что он должен держаться подальше от бомбы, которую он здесь проходил, чтобы избежать.

На прогулке и поиске безопасного пути

Вы можете разработать для своего ИИ единый метод обхода и использовать его каждый раз, когда хотите, чтобы он шел куда-то. Этот метод может использовать алгоритм поиска A * чтобы найти его путь.

Чтобы сохранить ИИ в безопасности, вы можете заставить его перепроверять свой путь каждый раз, когда размещается новая бомба. Чтобы избежать взрывов, он может проверить время, пока бомба не взорвется, и считать, что потенциальная взрывная ячейка безопасна, если она не взорвется, когда она проходит через эту ячейку, и, если она небезопасна, рассматривайте ее как непроходимую ячейку. ,

Чтобы определить ошибки вашего ИИ (чтобы его иногда можно было взорвать), он должен делать ошибки в расчетах: рассеянно забывать о бомбе, недооценивать размер взрыва или время, пока бомба взрывается, и т. Д.

Примечание: Вы также можете сделать его случайное хождение более целенаправленным, выбирая случайные места для ходьбы или всегда имея в виду новое место для размещения бомбы, вместо того, чтобы просто случайно выбирать соседнюю плитку для блуждания. Таким образом, он не будет блуждать взад и вперед по одному и тому же месту, как если бы он не мог принять решение.


Я забыл дать некоторые важные подробности об игре. Это упрощенная версия Bomberman: нет бонусов, игроки всегда могут разместить неограниченное количество бомб, а бомбы всегда имеют максимальный радиус действия (от одного конца карты до другого). Система очков тоже другая ... [продолжение]
Пол Манта

[продолжение] Вы получаете 1 очко за размещение бомбы, но 0 очков за разрушение стены. Вы также получаете 30 очков за убийство, 15 за помощь и -20 за самоубийство. [продолжение]
Пол Манта

[продолжение] Имея это в виду, ИИ должен пытаться размещать бомбы как можно чаще (потому что размещение бомб дает бомбы), но он не должен быть особенно осторожным в отношении того, где размещена бомба. Нужно быть осторожным, чтобы всегда иметь безопасное место для поездки. [продолжение]
Пол Манта

[продолжение] Считаете ли вы, что при выборе направления мне достаточно выбрать то, что ведет в безопасную зону ? Вместо того, чтобы искать безопасную камеру, я бы искал самую большую безопасную зону, чтобы я мог прятаться от бомб, установленных другими игроками, а не только своими. Кроме того, было бы хорошей идеей отдать предпочтение направлениям, которые приближают меня к одному из других игроков?
Пол Манта

3
Ну, тогда мы вообще не говорим о Бомбермане и его ИИ! Мы просто о какой-то игре с бомбами, которая внешне напоминает Bomberman, но под капотом она совершенно другая и призывает вас быть спусковым крючком Счастливого Lunatic , и у меня гораздо меньше опыта в этой игре.
двойник
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.