- BrainTools - https://www.braintools.ru -
Я делал этот проект более полутора лет, сейчас отказываюсь от него. И, чтобы эти полтора года не были прожиты зря) открываю исходники. Java+Spring.
Принимайте проект «как есть», со всеми ad-hoc костылями, незаконченными исследованиями, TODOs, а также всевозможными KISS, DRY, и, как их… SOLID с GoF.
Предполагается, что вы знакомы с покером, имеете неплохие навыки программирования, поверхностно разбираетесь в теории игр.
Это конструктор покерных ботов. Что-то вроде no-code платформы. Вы собираете стратегию как паззл из кусочков. Всего паззлов около 3500. Паззлы «двойные» – вы можете настроить частоты как по типам действий, так и размерам ставок.
Альтернативно ручному конфигурированию, есть возможность использовать 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
Нажмите здесь для печати.