Code Monkey home page Code Monkey logo

holdem-challenge's Introduction

Sberbank Holdem Challenge

Описание игры

Игра, в которую необходимо будет играть ботам — наиболее популярная разновидность покера, Безлимитный Техасский Холдем (No-limit Texas Hold’em).

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

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

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

Программирование стратегий

Документация по подготовке ботов к отправке в систему

Симуляция игры в покер происходит при помощи библиотеки PyPokerEngine.

Пример простого бота на языке Python, который каждый раз совершает операцию CALL:

from pypokerengine.players import BasePokerPlayer

class FishPlayer(BasePokerPlayer):

    def declare_action(self, valid_actions, hole_card, round_state):
        call_action_info = valid_actions[1]
        action, amount = call_action_info["action"], call_action_info["amount"]
        return action, amount

    def receive_game_start_message(self, game_info):
        pass

    def receive_round_start_message(self, round_count, hole_card, seats):
        pass

    def receive_street_start_message(self, street, round_state):
        pass

    def receive_game_update_message(self, action, round_state):
        pass

    def receive_round_result_message(self, winners, hand_info, round_state):
        pass

Бот представляет собой объект, в котором реализованы методы-обработчики игровых событий и метод выбора действия в момент хода бота declare_action. Подробнее про реализацию игровых стратегий можно прочитать в документации к библиотеке.

Разработка игровых стратегий доступна не только на языке Python, и может быть осуществлена на любом другом языке программирования. Описание API и руководство по созданию ботов читайте в руководстве по подготовке ботов.

Отборочный этап хакатона

Для участия в отборочном этапе хакатона, необходимо реализовать и отправить в тестирующую систему архив с кодом своей стратегии. Информация о формате отправки будет доступна 1 сентября.

Ежедневно в 00:00 MSK проводится турнир между всеми отправленными в систему ботами. Если участник отправил несколько агентов, то учитывается только его последнее решение.

Во время турнира каждый бот играет 30 игр со случайными соперниками — ботами других участников. Таблица результатов строится по убыванию средней суммы оставшихся фишек у бота по итогам всех игр за турнир.

В турнирной игре принимают участие ровно 9 ботов. Максимальное число раундов — 50. В начале игры каждый бот получает 1500 фишек, размер малого блайнда — 15.

Это соответствует следующим параметрам раунда в PyPokerEngine:

config = setup_config(max_round=50, initial_stack=1500, small_blind_amount=15)

Анализ реплеев игр

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

Пример файла с реплеем игры: example_game_replay.json.

Реплеи игры записываются в виде JSON-объекта с полями:

  • rule: параметры игры
  • seats: информация о ботах, в частности для каждого бота указано его имя name — это имя соответствует участнику, отправившему бота
  • rounds: список всех раундов с указанием действий, совершенных ботами

Подходы к созданию стратегий

Существует несколько подходов в разработке стратегий для покерных роботов.

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

Более эффективной является эксплуатационная стратегия, которая разделяет оппонентов на кластеры и против каждого кластера реализуется контр-стратегия. Большинство хороших игроков в покер используют именно такой подход. Но, в отличие от человека, у компьютера есть преимущество в том, что он может перебрать огромное кол-во исходов игры и при правильном прогнозировании поведения соперников принять максимально выгодное решение с точки зрения математического ожидания. Для прогнозирования поведения оппонентов в таком случае может хорошо помочь сбор статистики игр в прошлых матчах и реализация алгоритмов машинного обучения. Правда, перебрать все возможные исходы событий в большинстве игровых ситуаций не получится даже у мощных компьютеров, поэтому нужно использовать алгоритмы оптимизации, к примеру Monte Carlo Tree Search.

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

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

holdem-challenge's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

holdem-challenge's Issues

Формат отправки

Не могу найти формат отправки. Не подскажите?

В видео было озвучено, что это докер-контейнер или зип-архив. С зип-архивом понятно.

А как посылать свой докер-контейнер(своё окружение) в систему?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.