В настоящее время я пишу движок для карточной игры, так как для этой конкретной игры еще нет движка.
Я надеюсь, что смогу потом ввести в игру нейронную сеть и научить ее играть в игру.
Я пишу движок таким образом, что это полезно для ИИ-игрока. Есть точки выбора, и в этих точках представлен список допустимых опций. Случайный выбор сможет сыграть в игру (хотя и не очень хорошо).
Я многое узнал о нейронных сетях (в основном NEAT и HyperNEAT) и даже создал свою собственную реализацию. Я до сих пор не уверен, как лучше построить ИИ, который может учитывать все переменные в одном из этих типов игр. Есть ли общий подход? Я знаю, что Келдон написал хороший ИИ для RftG, который имеет приличную сложность, я не уверен, как ему удалось построить такой ИИ.
Любой совет? Это возможно? Есть ли хорошие примеры этого? Как были сопоставлены входы?
РЕДАКТИРОВАТЬ: я посмотрел в Интернете и узнал, как работают нейронные сети и, как правило, как они относятся к распознаванию изображений или управление простым агентом. Я не уверен, применил ли я это или как к выбору с картами, которые имеют сложную синергию. Любое направление к тому, на что я должен смотреть, будет с благодарностью.
Об игре: Игра похожа на Magic: The Gathering. Есть командир, у которого есть здоровье и способности. У игроков есть запас энергии, который они используют для размещения миньонов и заклинаний на доске. У миньонов есть здоровье, значения атаки, стоимость и т. Д. Карты также имеют способности, которые нелегко перечислить. Карты разыгрываются с руки, новые карты вытягиваются из колоды. Это все аспекты, которые было бы полезно рассмотреть нейронной сети.
источник
Ответы:
Я думаю, что вы поднимаете хороший вопрос, особенно WRT, о том, как входы и выходы NN отображаются на механику карточной игры, такой как MtG, где доступные действия сильно различаются в зависимости от контекста.
У меня нет действительно удовлетворительного ответа, но я играл в «Гонку Келдона» за ИИ на основе Galaxy NN - согласен, что он превосходен - и изучил, как он решил эту проблему.
Последний код для AI Келдона теперь доступен для поиска и просмотра на github .
Ай код находится в одном файле . Он использует 2 разных NN, один для «оценки руки и активных карт», а другой для «предсказания выбора роли».
Что вы заметите, так это то, что он использует немало кода, отличного от NN, для моделирования игровой механики. Очень гибридное решение.
Отображение игрового состояния в оценочный NN выполняется здесь . Различные релевантные функции имеют горячее кодирование, например, количество товаров, которые могут быть проданы за этот ход.
Еще одним отличным примером при картировании сложной игры в NN является учебная среда Starcraft II, созданная Deepmind в сотрудничестве с Blizzard Entertainment. В этой статье дается обзор того, как игра Starcraft отображается на набор функций, которые NN может интерпретировать, и как действия могут быть выполнены агентом NN для симуляции игры.
источник
Это вполне выполнимо, но способ отображения входов будет сильно зависеть от типа карточной игры и способа игры.
Я учту несколько возможностей:
Хотели бы вы, чтобы Neural Network изучала данные, которые вы собираете, или изучала сама? Если само по себе, как? Если вы собираете данные о себе, играя в игру десятки или сотни раз, вводите их в нейронную сеть и заставляете их учиться у вас, то вы делаете то, что называется «Поведенческое клонирование». Однако, если вы хотите, чтобы NN учился самостоятельно, вы можете сделать это двумя способами:
a) Обучение усилению - RL позволяет Нейронной Сети учиться, играя против себя много раз.
б) NEAT / Генетический алгоритм - NEAT позволяет нейронной сети учиться, используя генетический алгоритм.
Однако, опять же, чтобы получить более конкретную информацию о том, как должны кодироваться входы и выходы нейронной сети, я должен был бы узнать больше о самой карточной игре.
источник
Вы определенно хотели бы, чтобы ваша сеть знала важную информацию об игре, например, какие карты имеет агент ИИ (их значения и типы), запас маны, сколько карт на столе и их значения, количество ходов и так далее. Эти вещи вы должны решить самостоятельно, вопрос, который вы должны задать себе: «Если я добавлю это значение, чтобы указать, как и почему это улучшит мою систему». Но первое, что нужно понять, это то, что большинство сетевых карт имеют постоянный размер ввода, и я полагаю, что это важно в этой игре, поскольку у игроков может быть разное количество карт в руке или на столе. Например, вы хотите, чтобы 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. Причина этого заключается в том, что было написано много статей о том, как выполнить классификацию для этого набора данных, и вы многому научитесь и быстрее научитесь реализовывать простые вещи.
источник
Да. Это возможно.
Обзор вопроса
Целью разработки системы, по-видимому, является выигрышное стратегическое преимущество за счет использования одной или нескольких искусственных сетей в сочетании с движком для карточных игр.
Этот вопрос показывает общее понимание основ игрового процесса, изложенных в теории игр Моргенштерна и фон Неймана .
Другие особенности игрового процесса могут быть или не быть столь очевидными.
Советы общего подхода
Существует общий подход к отображению как входов, так и выходов, но в ответе Stack Exchange слишком много объяснений. Это всего лишь несколько основных принципов.
Работа по распознаванию изображений только отдаленно связана, слишком отличается от игры в карты, чтобы использовать ее напрямую, если только вам не нужно распознавать карты по визуальному изображению, и в этом случае может потребоваться LSTM, чтобы увидеть, что другие игроки выбрали для ходов. Изучение выигрышных стратегий, скорее всего, выиграет от проектов MLP или RNN или одного из их производных искусственных сетей.
Что будет делать искусственная сеть и примеры тренировок
Основная роль искусственных сетей этих типов заключается в изучении функции на примере данных. Если у вас есть последовательности ходов в реальных играх, это отличный актив для вашего проекта. Очень большое их количество будет очень полезно для тренировок.
Как вы располагаете примеры и стоит ли их маркировать, стоит рассмотреть, однако без правил карточной игры трудно дать какое-либо надежное направление. Есть ли партнеры, основаны ли они на счете, количество ходов к победе и дюжина других факторов обеспечивают параметры сценария, необходимые для принятия этих решений.
Учиться
Главный совет, который я могу дать, это читать не столько общие статьи в Интернете, сколько прочитать некоторые книги и некоторые статьи, которые вы можете понять по вышеуказанным темам. Затем найдите код, который можно загрузить, и попробуйте после того, как вы достаточно хорошо поймете терминологию, чтобы знать, что загружать.
Это означает, что поиск книг и академический поиск гораздо более вероятно направят вас в правильном направлении, чем общий поиск в Интернете. В общем веб-пространстве тысячи проблем, объясняющих принципы ИИ с большим количеством ошибок. Издатели книг и научных статей более требовательны к своим авторам.
источник