32

Лучшие покер-румы

Рейтинг Бонус Язык Кол-во отзывов
200% русский 13
200% русский 2
100% русский 18
100% русский 22
100% русский 12
200% русский 17
Рейтинг
Бонус 200%
Язык русский
Кол-во отзывов 13
Рейтинг
Бонус 200%
Язык русский
Кол-во отзывов 2
Рейтинг
Бонус 100%
Язык русский
Кол-во отзывов 18
Рейтинг
Бонус 100%
Язык русский
Кол-во отзывов 22
Рейтинг
Бонус 100%
Язык русский
Кол-во отзывов 12
Рейтинг
Бонус 200%
Язык русский
Кол-во отзывов 17

Натягиваем сетевые poker Room’ы: кодинг покер-бота — логика принятия решений

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

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

Всего в покере десять комбинаций: Существует много разных видов покера. Из Negotiator в Logic поступает информация о текущих действиях на столе. Из Logic в Negotiator — информация о своих действиях, которые нужно совершить сделать Fold, Call или Raise.

Из Negotiator в Statistics — информация о действиях игрока за столом для последующей обработки и хранения. Из Statistics в Logic — информация о статистических данных игроков. Как правило, во время каждого хода игрок может принять три решения: Есть еще All-in — когда денег для продолжения игры нет, и придется поставить все.

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

Мы будем использовать в принятии решений беспристрастную математику, а точнее — теорию вероятности. В реальной жизни она применяется в основном для расчета отказоустойчивости механизмов, но ее можно очень хорошо применять также в играх с неполной информацией и большим количеством раундов: В теории вероятности есть несколько парадоксов, которые не соотносятся с нашим жизненным опытом, но, тем не менее, являются правдой. Это, например, парадоксы Монти-Холла и Паррондо.

Формула принятия решений в покере чрезвычайно проста: BB Big Blind — размер большого блайнда. Стоит также добавить, что эта формула может использоваться только в компьютерной игре — в жизни за столом вряд ли будет возможность самому вычислять вероятность выигрыша и все это считать. Поэтому при реальной игре используется вычисление аутов outs и одсов odds. Из этой формулы мы получаем математическое ожидание выигрыша в нашей формуле это win. Иначе говоря, разыгрывая много раз игру с такой вероятностью с такими же картами у нас на руках и на столе и таким банком, мы получим такой выигрыш.

Следовательно, чтобы оставаться в плюсе, мы должны ставить не больше этого выигрыша на рисунке это bet1. Если поставим больше, то окажемся в минусе — выиграем меньше, чем будем ставить на рисунке это bet2. Стоит сделать замечание к формуле — так как покер-румы берут комиссию с каждого банка, то нужно размер банка уменьшить на величину этой комиссии. Формула с комиссией будет такова:. Если размер банка и размер ставки величины вполне известны, то как узнать вероятность выигрыша? На этот вопрос есть несколько ответов:.

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

Минусы — при малом числе раундов не очень точен, а большое число раундов требует больше ресурсов процессора. На данный момент можно найти множество библиотек для расчета вероятности выигрыша. Есть как бесплатные, так и платные версии. А мы изобретем свой велосипед. Чтобы разобраться в этом вопросе детальнее и из-за желания сделать полностью своего бота. Здесь я дам краткие пояснения к коду. Он написан на Java и снабжен документацией в виде JavaDoc, так что ты без труда сможешь разобраться в нем.

Собственно, у нас должно быть 10 функций по определению комбинации. Объединяет эти функции следующее — на входе подается набор карт, а на выходе — число от -1 до 12, где -1 — комбинация не найдена, от 0 до 12 — старшая карта в комбинации. Набор карт может быть любой длины — от 1 до 7. Это сделано для того, чтобы можно было легко рассчитать вероятности и в пре-флопе когда карты на стол еще не положили, но раздали карты игрокам , и в терне и ривере когда на стол положили четыре и пять карт соответственно.

То есть теперь нам нужно будет дать функции список всех карт, которые лежат на столе и у игрока, а функция из этого набора карт выделит комбинацию. Эти действия будет выполнять функция sortHand. Входной параметр — массив hand, в котором хранится список карт. Выходные параметры — массивы card достоинства карт , suite масти карт , suiteCount количество карт каждой масти. В первой части функции происходит простая сортировка заменой можно заменить ее на быструю сортировку.

Тут есть маленький нюанс — сортируются не сами карты, а их достоинства. Чтобы узнать достоинство карты, нужно узнать остаток от деления на После сортировки вычисляем достоинства карт массив card , масти карт массив suite и количество карт каждой масти массив suiteCount. Рассмотрим алгоритмы определения комбинаций код приводить не буду, так как он достаточно тривиален и его всегда можно найти на диске:. Ищем две одинаковые карты, идущие подряд, ищем еще две одинаковых карты и из двух достоинств этих карт возвращаем максимальное.

Подсчитываем, сколько карт подряд идет с убыванием достоинства. Если таких карт пять, то возвращаем достоинство старшей. Проверяем, чтобы было пять или более карт одной масти, и чтобы эти карты шли по порядку. Возвращаем достоинство старшей карты. Проверяем, чтобы в комбинации были Туз, Король, Дама, Валет, 10, 9 одной масти.

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

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

Карта записывается двумя латинскими символами. Первый символ — достоинство карты, второй — масть. Карты от 2 до 9 так и записываются. T — десять хотя иногда и просто 10 , J — валет, Q — дама, K — король, A — туз. Трефы — c, пики — s, бубны — d, червы — h. Как видно из кода, сначала функция складывает карты на руках и карты на столе в один массив, потом сортирует его, а далее по порядку определяет комбинации. Определение идет от сильнейшей комбинации флеш-рояль к слабейшей старшая карта.

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

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

Есть и радостная новость — все это уравнивается размером банка, поскольку он тоже будет больше. Если ты будешь использовать величину p в игре без учета размера банка, то ставь количество игроков равным 2, чтобы этот параметр не влиял на расчет. На этом я предлагаю на сегодня закруглиться, а если тебе не понравилось и ты не желаешь продолжения темы кодинга покерных ботов в следующих ][ — присылай свои отзывы мне и редактору рубрики alexander real.

Если ты, господин наш, читатель, изъявишь свое желание, то в следующем номере мы опишем несколько алгоритмов для принятия решений и сделаем симулятор игры в Texas Holdem No Limit Poker, в котором будут играть эти покерные алгоритмы. Рекомендую почитать в вики статьи о покере, теории вероятности и математическом ожидании, посетить pokerai.

По законам РФ и других государств создание и использование покер-ботов и ботов для других игр не запрещено. А по правилам всех известных мне покер-румов — запрещено. Если ты попался на использовании бота, то самое страшное, что тебе грозит — это бан аккаунта и списание с него всех средств. Никаких штрафов, повесток в суд, блокировки кредитки и т.

Но в какой программе писать код и куда его потом засунуть. Как связать с покер румом? Чтобы оставить мнение, нужно залогиниться. Двадцать лет назад использовать Android было невозможно. Десять лет назад было еще рано.

Плохо