- BrainTools - https://www.braintools.ru -

Покерная лаборатория закрывается, ловите исходники

Я делал этот проект более полутора лет, сейчас отказываюсь от него. И, чтобы эти полтора года не были прожиты зря) открываю исходники. Java+Spring.

Принимайте проект «как есть», со всеми ad-hoc костылями, незаконченными исследованиями, TODOs, а также всевозможными KISS, DRY, и, как их… SOLID с GoF.

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

Что представляет из себя Продукт

Это конструктор покерных ботов. Что-то вроде no-code платформы. Вы собираете стратегию как паззл из кусочков. Всего паззлов около 3500. Паззлы «двойные» – вы можете настроить частоты как по типам действий, так и размерам ставок.

Срины с фронта
Так можно задать вручную частоты типов действий для первого слова на префлопе на 6-макс столе. Синий - FOLD, зелёный - CHECK/CALL, красный - ALLIN, желтый - BET/RAISE

Так можно задать вручную частоты типов действий для первого слова на префлопе на 6-макс столе. Синий – FOLD, зелёный – CHECK/CALL, красный – ALLIN, желтый – BET/RAISE
Так задаются частоты по размерам ставок для той же ситуации на префлопе

Так задаются частоты по размерам ставок для той же ситуации на префлопе
Аналогично и для постлопа. Так задаются частоты для флопа, когда в ситуации «на двоих», когда на руках две оверкарты, и при этом на столе лежит ничего не значащая пара

Аналогично и для постлопа. Так задаются частоты для флопа, когда в ситуации «на двоих», когда на руках две оверкарты, и при этом на столе лежит ничего не значащая пара

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

Вот карточка статистик первой попавшейся модели
Фича с типом стритовости руки имеет наибольший вес

Фича с типом стритовости руки имеет наибольший вес

Третьим типом паззлов является игра по контрстратегии. Мне не удалось до конца отточить контрстратегию, поэтому вариант пока не поддержан. Построение контрстратегии является крайне сложным с точки кодинга и очень затратно с точки зрения [1] вычислений. В последнее время я работал над классом GameTreeGenerator, который строит покерное дерево исходя из собранной статистики на оппонента. Требует существенных доработок.

Что представляет из себя Приложение

Технически, это Java+Spring приложение, с одним GraphQL контроллером [2]. Через контроллер создаются датасеты и боты, конфигурируются стратегии ботов, запрашиваются подсказки.

Важный сервис – selfplay [3]. Он предоставляет возможность сыграть созданными стратегиями между собой и выгрузить текстовые хенд-хистори в clickhouse, откуда потом они могут быть импортированы в сторонние средства анализа игры.

Ключевые компоненты

Класс HoldemHandStrengthCalculator [4]умеет считать винрейты для заданных ренжей игроков.

Пакет engine [5]содержит абстракции покерной раздачи, игрока. Особое внимание [6] на класс PokerEngine [7]– это конечно-автоматная логика [8] определения ситуации в покерной раздаче.

Пакет holding [9]содержит описатели руки героя. Описатели рассчитываются в HoldingEvaluator [10]. Описатели являются ключевыми факторами принятия решения в раздаче и формируют существенную часть в общем наборе фичей.

Пакет spark [11], а, конкретно, PipelineUtils [12], умеет строить ML модели – деревья принятия решений.

Объекты класса Solution [13]это и есть стратегия бота, оформленная в виде справочника с ключами в виде спота и значениями типа Advisor [14]. Spot [15] – это, своего рода, расширение покерной ситуации, в которую добавлены сведения о руке героя или текущем стеке. Advisor [14]это интерфейс для паззлов, принимающих решение в конкретном споте.

 Всем удачи!

Автор: sturex

Источник [16]


Сайт-источник BrainTools: https://www.braintools.ru

Путь до страницы источника: https://www.braintools.ru/article/15886

URLs in this post:

[1] зрения: http://www.braintools.ru/article/6238

[2] GraphQL контроллером: https://github.com/sturex/open-asper/blob/main/src/main/java/dev/asper/app/controller/GraphQlController.java

[3] selfplay: https://github.com/sturex/open-asper/blob/main/src/main/java/dev/asper/app/service/SelfPlayService.java

[4] HoldemHandStrengthCalculator : https://github.com/sturex/open-asper/blob/main/src/main/java/dev/asper/metric/hs/HoldemHandStrengthCalculator.java

[5] engine : https://github.com/sturex/open-asper/tree/main/src/main/java/dev/asper/poker/engine

[6] внимание: http://www.braintools.ru/article/7595

[7] PokerEngine : https://github.com/sturex/open-asper/blob/main/src/main/java/dev/asper/poker/engine/PokerEngine.java

[8] логика: http://www.braintools.ru/article/7640

[9] holding : https://github.com/sturex/open-asper/tree/main/src/main/java/dev/asper/poker/holding

[10] HoldingEvaluator: https://github.com/sturex/open-asper/blob/main/src/main/java/dev/asper/poker/holding/eval/HoldingEvaluator.java

[11] spark: https://github.com/sturex/open-asper/tree/main/src/main/java/dev/asper/spark

[12] PipelineUtils: https://github.com/sturex/open-asper/blob/main/src/main/java/dev/asper/spark/PipelineUtils.java

[13] Solution : https://github.com/sturex/open-asper/blob/main/src/main/java/dev/asper/poker/ai/Solution.java

[14] Advisor: https://github.com/sturex/open-asper/blob/main/src/main/java/dev/asper/poker/ai/Advisor.java

[15] Spot: https://github.com/sturex/open-asper/blob/main/src/main/java/dev/asper/poker/engine/spot/Spot.java

[16] Источник: https://habr.com/ru/articles/915882/?utm_source=habrahabr&utm_medium=rss&utm_campaign=915882

www.BrainTools.ru

Rambler's Top100