Навчіть нейронну мережу грати в карткові ігри


10

Я зараз пишу двигун, щоб грати в карткові ігри, оскільки для цієї конкретної гри поки що немає двигуна.

Я сподіваюся, що зможу після цього ввести нейронну мережу в гру і навчити її грати.

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

Я дізнався багато про нейронні мережі (в основному NEAT і HyperNEAT) і навіть створив власну реалізацію. Я все ще не впевнений, як найкраще побудувати AI, який може врахувати всі змінні в одній із цих типів ігор. Чи існує спільний підхід? Я знаю, що Keldon написав хороший AI для RftG, який має пристойну кількість складності, я не впевнений, як йому вдалося побудувати такий AI.

Будь-яка порада? Це можливо? Чи є хороші приклади цього? Як відображалися входи?

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

Про гру: Гра схожа на Magic: The Gathering. Є командир, який має здоров'я та здібності. У гравців є енергетичний пул, який вони використовують для розміщення на дошці міньйонів і заклинань. Міньйони мають здоров'я, цінності нападу, витрати тощо. Картки також мають здібності, їх не легко перерахувати. Картки граються з рук, нові карти витягуються з колоди. Це всі аспекти, які було б корисно врахувати від нейромережі.


Привіт, ласкаво просимо на AI.SE! Оскільки це наразі стоїть, нам здається трохи занадто широким, щоб ми могли на це добре відповісти. Як ви думаєте, ви могли б відредагувати його, щоб трохи звузити його? Дякую!
Міфічний

Хоча питання широке, це очевидне і поширене питання для когось нового в цій галузі. Крім того, там, де відповіді важко знайти за допомогою Google (оскільки, як видається, більшість навчальних посібників щодо NN орієнтовані на розпізнавання зображень та мовні приклади). Я думаю, що вона заслуговує на відповідь, яка вказує на хороші ресурси щодо підходів та методик використання NN для гри в ігри, в даному випадку, зокрема, в карткові ігри.
користувач12889

Дякуємо за відгук. Я трохи відредагував своє запитання. Будь-який напрямок до навчального матеріалу був би корисним. В основному я знаходжу зображення, як ви згадали. Я прагну вчитися і радий мати великий набір рекомендованих читань, а не просто просту відповідь.
pcaston2

Відповіді:


3

Я думаю, ви ставите гарне запитання, особливо WRT щодо того, як входи та виходи NN відображаються на механіку карткової гри, як MtG, де доступні дії сильно різняться в залежності від контексту.

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

Останній код AI Keldon тепер можна шукати та переглядати на github .

Код ai знаходиться в одному файлі . Він використовує 2 різних NN, один для "оцінки руки та активних карт", а другий для "прогнозування вибору ролей".

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

Відображення стану гри в оцінці NN робиться тут . Різні відповідні функції - це закодовані гарячі, наприклад, кількість товарів, які можна продати, що повертаються.


Ще одне чудове тематичне дослідження зі складання складної гри в NN - це середовище навчання Starcraft II, створене Deepmind у співпраці з Blizzard Entertainment. У цьому документі наведено огляд того, як гра Starcraft відображається на наборі функцій, які NN може інтерпретувати, і як дії можуть бути видані агентом NN для моделювання гри.


2

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

Я врахую кілька можливостей:

  1. Чи важливий час у цій грі? Чи вплине минулий хід на майбутній? У цьому випадку вам краще використовувати повторювані нейронні мережі (LSTM, GRU та ін.).
  2. Чи хотіли б Ви, щоб Нейронна мережа вивчала дані, які Ви збираєте, або вчитися самостійно? Якщо самостійно, як? Якщо ви збираєте дані про себе в гру в десятки або сотні разів, подаєте їх в Нейронну мережу і змушуєте її вчитися у вас, то ви робите щось, що називається "Поведінкове клонування". Однак якщо ви хочете, щоб NN самостійно вчилося, ви можете зробити це двома способами:

    a) Навчання зміцненню - RL дозволяє Нейронній мережі вчитися, граючи проти себе багато разів.

    б) NEAT / Генетичний алгоритм - NEAT дозволяє Нейронній мережі вчитися за допомогою генетичного алгоритму.

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


Привіт, дякую за відповідь! Я досліджу ці області, щоб побачити, що стосується. Я додав короткий опис гри, сподіваючись, що це звузить її для вас. Мій двигун підтримує unos, так що може бути корисним у поєднанні з NN. Оскільки двигун незавершений, я не маю вибірки, але планую зберігати всю історію ігор з хостинг-сервера між двома гравцями. Я розглядав можливість використання зворотного розповсюдження для прискорення процесу.
pcaston2

Якщо стан гри має значення, але не те, як ви потрапили до цього стану , ви б сказали, що час має значення? Чи можете ви навести будь-які приклади ігор, де важливий час, і десь, коли час не має значення? На даний момент я можу лише думати про ситуації, коли важливий поточний стан (хто це, які відомі картки чи ігрові фігури), але не про те, як ти потрапив (єдине, що важливо - це де вони зараз , а не там, де вони були дві черги тому)
Simon Forsberg

