Я делал этот проект более полутора лет, сейчас отказываюсь от него. И, чтобы эти полтора года не были прожиты зря) открываю исходники. 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-пазлы. Они представляют собой обученные модели для настраиваемой покерной ситуации.

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

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

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

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

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

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

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

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

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

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

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

 Всем удачи!

Комментарии (17)


  1. wanomgn
    05.06.2025 14:44

    расскажи больше. пожалуйста.

    для чего? как успехи? какой шанс "поднять бабло" ;)


    1. sturex Автор
      05.06.2025 14:44

      1. для чего? - поднять бабло)

      2. как успехи? - пока никаких. Разве что, полученная экспертиза - она довольно ценна.

      3. какой шанс? - ненулевой, но близко к нулю. Один не справишься. Крайне сложный проект.


      1. wanomgn
        05.06.2025 14:44

        1 да это понятно ;))

        2 почему? такие красивые схемы.. ну всяко же должно что то получится

        3 все напрасно? понимаю что так.. но не хочется верить.. ;((


        1. sturex Автор
          05.06.2025 14:44

          Пытаться сделать бота для покера - это всё равно, что охотиться за килькой, находясь в желудке у акулы. Кильку ты будешь ловить весьма успешно...


          1. rettsu
            05.06.2025 14:44

            Интересно. Забрал, посмотрю.

            Все это нужно допилить, а дальше делать не бота, а анализ входящей информации, расчет действий с учётом ситуации на борде, позиции, ставок, стадии турнира (если играем в MTT). Можно играть через телефон, выводя картинку на экран монитора (USB-OTG или через вафлю - как удобнее, задержки нет). Софт смотрит что происходит, анализирует, подсказывает. Человек делает действия самостоятельно (это безопаснее). Если совсем углубиться в анализ, можно внести статистику на каждого игрока (какое ставки делал, с какой позиции, типа игрока - все как у взрослых, а-ля Holdem Indicator). Ну а если мощностей достаточно (и голова варит) - чем черт не шутит, можно попробовать и по GTO поиграть. В общем, тут есть куда двигаться. Но конкуренция большая, это да.


            1. YuraPlusEV
              05.06.2025 14:44

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


            1. sansanhz
              05.06.2025 14:44

              Это называется "подсказчик" за него банят точно так же, как и "самостоятельного" бота, т.к. стратегии таких подсказчиков/ботов слишком отличаются от человека - они легко идентифицируются.


              1. YuraPlusEV
                05.06.2025 14:44

                Это очень громкое заявление которое не соответствует действительности, если конечно вы не играете одной и той же логикой на 10+ аккаунтах с TTL от ~10к раздач в одном руме. Вполне себе решается ротацией. А в приведенном коде из статьи есть возможность создавать именно разную логику для каждого инстенса. Так что тут мимо.


            1. teetet
              05.06.2025 14:44

              На самом деле это не нужно. Я получил бан на Покерестарз за использование даже не запрещённого, а "не рекомендованного" софта. Ботов и запрещенный софт они вычисляют быстро по каким-то своим технологиям. А фишка в том, что на покере можно зарабатывать и без всякого специального софта- просто гриндить низкие лимиты, как это делают реги. Они шатают целыми днями кучу столов, зарабатывая ну может 10-30 баксов в день. Стоит оно того? Чтобы зарабатывать больше, никакой софт тоже не поможет. Нужно уметь играть, а для этого нужно учиться.


    1. SensDj
      05.06.2025 14:44

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


      1. charypopper
        05.06.2025 14:44

        Изобрели мартингейл?)


        1. aspid-crazy
          05.06.2025 14:44

          Ха, кажется это распространенная ачивка:)
          Изобретение обошлось мне в 10$, изъятых со студенческих обедов. Во времена, когда в ларьках продавались карточки для пополнения web-money.


  1. Sergostan
    05.06.2025 14:44

    А сколько ещё таких монстроуозных проектов в работе? Играешь такой в онлайне против дамочки в солнцезащитных очках и шляпе, а на самом деле за ней стоят квантовые вычисления.


    1. YuraPlusEV
      05.06.2025 14:44

      Ой и не говори;₽


  1. Green__Hat
    05.06.2025 14:44

    По мелочи насшибаешь несколько стольников от силы, а потом казино таким же ботом вышибет и деньги заблочит


  1. Alfka
    05.06.2025 14:44

    А можно игру поменять ( оставляя психологию игры "Поккер" ) и как "легко" она может "поменяться"?


    1. sturex Автор
      05.06.2025 14:44

      Если вы говорите о карточной игре, то какие-то вспомогательные компоненты можно будет переиспользовать. Но специфическое придётся разрабатывать заново. Важно разобраться, можно ли перенести сам "подход".

      Скажите, что за игра, попробую ответить.