← Вернуться к списку

Как представить состояние в среде карточной игры? (Маг)

Краткое содержание

Мы пытаемся создать ИИ, который сможет играть в карточную игру Wizard. Пока что у нас есть рабочая сеть (на основе YOLO-обнаружения объектов), которая способна определить, какие карты были сыграны. При запросе она возвращает масть и достоинство карт на столе. Но теперь, когда я начинаю создавать агента для самого обучения, я никак не могу понять, как представить состояния для этой игры. В каждом раунде каждый игрок получает количество карт, равное номеру раунда (одна карта в первом раунде, две во втором и так далее). Исходя из этого, игроки оценивают, сколько взяток они выиграют в этом раунде. По окончании раунда игроки подсчитывают свои очки относительно их оценки. Таким образом, агент должен оценивать свои будущие взятки и играть в зависимости от этой стратегии. Как же закодировать это в форму, с которой может работать нейронная сеть?

Полный текст

1 $\begingroup$ Мы пытаемся создать ИИ, который умеет играть в карточную игру Wizard. Пока что у нас есть рабочая сеть (на основе YOLO object-detection), которая способна определить, какие карты были сданы. Когда её просят, она возвращает цвет и достоинство карт на столе. Но теперь, когда мы начинаем строить агента для непосредственного обучения, я просто не могу понять, как представить состояния для этой игры. В каждом раунде каждый игрок получает количество карт, равное номеру раунда (одна карта в первом раунде, две во втором и так далее). Исходя из этого, игроки оценивают, сколько взяток они выиграют в этом раунде. По окончании раунда игроки подсчитывают свои очки относительно их оценки. Поэтому агент должен оценить свои будущие взятки и играть в зависимости от этой стратегии. Как закодировать это в форму, с которой может работать нейронная сеть? reinforcement-learning q-learning Share Improve this question Follow asked Feb 10, 2020 at 7:37 Voß 99 9 9 bronze badges $\endgroup$ Add a comment | 1 Answer 1 Sorted by: Reset to default Highest score (default) Date modified (newest first) Date created (oldest first) 0 $\begingroup$ Прошло почти два года, но поскольку у меня был тот же вопрос, и я всё ещё нашёл этот пост, я также опубликую, как я планирую это решить: Я ещё не реализовал и не тестировал это решение. Мы будем думать о входных данных для нейронной сети в виде нескольких блоков. блок: рука игрока блок: информация о том, какие карты уже были сыграны блок: прочая информация Теперь немного подробнее: 1. Блок: Представить каждую карту с помощью двух входных нейронов: один для цвета, один для значения. Затем сделать размер блока 1 максимально возможным. В игре с тремя игроками на руке у игрока никогда не будет больше 20 карт, каждая требует два нейрона, так что мы получаем 40 нейронов в блоке 1. (Меньше, если ИИ обучается для меньшего числа игроков) цвет также можно разделить на пять нейронов вместо одного (4 цвета + 1 нейтральный цвет) 2. Блок: 60 нейронов, которые имеют значения 0 или 1 в зависимости от того, была ли карта уже сыграна или нет. 3. Блок: • Некоторая информация о том, сколько взяток ИИ должен ещё выиграть. Например, использовать один нейрон со входным значением: "Количество взяток, которые ИИ должен выиграть", делённое на "количество ещё доступных взяток" • цвет, который ИИ должен подать -> 1, 4 или 5 нейронов Дополнительные входы: • значение текущей выигрывающей карты -> 1 нейрон • цвет текущей выигрывающей карты -> 1, 4 или 5 нейронов • соотношение общих очков, которые каждый игрок набрал на данный момент, к среднему количеству очков • соотношение желаемых взяток к доступным взяткам (как выше) для противников Можно также объединить блоки 1 и 2 в 60 нейронов с дополнительным возможным состоянием: не сыграна ещё -> 0 сыграна -> 1 на руке -> -1 Share Improve this answer Follow answered Dec 23, 2021 at 23:35 Sebastian 1 $\endgroup$ 1 $\begingroup$ Вам, возможно, стоит задать вопрос об этом представлении. Главная проблема, которую я вижу, заключается в том, что в блоке 1 имеется большое количество избыточности из-за того, что карты по сути являются одной и той же точкой данных (наличие карты на руке не зависит от её позиции, но используемое вами кодирование варьирует позицию). На мой взгляд, вам было бы лучше использовать для блока 1 фиксированное представление для всех карт, такое же, как для блока 2, хотя, возможно, подход с сортировкой для блока 1 и использование архитектуры LSTM или трансформера для её обработки также хорошо подойдёт. $\endgroup$ Neil Slater – Neil Slater 2024-09-09 06:27:05 +00:00 Commented Sep 9, 2024 at 6:27 Add a comment | You must log in to answer this question. Start asking to get answers Find the answer to your question by asking. Ask question Explore related questions reinforcement-learning q-learning See similar questions with these tags.