Оптимальный алгоритм определения готовой комбинации и расчета шансов в покере #530070


#0 by izekia
почему-то никак не могу найти идею для оптимального расчета: Если взять готовую руку, к примеру холдем, на ривере, то есть на столе лежат все пять карт, возможных комбинаций: 1 (без карманных карт) + 5х2 (с одной карманной картой) + 10 (с двумя карманными картами) = 21 в принципе 21 комбинацию можно просчитать перебором, но возьмем, к примеру омаху, где карманных карт четыре, а в комбинации участвуют две и только две соответственно комбинаций: 6 (комбинаций карманных карт) х 10 (комбинаций карт доски) = 60 уже практически в три раза больше, но для определения готовой руки, в принципе тоже можно использовать перебор Теперь если взять ситуацию, когда на столе лежат 4 карты из 5ти и нам известны 4 наших карманных карты и 4 карты оппонента, чтобы определить наши шансы на победу, нам перебором нужно будет проверить 60 х 40 = 2400 комбинаций, это достаточно много В такой ситуации оптимальнее определить готовую старшую комбинацию и соответственно карты, которые помогут младшей руке и не усилят старшую руку до натса(лучшей комбинации). С одной картой такой алгоритм выглядит простым, но если взять две карты, то уже становится сложнее, не говоря уже про подсчеты шансов одной руки против другой, когда на столе нет ни одной карты, то есть префлоп. Это один момент. Второй, это то, что мне кажется не совсем оптимальным перебирать комбинации по пять карт, как мне кажется должен существовать оптимальный алгоритм подбора пяти карт составляющих лучшую комбинацию из ограниченного набора карт. Собственно такие мысли ... может кто-то подскажет какую-то идею, или хотя бы ссылку ...
#1 by IamAlexy
расскажи как стать миллионером?
#2 by Molinor
Хочешь покерного бота написать?
#3 by Рэйв
Не изобретай велосипед "Хрен ли думать?! Все давно уже придумано!"(С) Хазанов
#4 by izekia
да нет, некий софт, пока под себя ботов куча
#5 by izekia
я знаю математику покера те примеры, которые можно найти по ссылкам достаточно простые то есть по ним можно посчитать приблизительные шансы
#6 by Рэйв
А точные шансы ты и не посчитаешь
#7 by izekia
почему не посчитаю? количество карт в колоде известно, перспективы моей руки известны даже если оставить шансы в стороне и взять второй момент, как оптимизировать поиск лучшей комбинации из ограниченного набора карт?
#8 by Рэйв
Лучшие комбинации по столу и так видно хорошо. Если лезет флэш или стрит - уж не спутаешь.
#9 by izekia
у тебя есть 7 карт, опиши алгоритм, как ты определишь, что у тебя стрит?
#10 by Рэйв
1. Сортировка по возрастанию номинала. 2. перебор с сравнением с предыдущей картой. 3.Если разница с предыдущей больше 1 номинала- значит не стрит - прерывание. Если дошли до конца без прерывания- значит стрит
#11 by acsent
Вероятность то как раз можно ТОЧНО подсчитать
#12 by Рэйв
Ну, я имел ввиду наверное вероятность что ты выиграешь
#13 by izekia
об этом и речь, я же привел пример с открытыми картами
#14 by izekia
пример руки где твой алгоритм не работает 245678Т
#15 by Рэйв
Это частный случай. Можно исключить его простым поиском туза и двойки. Если есть то тузу присваивается низший приоритет
#16 by Molinor
Просто надо смотреть комбинации, начиная с первой, второй и третей карты. Проблема, когда стрит начинается с А. Например 234589А
#17 by izekia
A2TJKQ
#18 by Рэйв
Ставишь счетчик сколько карт прошло подряд, если следующая не попорядку скидываешь в 0. Если после пребеора счетик = 5 или выше- значит стрит
#19 by Рэйв
см
#20 by Molinor
см
#21 by Рэйв
см :-)
#22 by luns
туза "делим" на две карты с номиналом 1 и 14 соответственно (для стрита) тока непонятно зачем тебе это? без размеров стэков, банка, нет смысла считать шансы.
#23 by Рэйв
+  если с низким тузом недостигая 5 вышел сброс счетчика тузу возвращается высший приоритет
#24 by izekia
все остальное считается просто, меня интересует именно этот алгоритм
#25 by Рэйв
До шансов еще далеко:)  он учится комбинации пока определять алгомитрически
#26 by Molinor
, Да это понятно, реализовать можно, просто придираюсь, ничего личного. :)
#27 by izekia
да туза можно за две карты считать, с этим как раз никаких проблем, чем лишние костыли в коде
#28 by Рэйв
Ну тогда больше вроде подводных камней нет:)
#29 by NS
Нормальный перебор перебирает миллионы возможных раскладов в секунду.
#30 by Рэйв
Зачем нам возможные?  Нам нужна конфетка:-)
#31 by NS
Вообще клавиша "Я" в углу находит всё что нужно.
#32 by NS
Не нужна :)
#33 by Рэйв
Да ладно! :-)  Она всем нужна
#34 by izekia
получается делаем два словаря в одном ключами являются величины карт в другом их масти в качестве значений выступает количество вхождений по размерам словарей уже можно будет сделать определенные выводы, анализировать их или отбрасывать
#35 by izekia
слушай, а если попробовать оба варианта и сравнить насколько выгодна будет оптимизация?
#36 by izekia
да, кстати, ты прав нашлась интересная тема, на асме)
#37 by NS
У WildCat (Дикая Кошка) есть очень быстрый алгоритм оценки рук на Си - если попросить наверно даст :) Я где-то выкладывал свой на Делфи, но скорость особо не оптимизировал.
#38 by NS
Кстати, в последних постах там написан действительно самый быстрый алгоритм - предрасчитанный массив. И нам остается только вычислить порядковый номер сочетания - он считается достаточно просто.
#39 by izekia
предрасчитанный массив, с готовыми руками действительно все тогда просто будет вот еще ссылку нашел
#40 by izekia
а WildCat с этого форума или с цгм?
#41 by NS
WildCat-а можно нати либо на нешем форуме Либо в тематическом обсуждении на GameDev
#42 by izekia
спасибо
#43 by izekia
за ссылку отдельное спасибо, интересное обсуждение
#44 by izekia
а чем проект закончился?
#45 by NS
Успешным выступлением на AAAI (чемпионат мира среди покерных программ) Последняя колонка - количество выигранных денег (в среднем) - бот Игоря (WildCat-а) - Gomel по выигранным деньгам оказался сильнейшим в мире в безлимит (среди всего состава, и если смотреть результат только по ТОП9).
#46 by izekia
да, действительно перебором все решается, пока на текущий момент написал тест на питоне, неоптимально, но результаты, в принципе неплохие, теперь необходимо переписать на чем-то более быстром + оптимизация
#47 by izekia
поиграл с блаффботом, есть явные лики в алгоритме даже интересно стало написать своего)
#48 by NS
Для написание своего - нашел сервак и примеры ботов?
#49 by izekia
ну в теме вроде были ссылки на сервер и апи от него до этого пока все равно далеко, меня пока интересует написание базовых модулей, которые можно было бы использовать в своих утилитах
#50 by izekia
у меня есть примеры реально играющих ботов, даже с неким подобием языка, на котором описывается алгоритм игры бота но я даже с ними не успел разобраться, а вообще тема интересная
#51 by izekia
да, как-то сразу не подумал о маске, можно все интереснее сделать
#52 by izekia
а сервер отсюда не пробовали брать? я сейчас в свободное время изучаю библиотеку poker eval проблема в том, что я с С знаком очень плохо выручает то что писал когда-то на асме)
#53 by Snovy
Не так. Правильно так говорить - смотри типовые, там все есть... :)
#54 by izekia
в общем параллельно добрался до этого списка не думаю, что есть смысл изобретать велосипед, материала очень много, есть смысл изучить готовые алгоритмы для общего понимания и определения и двигаться дальше
#55 by NS
Зачем? Сервер есть AAAI-шный. Работает через сокеты.
#56 by izekia
тот сервер, как я понял, ограничен только Холдемом и определенными условиями игры + здесь еще прикручены интерфейсы типа или я функциональности того сервера до конца не знаю?
#57 by NS
Да, ограничен холдемом, а ты что сразу всё хочешь писать? Игры то разные, и играть на сервере Бот в Омаху с ботом в Холдем ну никак не сможет.
#58 by izekia
омаха - это моя специализация + пока бот только в планах есть много неплохого софта, который хотелось бы реализовать
#59 by NS
Если хочешь писать омаху - то AAAI пролетает, ибо они проводят чемпионат только по Холдему. При чемпионаты среди программ в Омаху не слышал, поэтому лично для меня Омаха интереса не представляет.
#60 by izekia
в любом случае пока про бота говорить рано если интересно, можно позже вернуться к этой теме, интересно было бы попробовать.
Тэги: Математика и алгоритмы
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С