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

Я разрабатываю бота для игры в техасский холдем-покер за столами до десяти игроков, и этот дизайн включает несколько нейронных сетей с прямой связью (FFNN). Каждая из этих нейронных сетей имеет от 8 до 12 входов, от 2 до 6 выходов и 1 или 2 скрытых слоя, поэтому мне нужно оптимизировать несколько сотен весов. Моя основная проблема с обучением через обратное распространение - получение достаточного количества обучающих данных. В свободное время я играю в покер, но его недостаточно, чтобы собирать данные самостоятельно. Я рассматривал возможность покупки нескольких миллионов рук на покерном сайте, но не думаю, что мой кошелек будет очень доволен мной, если я это сделаю ... Итак, я решил подойти к этому, разработав генетический алгоритм. Я видел примеры FFNN, которых обучали играть в такие игры, как Super Mario и Tetris, с использованием генетических алгоритмов, но никогда для такой игры, как покер, поэтому я хочу знать, является ли это жизнеспособным подходом к обучению моего бота.


Во-первых, позвольте мне дать небольшую справочную информацию (это может сбить с толку, если вы не знакомы с покером). У меня есть система, которая позволяет боту ставить своих противников на определенный диапазон рук, чтобы он мог принимать соответствующие разумные решения, но она полностью полагается на точный вывод трех разных нейронных сетей:
NN_1) Это определяет, как скорее всего, оппонент: а) разыгрывает реальную ценность своей руки, б) блефует или в) разыгрывает руку, которая в дальнейшем может стать сильнее.
NN_2) Это предполагает, что оппонент разыгрывает реальную ценность своей руки. руки и выводит вероятную силу. Он представляет вариант (а) из первой нейронной сети.
NN_3) Он делает то же самое, что и NN_2, но вместо этого предполагает, что противник блефует, представляя вариант (б).
Тогда у меня есть алгоритм для варианта (с ), не использующий FFNN. Выходные данные для (a), (b) и (c) затем объединяются на основе выходных данных от NN_1, чтобы обновить диапазон моего оппонента.

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

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


Вот мой план тренировок:
Я буду моделировать несколько больших турниров с 10 n начальными ботами, каждый со случайными значениями для всего. В течение первых нескольких десятков турниров все они будут размещены на столах по 10. Они будут играть до тех пор, пока не останется один бот или пока они не сыграют, скажем, 1000 рук. Если они достигнут этого лимита рук, оставшиеся боты немедленно пойдут олл-ин в каждой руке, пока не останется один. После заполнения каждой таблицы наиболее точные FFNN будут помещены в победившего бота, который перейдет в следующий раунд (даже если бот, содержащий лучший FFNN, не был победителем). Победивший бот сохранит свои значения агрессии и диапазона открытия. Турнир заканчивается, когда остается только 100 ботов, и случайные вариации этих ботов будут генерировать игроков для следующего турнира. Я предполагаю, что первые несколько турниров будут полным хаосом, поэтому я не хочу слишком сужать свои варианты на раннем этапе.

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


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


person Kody Puebla    schedule 07.10.2017    source источник
comment
Этот вопрос может быть лучше на cs.stackexchange.com? Я не уверен.   -  person aschepler    schedule 07.10.2017
comment
Хорошо, попробую и там. Спасибо.   -  person Kody Puebla    schedule 07.10.2017


Ответы (1)


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

person Todor Balabanov    schedule 08.10.2017
comment
Я думал, что буду использовать NN для предсказания человеческого поведения, поскольку это нелегко определить с помощью формулы и зависит от нескольких различных параметров. Для всего остального я использую чистые шансы и предполагаемые прибыли / убытки. Мне нужно найти надежный способ предсказать силу руки оппонента и то, как он будет реагировать на размер ставки, поэтому я надеялся, что новичок сможет найти паттерны, которые я не мог. - person Kody Puebla; 09.10.2017
comment
Во-первых, нельзя быть уверенным в том, кто играет против вас (в разных играх люди разные и ведут себя по-разному). Во-вторых, даже одинокий человек меняет свое поведение в зависимости от ситуации (это одна из вещей, в которых люди лучше компьютеров). Если вам нравится анализировать поведение оппонента, гораздо лучше попробовать движок правил с базой знаний (экспертная система). По такому принципу работают системы противодействия мошенничеству в игорной индустрии. Я узнал о такой системе, когда работал в Playtech Bulgaria. - person Todor Balabanov; 10.10.2017