Научите нейронную сеть играть в карточную игру

10

В настоящее время я пишу движок для карточной игры, так как для этой конкретной игры еще нет движка.

Я надеюсь, что смогу потом ввести в игру нейронную сеть и научить ее играть в игру.

Я пишу движок таким образом, что это полезно для ИИ-игрока. Есть точки выбора, и в этих точках представлен список допустимых опций. Случайный выбор сможет сыграть в игру (хотя и не очень хорошо).

Я многое узнал о нейронных сетях (в основном NEAT и HyperNEAT) и даже создал свою собственную реализацию. Я до сих пор не уверен, как лучше построить ИИ, который может учитывать все переменные в одном из этих типов игр. Есть ли общий подход? Я знаю, что Келдон написал хороший ИИ для RftG, который имеет приличную сложность, я не уверен, как ему удалось построить такой ИИ.

Любой совет? Это возможно? Есть ли хорошие примеры этого? Как были сопоставлены входы?

РЕДАКТИРОВАТЬ: я посмотрел в Интернете и узнал, как работают нейронные сети и, как правило, как они относятся к распознаванию изображений или управление простым агентом. Я не уверен, применил ли я это или как к выбору с картами, которые имеют сложную синергию. Любое направление к тому, на что я должен смотреть, будет с благодарностью.

Об игре: Игра похожа на Magic: The Gathering. Есть командир, у которого есть здоровье и способности. У игроков есть запас энергии, который они используют для размещения миньонов и заклинаний на доске. У миньонов есть здоровье, значения атаки, стоимость и т. Д. Карты также имеют способности, которые нелегко перечислить. Карты разыгрываются с руки, новые карты вытягиваются из колоды. Это все аспекты, которые было бы полезно рассмотреть нейронной сети.

pcaston2
источник
Привет, добро пожаловать в AI.SE! В настоящее время это выглядит слишком широким, чтобы мы могли ответить на него хорошо. Как вы думаете, вы могли бы отредактировать его, чтобы немного сузить? Спасибо!
Mithical
Несмотря на то, что этот вопрос является широким, это очевидный и общий вопрос для кого-то новичка в этой области. Также один, где ответы трудно найти с помощью Google (так как большинство учебников по NN, кажется, сосредоточены на распознавании изображений и языковых примерах). Я думаю, что он заслуживает ответа, указывающего на хорошие ресурсы о подходах и методах использования NN для игр, в данном случае в определенных карточных играх.
user12889
Спасибо за ответ. Я немного отредактировал свой вопрос. Любое направление к учебному материалу было бы полезно. Я нахожу в основном распознавание изображений, как вы упомянули. Я стремлюсь учиться и рад иметь большой набор рекомендованных чтений, а не просто простой ответ.
pcaston2

Ответы:

3

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

У меня нет действительно удовлетворительного ответа, но я играл в «Гонку Келдона» за ИИ на основе Galaxy NN - согласен, что он превосходен - и изучил, как он решил эту проблему.

Последний код для AI Келдона теперь доступен для поиска и просмотра на github .

Ай код находится в одном файле . Он использует 2 разных NN, один для «оценки руки и активных карт», а другой для «предсказания выбора роли».

Что вы заметите, так это то, что он использует немало кода, отличного от NN, для моделирования игровой механики. Очень гибридное решение.

Отображение игрового состояния в оценочный NN выполняется здесь . Различные релевантные функции имеют горячее кодирование, например, количество товаров, которые могут быть проданы за этот ход.


Еще одним отличным примером при картировании сложной игры в NN является учебная среда Starcraft II, созданная Deepmind в сотрудничестве с Blizzard Entertainment. В этой статье дается обзор того, как игра Starcraft отображается на набор функций, которые NN может интерпретировать, и как действия могут быть выполнены агентом NN для симуляции игры.

Бен Хатчисон
источник
2

Это вполне выполнимо, но способ отображения входов будет сильно зависеть от типа карточной игры и способа игры.

