1

Я ищу некоторую помощь в моделировании этой проблемы с обучением машины.Моделирование карточной игры для машинного обучения

Рука состоит из трех рядов (содержащих соответственно 3, 5 и 5 карт). Ваша цель - создать руку, которая наберет наибольшее количество очков. Вы получаете карты через интервалы, называемые улицами, пять карт на первой улице и три на следующих четырех улицах (вы должны отбросить одну из карт на последних четырех улицах). Карты не могут перемещаться после их размещения. More details on scoring.

Моя цель - создать систему, которая, учитывая множество улиц, играет рукой, подобной нашим лучшим игрокам. Кажется довольно ясным, что мне нужно построить нейронную сеть для каждой улицы, используя функции, основанные на существующей руке и наборе карточек на улице. У меня есть много данных (улицы, места размещения и окончательный результат), но я немного не уверен, как моделировать проблему, учитывая, что возможные выходы уникальны на множестве карт (хотя их меньше 3^5 места размещения на первой улице и 3^3 после). Раньше я занимался только проблемами классификации с фиксированными категориями.

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

+0

Интересная проблема. Плохой вопрос .... помечен как слишком широкий. Пожалуйста, уточните свой вопрос. –

+0

Я не уверен, что полностью понимаю, но не мог бы вы использовать что-то вроде разворачивания матрицы для представления текущего набора рук/функций и вывода? Например, рука, которая выглядит как [23400; 56789; 10 11 12 13 14], будет представлена ​​как [2340056789 10 11 12 13 14]. Намного легче справиться, и в конце третьей нейронной сети для третьей улицы вы можете извлечь вектор обратно в матрицу, чтобы представить финальную руку. –

+0

Если этот вопрос переместится на [DataScience] (http://datascience.stackexchange.com) (хост для вопросов ML)? –

ответ

4

Неясный вопрос дает неопределенный ответ (который является моим оправданием для того, чтобы быть слишком ленивым для кодирования ;-).

Вы писали, что у вас много данных, и, похоже, вы хотите сопоставить игру с опытом, приобретенным с контролируемым обучением. Но это не так, как работает оптимизация игры. Обычно, как правило, не осуществляется контролируемое обучение, а скорее обучение подкрепления. Различия тонкие, но усиление обучения (с марковскими процессами принятия решений в качестве его теоретической основы) предлагает более локальную точку зрения - например, оптимизировать решение, учитывая конкретное состояние. Контролируемое обучение скорее соответствует оптимизации сразу нескольких решений.

Еще одна пробковая пробка для обычного подхода, основанного на наблюдении, заключается в том, что даже если у вас много данных, почти наверняка будет слишком мало. И он не предложит «требуемые пути».

Обычный подход, по крайней мере, с тех пор, как игрок нарды Thesauro - это скорее: установить основные правила игры, возможно, ввести человеческое знание в качестве эвристики, а затем позволить программе играть против себя как можно чаще - вот как Google Например, глубокий ум создал мастер-плеер. См. Также this interesting video.

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

Итак, снова создайте бота, который может играть против себя. Один общий базис - это функция Q(S,a), которая присваивает любому игровому состоянию и возможному действию игрока значение - это называется Q-обучением. И эта функция часто реализуется как нейронная сеть ... хотя я бы подумал, что здесь не нужно быть таким сложным.

Я пока останусь туманным. Но я был бы рад помочь вам в случае необходимости.

+0

ваш ответ действительно интересный, но я очень новичок в механическом обучении, и мне не достаточно начинать мой проект. Я написал советский запрос [link] (https://www.gamedev.net/forums/topic/692270-needed-advice-for-an-enjoyable-ai-in-buraco-card-game/), пожалуйста, возьмите смотреть! благодаря! – Giggioz

+0

@Giggioz: Я прочитал вашу ссылку, но не буду отвечать на этом другом форуме - просто разместите аналогичный вопрос здесь на SO и поделитесь ссылкой в ​​следующем комментарии. Только несколько коротких комментариев относительно вашей проблемы: начните с двухпользовательской игры. Первый шаг - создать полное состояние игры, то есть информацию о руках и позиции карт. Затем выясните, как создавать состояния отдельных игроков из этого (которые несут меньше информации) ... вам это нужно, когда вы программируете игру. Я бы предложил добавить это как дополнительную информацию к вашему вопросу, иначе это будет расплывчато. – davidhigh

+0

Выполнено: https://stackoverflow.com/questions/46370218/needed-advice-for-an-enjoyable-ai-in-buraco-card-game примечание: я уже построил весь двигатель. Он играет в полные игры с 2 или 4 игроками с фиктивными играми. У меня есть объект («состояние»), в котором хранятся все сведения об игре (карты в руке, карты в колоде, lastMove ...) Но, пожалуйста, давайте продолжим обсуждение в новой теме. Спасибо! – Giggioz

Смежные вопросы