2

Ви, безумовно, хочете, щоб ваша мережа знала важливу інформацію про гру, наприклад, які картки мають AI-агент (їх значення та типи), пул мани, скільки карт на столі та їх значення, кількість ходу тощо. Ці речі ви повинні зрозуміти самостійно, питання, яке ви повинні задати собі: "Якщо я додаю це значення, щоб ввести, як і чому це покращить мою систему". Але перше, що потрібно зрозуміти, - це те, що більшість NN розроблені таким чином, щоб вони мали постійний розмір вводу, і я вважаю, що це важливо в цій грі, оскільки гравці можуть мати різну кількість карт в руці або на столі. Наприклад, ви хочете повідомити NN про те, які карти у нього є, припустимо, у гравця може бути максимум 5 карт у руці, і кожна карта може мати 3 значення (мана, атака та здоров'я), тому ви можете кодувати це як 5 * 3 вектора, де перші 3 значення представляють собою номер номер однієї картки тощо. Але що робити, якщо у гравця в даний час є 3 карти, простим підходом буде призначення нулів останнім 6 входам, але це може спричинити проблеми, оскільки деякі карти можуть мати 0 витрат мани або 0 атак. Тож вам потрібно розібратися, як вирішити цю проблему. Ви можете шукати NN-моделі, які можуть обробляти змінний розмір вводу або зрозуміти, як кодувати вхід як вектор постійного розміру.

По-друге, результати - це також вектори постійного розміру. У випадку подібного типу гри це може бути вектор, який кодує дії, які може здійснити агент. Тож скажімо, у нас є 3 дії: покласти карту, пропустити чергу і поступитися. Таким чином, це може бути один гарячий кодер, наприклад, якщо у вас є вихід 0 0, це означає, що агент повинен поставити якусь карту. Щоб знати, яку картку слід поставити, ви можете додати ще один елемент до виводу, який дасть число в діапазоні від 1 до 5 (5 - максимальна кількість карт у руці).

Але найважливішою частиною тренування нейронної мережі є те, що вам доведеться придумати функцію втрат, яка відповідає вашим завданням. Можливо, стандартні функції втрат, такі як середня втрата або L2, будуть хорошими, можливо, вам знадобиться змінити їх, щоб відповідати вашим потребам. Це та частина, де вам потрібно буде зробити дослідження. Я ніколи раніше не працював з NEAT, але, як я правильно зрозумів, він використовує певний генетичний алгоритм для створення та тренування NN, а GA використовує певну функцію фітнесу для вибору людини. Тому в основному вам потрібно буде знати, який показник ви будете використовувати, щоб оцінити, наскільки добре ви працюєте, і виходячи з цього показника, ви зміните параметри моделі.

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

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


1

Так. Це можливо.

Огляд питання

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

Питання показує загальну обізнаність з основами гри, викладеними в теорії ігор Моргенштерна та фон Неймана .

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

Інші особливості гри можуть бути або не бути такими очевидними.

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

Загальні підходи

Існує загальний підхід до відображення і входів, і виходів, але у відповіді Stack Exchange є занадто багато пояснень. Це лише кілька основних принципів.

  • Все моделювання, яке можна зробити явно, слід робити. Наприклад, хоча штучна сітка теоретично може навчитися рахувати карти (відстежуючи можливі місця розташування кожної з карт), простий алгоритм підрахунку може це зробити, тому використовуйте відомий алгоритм і подайте ці результати в штучну мережу як вхід.
  • Використовуйте як вхід будь-яку інформацію, яка співвідноситься з оптимальним результатом, але не використовуйте як вхід будь-яку інформацію, яка не може бути співвіднесеною з оптимальним результатом.
  • Кодуйте дані, щоб зменшити надмірність вхідного вектора, як під час тренувань, так і під час автоматизованої гри. Абстракція та узагальнення - це два загальні шляхи досягнення цього. Вилучення можливостей може використовуватися як інструмент або абстрактного, або узагальненого. Це можна зробити як на входах, так і на виходах. Прикладом може бути те, що якщо в цій грі J> 10 так само, як A> K, K> Q, Q> J і 10> 9, то кодують карти як цілі числа від 2 до 14 або 0 до 12 по віднімання одного. Кодуйте костюми від 0 до 3 замість чотирьох текстових рядків.

Робота з розпізнавання зображень пов'язана лише віддалено, занадто відрізняється від гри в карти, щоб використовувати безпосередньо, якщо тільки вам не потрібно розпізнавати карти з візуального зображення, і в цьому випадку LSTM може знадобитися, щоб побачити, що інші гравці обрали для рухів. Вивчення стратегій виграшів більш ніж ймовірно виграє від дизайнів MLP або RNN, або одного з їх похідних штучних дизайнів мережі.

Що б робити штучна мережа та приклади тренувань

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

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

Навчіться

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

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

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