Dronov.net

Lean poker

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

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

  • Что-то прямо законченное и готовое к конкуренции в реальном мире за день-два сделать не успеешь. Да и опять же в реальном мире надо же наруливать каналы продаж и прочей стартапной фигней заниматься, которая у программистов вызывает приступы зевоты. Как-то прокачать навыки разработки тоже не выходит. Качество кода? Не смешите мои тапочки!
  • Для тех кто хочет научиться чему-то новому, придумали воркшопы. Это когда какой-то эксперт(или не очень) рассказывает и показывает чего делать, а остальные повторяют. Воркшопы обычно платные. И конечно не такие бодрые как хакатоны.

Источник

В прошлое воскресенье 24 апреля мы (команда Рестрим) совместно с компанией Gitlab и Иваном проводили первый Lean poker в Ульяновске. Признаться, из-за того, что в покер я особо не играл, решение посетить такой ивент я принял ровно за полчаса до начала. И это стоило того, тысяча чертей!

Итак, поехали.

Из слова 'poker' в названии становится понятно, чем участники будут заниматься. Вкратце — писать ботов, которые будут рубиться в покер друг с другом. Всё по правилам Техасского холдэма. Участники разбиваются по командам, берут какой-нибудь один язык программирования и фигачат, фигачат, фигачат до тех пор, пока не не кончатся часовые итерации и не объявится победитель.

Каждой команде необходимо зарегистрироваться на ресурсе, после чего в гитхабе капитана команды появляется репка. Репка с минимальным скелетом приложения деплоится на heroku, запускается веб-сервер. К примеру, на Ruby это Sinatra. Сервачок отвечает по нескольким урлам типа "сделать ставку", "вскрыть карты".

Вот в целом и весь механизм работы команд. К вам приходит некий game state, в котором видно игроков за столом, дилера, карты на столе. Вы всё это анализируете и принимаете решение о ставках, либо спасовать, либо ещё что. В первые часовые итерации каждые 20 секунд запускается турнир, в котором играют боты. Занявший первое место бот получает 5 очков в каждой игре, второе — 3.

Визуально всё это выглядит примерно так: графики, статистика игр, фотки.

График

Человеки

По совету и под управлением Максима мы (команда POXEP) старались придерживаться некоторых покерных стратегий игры. В инфраструктуре Lean poker также существует замечательная API, куда передав карты руки и на столе можно получить rating комбинаций карт. Ну и, в зависимости от вашей хватки, покерного опыта и пр. решать, как реагировать боту в определённых ситуациях.

примеры стратегий

К чему я пришёл
  • 4 часа (в нашем случае было 5) — наиболее ценный и, к сожалению, ограниченный ресурс. Поэтому важно в команде иметь человека, который будет вести основную логику игры бота и следить за тем как играет бот и соперники. И сразу же корректировать работу команды, внося правки в существующую функциональность бота.
  • В принципе, в условиях ограниченного времени можно забыть про большинство паттернов проектирования, кодревью итд. Некогда. Совсем некогда.
  • Но не стоит забывать про минимальную чистоту и читаемость кода. Наш бот не играл две итерации (два часа!) только потому, что мы как-то профукали наличие return в нескольких if-конструкциях. Бот не играл, в логах было чисто, очки проигрывались. Максим за один подход свежим взглядом увидел эту досадную ошибку. Опять же повторюсь, время тут очень важно.
  • Деплоиться лучше реже. Дело в том, что пока вы деплоите приложение, ваш бот может некоторое время пропускать турнир(ы). Четкое время простоя как-то не получилось замерить.
  • К концу итераций мы вообще писали код за одним ноутбуком. Может быть, в будущем, стоит сделать также с самого начала.
  • Забудьте про новомодные Machine Learning и Big Data. Времени нет, скоро рассвет.
  • Не стоит использовать готовые накрученные библиотеки для игры в покер. Как минимум, теряется атмосфера fair play. У нас был один такой прецендент, но всё же, постарайтесь свести использование сторонних библиотек к минимуму.
Интересные факты
  • Популярность используемых языков программирования зачастую зависит от региона и компании-хостера мероприятия. В нашем случае, 3 из 7 команд писали бота на Ruby, по одной команде использовали Go, NodeJS, C++ и C# (Mono).
  • Очень частый кейс был играть на двух парах. Несколько команд в основном ориентировались на этот случай.
  • Рандом — решает. Или не решает. Всё также зависит от случая, когда боты учатся all-in'ить, повышать ставки, вам придётся тяжеловато. В целом, тренд такого бота нисходящий.
  • Интересная мысль, которая пришла к нам после покера — прикольно было бы выстраивать стратегии игры против конкретных противников. Опять же, для этого нужен опытный в покере коллега, который будет постоянно мониторить игры, смотреть кто как и на чём делает ставки, в какой момент сливает и т.п.
  • Опять же, любая классная стратегия игры может упасть лицом в асфальт из-за вышеобозначенных рандомщиков.

Графики, темпы и результаты Lean Poker можно посмотреть здесь.

Огромное спасибо лично Андрею Субботе и Ивану Немытченко за проведённое мероприятие!

участники

Фотографии Андрея Субботы и Ивана Немытченко