Підрахунок балів для противників комп’ютера, який потребує врівноваження


16

Це питання стосується підходу до комп'ютерних супротивників, який я створив і який зараз або використовується, або планується використовувати в декількох комп'ютерних іграх.

Фон

Минулого року, намагаючись удосконалити комп’ютерного опонента для гри під назвою "Міночистач прапорів" (короткий опис: Покрокова багатокористувацька версія Minesweeper, де потрібно взяти більше мін, ніж твій противник) , я сильно змінив спосіб роботи моїх алгоритмів . Замість того, щоб використовувати підхід на зразок if-else-if-else, я використовую набір "бомбардирів" із заданими вагами, щоб визначити, який найкращий хід.

Ви можете подумати, що для такої гри, як Minesweeper Flags, найвища ймовірність зайняти міну дає лише хід, але це не так просто. Який рух комп'ютер зробить, як правило, залежить від декількох функцій для певного руху в поточному ігровому стані. Приклади функцій:

  • Яка ймовірність цього кроку забити міну?
  • Яка ймовірність виявити тут що-небудь моєму опоненту?

Опис системи

Система в основному працює так:

  1. "Попередні бомбардири": Деякий попередній аналіз робиться для поточного стану гри (з точки зору "Прапори шахтника", це зазвичай: Обчислення всіх ймовірностей)
  2. "Бомбардири": Набір звичайних бомбардирів просять визначити рахунок за кожен можливий хід, кожен бомбардир застосовує бали за власними критеріями. Бомбардири можуть перевірити результати попереднього аналізу, який був зроблений.
  3. Оцінки, обчислені на вищенаведеному етапі, підсумовуються разом і встановлюються як оцінка за хід.
  4. Рухи сортуються відповідно до їх балів та класифікуються так, що всі рухи з однаковим балом отримують однаковий ранг.
  5. "Оцінки за рахунком": Результат вищезазначеного може бути надісланий "Рейтинговим бомбардирам", які мають можливість змінювати бали будь-яких полів будь-яким способом, який потрібно, відповідно до власних правил.

Поєднуючи купу попередніх бомбардирів, бомбардирів (з їх вагою) та пост-бомбардирів, це стає тим, що я називаю конфігурацією балів .

Приклад результату

Це приклад балів, застосованих до прапорів тральщика. Це карта, яку було зафіксовано:

Карта прапорщиків, яка була забита

І це вихід фактичної конфігурації балів. Він показує ранг можливих кроків, де 1 найкращий ранг і виділений білим кольором:

Приклад результату підходу підрахунку балів

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

Переваги і недоліки

Нижче наведено деякі переваги та недоліки цієї системи, які я можу собі думати

Переваги

  • Створити безліч різних конфігурацій для ШІ дуже просто.
  • Можна використовувати з генетичними алгоритмами: кожен бомбардир має пов’язану вагу, вага може стати геном.
  • Використовуючи деякі інструменти, можна перевірити, чому був зроблений конкретний хід та які бомбардири відповідали за цей хід
  • За допомогою інструментів можна створити карту загальної оцінки / ранжу можливих рухів (як на скріншоті вище)
  • Застосовуючи бали до того, як грає людина, можна створити "#AI_Mirror", який намагається зробити кроки, які, на його думку, зробить людина

Недоліки

  • Налаштувати конфігурацію партитури "правильно" може бути дуже важко, щоб зробити AI гру максимально гарною.

Запитання

  • Чи є система, яку я побудував тут, широко відома у світі ШІ? Як би це називалося в реальному ІІ терміні?

  • Чи має такий підхід сенс чи є інший підхід, який ви рекомендували б?

  • Які способи можуть полегшити процес налаштування конфігурації балів?

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


Це питання спочатку було розміщено на вже неіснуючому веб-сайті "Штучний інтелект" .
Код (Java), який використовується для цього підходу, тепер розміщено в Code Review .

Відповіді:


7

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

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

Використання генетичних алгоритмів

Є два чіткі варіанти генетичних алгоритмів:

  • Використовуйте параметри геному (як ви запропонували). Ви оптимізуєте правила, які у вас є, але ви все ще залишаєтесь експертною системою.
  • Використовуйте систему класифікаторів навчання (LCS), щоб вибрати для вас правила. LCS - це тип генетичного алгоритму, де ви кодуєте правила, а також параметри. Вони тривають довше, щоб сходитись, і чутливі до функції фітнесу. Я думаю, що отримана манера гри може бути цікавішою для неї.

Імітований відпал

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

Зробити це занадто добре

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


Ваша відповідь дала мені багато чого вчитися, велике спасибі! Хоча я не дуже впевнений, я згоден з класифікацією цієї гри як "детермінованої" ..
Simon Forsberg

Причина, по якій я кажу, що це детерміновано, полягає в тому, що кількість можливостей для будь-якої гри обмежена, і хоча гравець людини може здатися робити вибір випадковим, вони роблять це в настільки чітко визначеному просторі, що це детерміновано. Основне правило полягає в тому, що якщо ви використовуєте генератор випадкових чисел (або зовнішній фактор, яким ви не керуєте) де-небудь, це стохастично. Якщо ні, то це детерміновано.
Доктор Роб Ленг

Ну, Сапер є стохастичною , я б сказав, що ви не знаєте , зміст поля , поки ви не зробили крок , щоб розкрити його.
Саймон Форсберг

1
ІМХО, що не робить це стохастичним. Це було б стохастично, якби: з огляду на однакові умови запуску (прихована дошка) результат міг бути різним щоразу, коли клацнув квадрат.
Доктор Роб Ленг

2
Стохастичні / детерміновані та повністю спостережувані / частково спостережувані суворо різні, ортогональні властивості. За визначенням (скажімо, Русселя / Норвіга "Якщо наступний стан навколишнього середовища повністю визначається поточним станом, а дія, виконана агентом ...") Міночистка є детермінованою, хоча і не повністю дотримується.
Петріс

0

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.