Я намагаюся реалізувати алгоритм 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
Цей алгоритм робить бота дуже тригерним (він буде розміщувати бомби дуже часто). Це не вбиває себе, але у нього є звичка робити себе вразливим, потрапляючи в тупики, де його можуть блокувати та вбивати інші гравці.
Чи є у вас якісь пропозиції щодо того, як я можу вдосконалити цей алгоритм? А може, я повинен спробувати щось зовсім інше?
Однією з проблем цього алгоритму є те, що він, як правило, залишає бота з дуже малою (часто лише однією) безпечною коміркою, на якій він може стояти. Це тому, що бот залишає за собою слід бомб, поки він не вбиває себе.
Однак, залишаючи сліди бомб позаду, залишається мало місця, де можна сховатися. Якщо хтось із інших гравців чи ботів вирішив розмістити бомбу десь біля вас, часто трапляється, що вам не доводиться ховатися, і ви гинете.
Мені потрібен кращий спосіб вирішити, коли розмістити бомби.