Це питання стосується підходу до комп'ютерних супротивників, який я створив і який зараз або використовується, або планується використовувати в декількох комп'ютерних іграх.
Фон
Минулого року, намагаючись удосконалити комп’ютерного опонента для гри під назвою "Міночистач прапорів" (короткий опис: Покрокова багатокористувацька версія Minesweeper, де потрібно взяти більше мін, ніж твій противник) , я сильно змінив спосіб роботи моїх алгоритмів . Замість того, щоб використовувати підхід на зразок if-else-if-else, я використовую набір "бомбардирів" із заданими вагами, щоб визначити, який найкращий хід.
Ви можете подумати, що для такої гри, як Minesweeper Flags, найвища ймовірність зайняти міну дає лише хід, але це не так просто. Який рух комп'ютер зробить, як правило, залежить від декількох функцій для певного руху в поточному ігровому стані. Приклади функцій:
- Яка ймовірність цього кроку забити міну?
- Яка ймовірність виявити тут що-небудь моєму опоненту?
Опис системи
Система в основному працює так:
- "Попередні бомбардири": Деякий попередній аналіз робиться для поточного стану гри (з точки зору "Прапори шахтника", це зазвичай: Обчислення всіх ймовірностей)
- "Бомбардири": Набір звичайних бомбардирів просять визначити рахунок за кожен можливий хід, кожен бомбардир застосовує бали за власними критеріями. Бомбардири можуть перевірити результати попереднього аналізу, який був зроблений.
- Оцінки, обчислені на вищенаведеному етапі, підсумовуються разом і встановлюються як оцінка за хід.
- Рухи сортуються відповідно до їх балів та класифікуються так, що всі рухи з однаковим балом отримують однаковий ранг.
- "Оцінки за рахунком": Результат вищезазначеного може бути надісланий "Рейтинговим бомбардирам", які мають можливість змінювати бали будь-яких полів будь-яким способом, який потрібно, відповідно до власних правил.
Поєднуючи купу попередніх бомбардирів, бомбардирів (з їх вагою) та пост-бомбардирів, це стає тим, що я називаю конфігурацією балів .
Приклад результату
Це приклад балів, застосованих до прапорів тральщика. Це карта, яку було зафіксовано:
І це вихід фактичної конфігурації балів. Він показує ранг можливих кроків, де 1 найкращий ранг і виділений білим кольором:
Завдяки написанню дуже гнучкого коду, цей підхід до інтелектуальних можливостей може бути включений і в інші ігри.
Переваги і недоліки
Нижче наведено деякі переваги та недоліки цієї системи, які я можу собі думати
Переваги
- Створити безліч різних конфігурацій для ШІ дуже просто.
- Можна використовувати з генетичними алгоритмами: кожен бомбардир має пов’язану вагу, вага може стати геном.
- Використовуючи деякі інструменти, можна перевірити, чому був зроблений конкретний хід та які бомбардири відповідали за цей хід
- За допомогою інструментів можна створити карту загальної оцінки / ранжу можливих рухів (як на скріншоті вище)
- Застосовуючи бали до того, як грає людина, можна створити "#AI_Mirror", який намагається зробити кроки, які, на його думку, зробить людина
Недоліки
- Налаштувати конфігурацію партитури "правильно" може бути дуже важко, щоб зробити AI гру максимально гарною.
Запитання
Чи є система, яку я побудував тут, широко відома у світі ШІ? Як би це називалося в реальному ІІ терміні?
Чи має такий підхід сенс чи є інший підхід, який ви рекомендували б?
Які способи можуть полегшити процес налаштування конфігурації балів?
Щодо останнього питання, я знаю про можливість використання генетичних алгоритмів, я також знаю про SARSA (і я думаю, що мої бомбардири нагадують опис особливостей цього сайту з вагами, але, наскільки я розумію, це не зовсім те, що я створив тут). Я думаю, що проблема з SARSA полягає в тому, що ти не знаєш нагороди до тих пір, поки гра не закінчиться, найкращий хід - це хода, яка взагалі не дає нагороди (міни). Ваші поточні шанси на перемогу залежать як від поточного рахунку (скільки мін ви взяли, так і вашого опонента) і того, як виглядає поточна карта.
Це питання спочатку було розміщено на вже неіснуючому веб-сайті "Штучний інтелект" .
Код (Java), який використовується для цього підходу, тепер розміщено в Code Review .