Давання інтелектуального розміщення бомби AI Bomberman


13

Я намагаюся реалізувати алгоритм AI для Bomberman. В даний час у мене працює, але не дуже розумна рудиментарна реалізація (нинішній ШІ надмірно ставиться до розміщення бомб).

Це перший ШІ, який я коли-небудь намагався реалізувати, і я трохи застряг. Більш складні алгоритми, які я маю на увазі (ті, на які я розраховую приймати кращі рішення), є занадто складними, щоб бути хорошими рішеннями.

Які загальні поради щодо впровадження AI Bomberman? Чи існують радикально різні підходи для того, щоб зробити бота більш оборонним чи наступальним?


Правка: Поточний алгоритм

Мій поточний алгоритм виглядає приблизно так (псевдо-код):

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% не в силі. Але, можливо, якщо додати алгоритм, який у вас є, ми всі зможемо допомогти в поступовому його вдосконаленні. Ви також, мабуть, не перший любитель, який намагається реалізувати AI Bomberman, і я знайшов досить багато змагань з Bomberman AI зі випадковим пошуком Google, який міг довести для вас безцінні джерела інформації.
Рой Т.

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

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

@Tetrad Я в процесі реалізації нового алгоритму. Я побачу, як це піде, і при необхідності розміщую тут алгоритм.
Пол Манта

хоча це не справжня порада, але ви можете поглянути на кланбомбер код. це гра багато в чому схожа на бомбермен.
Ali1S232

Відповіді:


4

Проблема, з якою ви стикаєтесь, полягає в тому, що ваш AI ніколи не зупиняється, щоб прийняти розумне рішення про те, куди він повинен розмістити свою наступну бомбу, яка залишає її просто скидати бомби, коли тільки може, а потім відпрацьовує "лайно, лайно, що я зараз роблю! ? "

Призупинення думати

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

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

Коли ваш AI може розмістити бомбу, а не робити це негайно, слід коротко скористатися алгоритмом пошуку, щоб вибрати з наявних місць розміщення бомби на основі таких критеріїв, як:

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

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

На прогулянці та пошуку безпечної стежки

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

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

Щоб дати ваші AI помилки (щоб її насправді можна було підірвати іноді), слід зробити помилки в розрахунку: забути про бомбу невміло, недооцінювати розмір вибуху або час, поки бомба вибухне тощо.

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


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

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

[продовжуючи] Зважаючи на це, AI повинен намагатися розміщувати бомбу якомога частіше (оскільки розміщення бомб дає бомби), але не потрібно особливо обережно ставитися до місця розміщення бомби. Треба бути обережним щодо того, щоб завжди мати безпечне місце. [продовження]
Пол Манта

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

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