Введение в теорию покерных ботов для чайников

в 11:56, , рубрики: bot, data mining, idea, Анализ и проектирование систем, искусственный интеллект, метки: , ,

Как выиграть в покер? Ответ нужно начать с уточнения, что в покер можно выиграть только в долгосрочной перспективе. Нет никакой легитимной возможности гарантированно выиграть отдельно взятую руку. И в дальнейшем, когда я буду говорить о победе, я буду иметь ввиду победу именно в долгосрочной перспективе (рост банкролла).

Независимо от того какое количество человек играет за одним столом, ваши шансы получить лучшую руку всегда равны шансам ваших противников. И если бы все игроки всегда доходили до шоудауна (открытие карт), то в долгосрочной перспективе все игроки одинаково бы выходили на нулевую прибыль.

Формула для любителей математики:
Profit = 0.5*pot — 0.5*pot = 0
(0.5 — шансы получить лучшую руку за столом с двумя игроками)
(pot — средний размер выигрышного банка)

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

Вот здесь появляется прибыль:
Profit = 0.5*Pot_win — 0.5*Pot_loose
Profit>0 если Pot_win>Pot_loose
(Pot_win, Pot_loose — средние размеры банка при выигрыше и при проигрыше соответственно)

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

В идеале у нас по каждому игроку должна сложиться таблица вероятностей «Дейсвтие — Рука». Грубо говоря если игрок имея два валета (JJ), 7 раз из 10-ти ставит 2 больших блайнда, то в следующий раз когда он делает ставку 2 больших блайнда, мы с вероятностью 70% можем предположить, что у него два валета или близкая по силе рука.

Для статистики важны все показатели:

  • размер ставки
  • время на принятие решения
  • позиция игрока
  • размер банкролла игрока
  • текущий раунд

Важно понимать, что не все игроки будут иметь надежные корреляции. И правильная оценка волатильности (изменчивости) игрока тоже важная часть задачи. Часть игроков будут на столько волатильны, непредсказуемы, что играть против них не имеет никакого смысла. Результат будет подобен игре в рулетку. Мы должны подбирать игроков, которые имеют корреляции высокой вероятности, и эти корреляции нужно постоянно проверять и уточнять.

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

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

Ну а дальше дело техники…

***

Дадим волю фантазии и подсчитаем потенциальную прибыль от успешной игры на примере онлайн покер-рума PokerStars.
(средние показатели покер-рума подсчитаны автором лично)

Средняя скорость игры = 75 рук в час
Желаемая продолжительность игры = 8 часов в день
Итак, в день мы можем сыграть = 8*75 = 600 рук

Средний банк за столом = $30
Эмпирически, зная своих противников, можно максимизировать/минимизировать банк примерно на 30%.
Это даёт нам следующие значения для выигрышного и проигрышного банка.
Средний выигранный нами банк = $30*1.3 = $39
Средний проигранный нами банк = $30*0.7 = $21

Среднее количество игроков за столом = 5 игроков
Шансы получить и не получить лучшую руку равны 1 / 5 (к-во игроков за столом):
Pwin = 0.2 (20%)
Ploose = 0.8 (80%)

Средняя прибыль от выигранного банка = $39-($39/5) = $31.2
Средний убыток от проигранного банка = $21/5 = $4.2
Прибыль = Pwin * к-во рук * средняя прибыль — Ploose * к-во рук * средний убыток
= 0.2 * 600 * $31.2 — 0.8 * 600 * $4.2
= $3744 — $2016
= $1728 (ЕЖЕДНЕВНО)

Звучит не плохо.

***

Кто заинтересовался темой, пишите в личку. Нужны партнеры.

Автор: dmitry_titov

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js