Я делал этот проект более полутора лет, сейчас отказываюсь от него. И, чтобы эти полтора года не были прожиты зря) открываю исходники. Java+Spring.
Принимайте проект «как есть», со всеми ad-hoc костылями, незаконченными исследованиями, TODOs, а также всевозможными KISS, DRY, и, как их… SOLID с GoF.
Предполагается, что вы знакомы с покером, имеете неплохие навыки программирования, поверхностно разбираетесь в теории игр.
Что представляет собой Продукт
Это конструктор покерных ботов. Что-то вроде no-code платформы. Вы собираете стратегию как пазл из кусочков. Всего пазлов около 3500. Пазлы «двойные» – вы можете настроить частоты как по типам действий, так и размерам ставок.
Срины с фронта



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

Третьим типом пазлов является игра по контрстратегии. Мне не удалось до конца отточить контрстратегию, поэтому вариант пока не поддержан. Построение контрстратегии является крайне сложным с точки кодинга и очень затратно с точки зрения вычислений. В последнее время я работал над классом GameTreeGenerator, который строит покерное дерево исходя из собранной статистики на оппонента. Требует существенных доработок.
Что представляет собой Приложение
Технически, это Java+Spring приложение, с одним GraphQL контроллером. Через контроллер создаются датасеты и боты, конфигурируются стратегии ботов, запрашиваются подсказки.
Ключевые компоненты
Класс HoldemHandStrengthCalculator умеет считать винрейты для заданных ренжей игроков.
Пакет engine содержит абстракции покерной раздачи, игрока. Особое внимание на класс PokerEngine – это конечно-автоматная логика определения ситуации в покерной раздаче.
Пакет holding содержит описатели руки героя. Описатели рассчитываются в HoldingEvaluator. Описатели являются ключевыми факторами принятия решения в раздаче и формируют существенную часть в общем наборе фичей.
Пакет spark, а, конкретно, PipelineUtils, умеет строить ML модели – деревья принятия решений.
Инстансы класса Solution и есть стратегия бота, оформленная в виде справочника с ключами в виде спота и значениями типа Advisor. Spot – это, своего рода, расширение покерной ситуации, в которую добавлены сведения о руке героя или текущем стеке. Advisor – это интерфейс для пазлов, принимающих решение в конкретном споте.
Важный сервис – selfplay. Он предоставляет возможность сыграть созданными стратегиями между собой и выгрузить текстовые хенд-хистори в clickhouse, откуда потом они могут быть импортированы в сторонние средства анализа игры.
Всем удачи!
Комментарии (17)
Sergostan
05.06.2025 14:44А сколько ещё таких монстроуозных проектов в работе? Играешь такой в онлайне против дамочки в солнцезащитных очках и шляпе, а на самом деле за ней стоят квантовые вычисления.
Green__Hat
05.06.2025 14:44По мелочи насшибаешь несколько стольников от силы, а потом казино таким же ботом вышибет и деньги заблочит
Alfka
05.06.2025 14:44А можно игру поменять ( оставляя психологию игры "Поккер" ) и как "легко" она может "поменяться"?
sturex Автор
05.06.2025 14:44Если вы говорите о карточной игре, то какие-то вспомогательные компоненты можно будет переиспользовать. Но специфическое придётся разрабатывать заново. Важно разобраться, можно ли перенести сам "подход".
Скажите, что за игра, попробую ответить.
wanomgn
расскажи больше. пожалуйста.
для чего? как успехи? какой шанс "поднять бабло" ;)
sturex Автор
для чего? - поднять бабло)
как успехи? - пока никаких. Разве что, полученная экспертиза - она довольно ценна.
какой шанс? - ненулевой, но близко к нулю. Один не справишься. Крайне сложный проект.
wanomgn
1 да это понятно ;))
2 почему? такие красивые схемы.. ну всяко же должно что то получится
3 все напрасно? понимаю что так.. но не хочется верить.. ;((
sturex Автор
Пытаться сделать бота для покера - это всё равно, что охотиться за килькой, находясь в желудке у акулы. Кильку ты будешь ловить весьма успешно...
rettsu
Интересно. Забрал, посмотрю.
Все это нужно допилить, а дальше делать не бота, а анализ входящей информации, расчет действий с учётом ситуации на борде, позиции, ставок, стадии турнира (если играем в MTT). Можно играть через телефон, выводя картинку на экран монитора (USB-OTG или через вафлю - как удобнее, задержки нет). Софт смотрит что происходит, анализирует, подсказывает. Человек делает действия самостоятельно (это безопаснее). Если совсем углубиться в анализ, можно внести статистику на каждого игрока (какое ставки делал, с какой позиции, типа игрока - все как у взрослых, а-ля Holdem Indicator). Ну а если мощностей достаточно (и голова варит) - чем черт не шутит, можно попробовать и по GTO поиграть. В общем, тут есть куда двигаться. Но конкуренция большая, это да.
YuraPlusEV
Позиции , эффективные стеки , борды и многое другое , как я понял уже зашито в фичи моделей. Поэтому стадии турнира уже по сути учтены.
sansanhz
Это называется "подсказчик" за него банят точно так же, как и "самостоятельного" бота, т.к. стратегии таких подсказчиков/ботов слишком отличаются от человека - они легко идентифицируются.
YuraPlusEV
Это очень громкое заявление которое не соответствует действительности, если конечно вы не играете одной и той же логикой на 10+ аккаунтах с TTL от ~10к раздач в одном руме. Вполне себе решается ротацией. А в приведенном коде из статьи есть возможность создавать именно разную логику для каждого инстенса. Так что тут мимо.
teetet
На самом деле это не нужно. Я получил бан на Покерестарз за использование даже не запрещённого, а "не рекомендованного" софта. Ботов и запрещенный софт они вычисляют быстро по каким-то своим технологиям. А фишка в том, что на покере можно зарабатывать и без всякого специального софта- просто гриндить низкие лимиты, как это делают реги. Они шатают целыми днями кучу столов, зарабатывая ну может 10-30 баксов в день. Стоит оно того? Чтобы зарабатывать больше, никакой софт тоже не поможет. Нужно уметь играть, а для этого нужно учиться.
SensDj
я в детстве начитался про рулетку, сделал приложение где сначала вручную проверял разные стратегии, потом в автоматическом режиме. А потом из онлайн-казино пропал контроль честности и я не стал нигде пробовать играть (это был такой файл в архиве под паролем, после серии игр давали пароль и можно было убедиться что в рулетке выпадали именно эти числа). В общем на длинной дистанции может выпасть даже 20 "красное" подряд. Так что и с мартингейлом проиграешь. Самый оптимальный вариант - играть один раз в жизни до первого выигрыша и больше не играть. Только так есть шанс гарантированно остаться в плюсе.
charypopper
Изобрели мартингейл?)
aspid-crazy
Ха, кажется это распространенная ачивка:)
Изобретение обошлось мне в 10$, изъятых со студенческих обедов. Во времена, когда в ларьках продавались карточки для пополнения web-money.