Я учту несколько возможностей:

  1. Время имеет значение в этой игре? Будет ли прошлый шаг влиять на будущий? В этом случае вам лучше использовать рекуррентные нейронные сети (LSTM, GRU и т. Д.).
  2. Хотели бы вы, чтобы Neural Network изучала данные, которые вы собираете, или изучала сама? Если само по себе, как? Если вы собираете данные о себе, играя в игру десятки или сотни раз, вводите их в нейронную сеть и заставляете их учиться у вас, то вы делаете то, что называется «Поведенческое клонирование». Однако, если вы хотите, чтобы NN учился самостоятельно, вы можете сделать это двумя способами:

    a) Обучение усилению - RL позволяет Нейронной Сети учиться, играя против себя много раз.

    б) NEAT / Генетический алгоритм - NEAT позволяет нейронной сети учиться, используя генетический алгоритм.

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

TajyMany
источник
Здравствуйте, спасибо за ответ! Я буду исследовать эти области, чтобы увидеть, что применимо. Я добавил краткое описание игры в надежде, что это сузит его для вас. Мой движок поддерживает отмены, что может быть полезно в сочетании с NN. Поскольку движок еще не закончен, у меня нет набора образцов, но я планирую хранить всю историю игр на хостинг-сервере между двумя игроками. Я подумывал об использовании обратного распространения для ускорения процесса.
pcaston2
Если состояние игры имеет значение, но не то, как вы попали в это состояние , вы бы сказали, что время имеет значение? Можете ли вы привести какие-либо примеры игр, где время имеет значение, а некоторые, где время не имеет значения? На данный момент я могу думать только о ситуациях, когда текущее состояние имеет значение (кто его в данный момент, какие известные карты или части игры находятся там), но не как вы туда попали (единственное, что имеет значение, это где они сейчас , а не где они были два поворота назад)
Симон Форсберг
2

Вы определенно хотели бы, чтобы ваша сеть знала важную информацию об игре, например, какие карты имеет агент ИИ (их значения и типы), запас маны, сколько карт на столе и их значения, количество ходов и так далее. Эти вещи вы должны решить самостоятельно, вопрос, который вы должны задать себе: «Если я добавлю это значение, чтобы указать, как и почему это улучшит мою систему». Но первое, что нужно понять, это то, что большинство сетевых карт имеют постоянный размер ввода, и я полагаю, что это важно в этой игре, поскольку у игроков может быть разное количество карт в руке или на столе. Например, вы хотите, чтобы NN знали, какие у него карты, предположим, что у игрока может быть максимум 5 карт в руке, и каждая карта может иметь 3 значения (мана, атака и здоровье), поэтому вы можете закодировать это как 5 * 3 вектор, где первые 3 значения представляют карту номер один и так далее. Но что, если у игрока в настоящее время есть 3 карты, простой подход - назначить нули последним 6 входам, но это может вызвать проблемы, поскольку некоторые карты могут иметь 0 мана или 0 атаки. Так что вам нужно выяснить, как решить эту проблему. Вы можете искать модели NN, которые могут обрабатывать переменные входные размеры, или выяснить, как кодировать входные данные как вектор постоянного размера.

Во-вторых, выходные данные также являются векторами постоянного размера. В случае игры такого типа это может быть вектор, который кодирует действия, которые может выполнять агент. Допустим, у нас есть 3 действия: положить карту, пропустить ход и уступить. Таким образом, это может быть один горячий кодировщик, например, если у вас есть 1 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 или одного из их производных искусственных сетей.

Что будет делать искусственная сеть и примеры тренировок

Основная роль искусственных сетей этих типов заключается в изучении функции на примере данных. Если у вас есть последовательности ходов в реальных играх, это отличный актив для вашего проекта. Очень большое их количество будет очень полезно для тренировок.

Как вы располагаете примеры и стоит ли их маркировать, стоит рассмотреть, однако без правил карточной игры трудно дать какое-либо надежное направление. Есть ли партнеры, основаны ли они на счете, количество ходов к победе и дюжина других факторов обеспечивают параметры сценария, необходимые для принятия этих решений.

Учиться

Главный совет, который я могу дать, это читать не столько общие статьи в Интернете, сколько прочитать некоторые книги и некоторые статьи, которые вы можете понять по вышеуказанным темам. Затем найдите код, который можно загрузить, и попробуйте после того, как вы достаточно хорошо поймете терминологию, чтобы знать, что загружать.

Это означает, что поиск книг и академический поиск гораздо более вероятно направят вас в правильном направлении, чем общий поиск в Интернете. В общем веб-пространстве тысячи проблем, объясняющих принципы ИИ с большим количеством ошибок. Издатели книг и научных статей более требовательны к своим авторам.

Дуглас Дасеко
источник