Pull to refresh

Comments 74

Ничего конкретного в статье нет. Ни общего описания алгоритма игры (самое интересное), ни даже ссылок на функции WinAPI, которыми пользовались. Исходников тоже нет. Вобщем, вода.
В статье есть увлекательный рассказ об остроумии человека, который не знал, как можно сделать по-нормальному :)
А что вы хотели, студент так и должен учится.
Самое смешное, что даже студенты недоучки, для который winapi это было открытие, могут написать бота. А вот как сделать, чтобы не заполиться на больших суммах — это уже к профи.
Так а что его писать. Там то делов, перехватить пару переменных и на одну из 3-х кнопок нажать. Другое дело, что эти большие суммы еще надо чтобы он выигрывал, а это уже посложнее. И вряд ли об этом будут статьи.
Я видел отчеты PokerStars или еще кого-то о поимке ботов. Ищут их не по поведению с покер румом, а по их игре. Как они меняют лимиты, как зарабатывают. Бота трудно спрятать даже профи =(
А зачем палиться на больших суммах? Пусть робот играет в ноль, а вы зарабатывайте на рейкбеке.
Заливай исходники на гитхаб! ;-)
Не очень. Про стратегию так почти вообще не слова, а она — самое главное при разработке бота. Чат/окна/кнопки нажимать это все можно за пару дней-недель, в зависимости от сложности клиента накидать. А вот выигрышная стратегия — много сложнее.
Кстати, я бы делал перехват информации с помощью инъекции Dll. Тот же FullTilt покер написан на Qt, и перехватывая вызовы qt библиотек, можно вертеть им как угодно. А то Winapi, хуки… Мороки больше, а результат то же, если не хуже.
А еще вроде как покеррумы контролируют это все дело (хотя я никогда с таким бесчинством с их стороны не сталкивался). Хотя об этом, наверное, стоит уже задумываться когда бот в плюс начнет играть.
Вот цитата:
"
Однажды сидя ночью, я зашел в папку с файлами софта PokerStrategy.com (Equiliator, ICM Trainer) и обнаружил, что они написаны на .Net. Это меня несказанно обрадовало и последующие 2 дня я потратил, чтобы запустить этот софт у себя под дебагом, но в итоге мы могли полностью смотреть как использовать библиотеки этой компании и успешно научились ими пользоваться.
"
Этого мало?
Более чем достаточно! Можно даже в отдельную статью вынести, а то и на две разбить.
Ну значит буду ждать вашу статью!
А чего ждать-то? Я и сейчас могу рассказать.
Лучшая стратегия игры в покер — не играть в покер!
Не играть в покер — это стабильно играть в ноль :)
А Вы в лонгране в покер больше и не выиграете.
Вздор. Покер — это игра, где мат ожидание зависит от умения игрока. Играя с более слабыми игроками на длинной дистанции вы будите в плюсе.
а слабые игроки наверное часто встречаются на маленьких лимитах. таким образом если бот будет сидеть на маленьких лимитах можно по копеечке в плюс играть. да еще рэйкбэк
На чем написан клиент покер-рума? Почему просто не перехватывать входящие и исходящие соединения, например через локальный самописный прокси сервер? Идет ли шифрование или хеширование передаваемых данных? Файлы PokerStrategy были обфусцированны или вы просто забыли про Reflector? Все что здесь описано на определенном этапе проделывали все кто интересовался управлением чужими программами, и это на самом деле наименее интересная часть в покер боте. Про логику расскажите подробнее.
На с++ с мфц (когда последний раз его видел). Во всех покеррумах (которые попадались) передаваемые данные шифруются. Здесь для шифрования использовалась (и используется, наверное) отдельная dll, вызовы к которой несложно перехватить.
Я тоже считал, что рефлектор — это панацея)))) увы
Когда необходимо запустить сколько-нибудь сложное приложение после рефлектора в дебаге начинаются проблемы:
1. Он не умеет именовать private переменные — следовательно будет куча конфликтов методов и переменных с именами типа «a» и «aa», причем так будут названы и методы и переменные.
2. Ресурсы. Рефлектора не умеет их обратно корректно вернуть — необходимо ручками лезть и доставать куда надо.
Требуется время чтобы это все привести в порядок и заставить работать, после чего поправить ошибки, которые определенно возникнут в ходе работы. Рефакторинг в такой случае увы не работает нормально.

По стратегии я что уже написал. С радостью отвечу на конкретные вопросы.
Что такое ICM модель и что такое «стартовые таблицы для игры в турниры с сайта pokerstrategy.com»? Вы использовали какую-то модель игры, которую предлагает этот сайт?
Сайт PokerStrategy — это пожалуй крупнейшая международная школа покера, где куча контента для учащихся, проводятся тренировки и раздают разные плюшки за игру под их рефералом в различных покер румах.
Для самых начинающих на сайте предлагаются таблицы, по котрым можно играть. Таблицы описывают в какой ситуации как себя вести.
ICM — это модель по которой принимаются решения об оллине или фолде на позних стадиях игры. ICM — это ничто иное как большой сгусток математики, при расчете ICM учитывается куча факторов. Мы находили формулы, но поняли, что не осилить — там все реально трудно. Играть в турниры без ICM — это утопия.
Теперь о стратегии.
Как я уже и писал изначально были таблицы. На самом деле если кто-то учился играть в покер на PokerStrategy обязательно их использовал.
Со временем мы пришли к выводу, что нам нужна математика, и до этого дойдет любой, кто будет писать бота. А именно необходим эквилятор (штука которая зная ваши карты и количество игроков за столом высчитает в каком процента случаев победителем будете Вы) и необходим расчет ICM модели.
Имея две такие мощные штуки стратегия очевидна — в средней и ранней стадии турнира используем эквилятор для расчета наших шансов в конкретной ситуации и в зависимости от подобранных опытным путем значений принимает решения.
В поздней стадии по ICM принимает решения об оллин или фолд.
А учите под какую разновидность? Турниры? SNG? Холдем? Лимит?
А почему анлим? Говорят же вроде что лимит лучше просчитывается?
Анлим турниры играет больше людей, а с турнирами понятней стратегия (в турбо турнирах вообще рай для ботов). Плюс ко второй итерации мой сосед и я пристрастились к игре именно в этот вид покера.
рай для ботов, если там нет злых регуляров (хотя на микролимитах их мало, в смысле злых)

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

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

Регуляры.
В идеале у бота на регуляра статистика и если регуляр начинает начинает у нас отбирать прибыль — значит он начинает играть лузовее против обычно тайтового бота, значит против конкретно этого игрока расширяется спектр рук и игра становится агресивнее со стороны бота.

Подстройка под ICM.
Речь о подстройке под ICM все таки идет с достаточно больших лимитов, куда бота так просто не закинуть.

По поводу прибыли.
Тут важно понимать, что бот, который играет в 0 — это уже прибыльный бот. Он может жить за счет рейка, давая разработчикам некоторые финансы на продолжение своей разработки. Причем рейк может быть не маленьким даже при игре на небольших лимитов за счет игры очень большого количества турниров.
И еще по хэдсап.
Когда уже сосвем мало блайндов — использовали SAGE.
когда совсем мало блайндов, работает ицм — который говорит, что надо закрыть глаза и пушить любые две (ну почти любые две, но там очень там очень тонкая грань).

Какая у вас статистика выграных хедсапов?

Кстати распределение по занятым местам тоже интересно.
Специально для хэдсап и когда совсем мало блайндов у обоих(меньше 13 на двоих, вроде) есть SAGE, который говорит делать пуш или фолд.
Статистики никакой нет, мы ее особо не вели. Точнее вели, но на листочках бумаги и после каждой сессии заводили новый листик.
т.е. вы начали писать бота без понимания покерной математики. Да, сейдж просто запрограммировать, но он неподстраиваемый и дает возможность оппоненту заиметь на вас до 20% еджа (преимущества)? Что если переводить в доход 5% ROI?

У вас нет статистики? Это вообще эпик фейл (Кстати, открою секрет — статистику можно посчитать в сторонней программе, типа холдем менеджер, да и бесплатные приблуды можно найти)

Кстати, отсутствие в вашей статье пруфов в виде хотя бы скриншотов, не говоря уже о примерах кода или записанного видео меня начинает наводить на какие-то грустные мысли.
я вот могу дать пруф — sharkscope.com — рум FTP, ник тот же, фильтр по SNG турнирам (МТТ я таки играл в минус потому что больше нравилось их играть, чем заниматься рассчётами)

Там не особо радостная серия из 6000 игр, после которой резкий взлёт на протяжении 4000 игр (когда я стал разбираться с математикой, проводить анализы игр и той же статистики, думать на каких ошибках оппонетах можно урвать ещё центик).

потом небольшое падение на фоне усталости, когда решил завязать с покером и уже падение, когда стал относиться к покеру не как к работе (иначе там денег не подымешь — халявы в покере нет), а как к развлечению (за развлечение надо платить).
и самое главное забыл — в 25% случаев вы приходите в ХА (игру на двоих за первое место) с общими эффективными стеками больше чем 13ББ и даже больше чем ИСМ(20-26ББ). И что вы собираетесь делать там — отдавать блайнды? )
Там все по чистому эквити. На момент окончания развития эквити считалось против рандомных игроков (и да, я знаю что это ужасно и просто непростительно =( ), но тем не менее это давало какие-то результаты.
Я бы с радость привел скриншоты. Но увы. Это история о проекте, который уже длительное время не развивается =(.
Без статистики ICM мертва. Деньги в снг делаются на подстройке ICM к конкретным игрокам.

Для непокерюг, ICM модель это расчёт прибыльности ставки ва-банк в зависимости оттого какие у вас карты, сколько у вас фишек и сколько фишек у ваших противников.

Расчитывается математическое ожидание того, что ваши противники сбросят и вы заберете блайнды *, математическое ожидание того, что у противника окажутся хорошие (хорошие по его мнению карты — спектр) и он «закроет» ваш оллин и ваши шансы на выигрыш против его спектра. Если мат ожидание (в эквиваленте выигранных фишек) больше скорости «съедания» ваших фишек блайндами, то надо идти ва-банк. Меньше — сидеть ровно и не лезть в зарубу

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

Звучит как сарказм. Найденные вами решения? Где я могу их посмотреть? Как мне помогут решения о которых вы ничего не рассказали?
Из решений реально будут полезны:
1. Можно получить текст или html разметку из объекта класса Internet Explorer_Server.
2. На первых парах можно не писать свой эквилятор, библиотеку можно временно взять попользоваться
3. На первых парах можно не писать рассчет ICM, библиотеку можно временно взять попользоваться

2 и3 задачи здорово сохраняют время и ускоряют получение нулевого бота, что очень важно для духа команды.
Покажите же код! Я думаю это единственное что интересует большую часть людей которые заходят в пост!
Определять цвет точки и высчитывать координаты кнопки — это классический индийский код. Тут даже не нужен сишарп — берём autoit и пишем скрипт.
Плюсы ставят те. кто в свое время пытался написать покер-бота? ;)
А минусы — те, кто считает что это легко сделать
Скорее всего так и происходит=)
Чтобы не изобретать такие велосипеды, уже давно был написан OpenHoldem, который берёт на себя и распознавание карт, ставок и всего остального, и высчитывает вероятности, и может брать статистику по игрокам из PokerTracker. От вас требуется только написать логику принятия решений на встроенном языке, Perl или любом другом в виде DLL.
Спасибо за ссылку — обязательно посмотрю. В то время мы почему-то не наткнулись на него. Возможно тогда не было такого открытого доступа к нему.
Не понял вопроса, поэтому скорее всего нет :)
^))) Все таки не каждый Фрэнк — Тейлор, и не каждый Тейлор — Фрэнк :))
Спасибо за статью, читал с интересом. Мне кажется, вы могли бы избежать многих проблем, взаимодействуя с сервером посредством чистого HTTP (что на Perl или Python на два порядка проще, чем ваш способ).
А с чего бы там HTTP? Покеррумы обычно используют свой протокол поверх SSL
SSL — точно не проблема. Свой протокол — хуже, но тоже не смертельно. Даже при таком раскладе я бы предпочел работе через WinAPI ковыряние протокола.
На начало написания мы вообще не имели представления о том, что можно такое делать.
Точнее мы запустили WireShark, но от покер клиента была неимоверная куча коннектов к порядка 10-20 серверов, что мы решили с таким не связываться.
Возможно Вы правы и мы зря это сделали
Кстати, было бы интересно почитать о самой логике ведения игры ботом.
>Как найти среди всех окон системы нужные?
>Эта задача оказалась самой сложной

Ну если это было самой сложной задачей, то представляю как играет бот…
Это было на первой итерации. На тот момент я вообще ничего не представлял о WinApi и о процессе в целом.
В последующем с таким проблем не возникало.
По ссылке находится эквилятор, и что радует свободный. Мы даже на него вроде тогда нарывались, но почему-то не использовали, почему уже не помню.
В статье я рассказал, где можно одолжить еще одного эквилятора.
Немножко лирикой офф-топну, если не возражаете. :-) Одного моего знакомого ;-) приглашали около года назад тех.директором в одну ботоводческую контору: рулить программерами (в оперативном смысле — задачи им ставило высшее руководство, которое всем этим занималось) и обеспечивать работу серверов, коих было дцать стоек в нескольких ДЦ. Так вот, там люди полностью поработили то ли один, то ли несколько покерных сайтов, обеспечивая до 80% наполнение своими ботами всей игры. В этой связи особых стратегий им было не нужно — все боты все равно знают карты друг друга, так что карты оставшихся одного-двух несчастных человеков считаются достаточно легко. Ну и опять же — не так важно, кто именно из ботов победит…
В общем, знакомый от работы отказался, а то бы, возможно, больше топиков на Хабре было по этой тематике.
это бред ) рейк на микролимитах 10%, на высоких лимита (где игр мало) ботов мочат сразу.

Итак простая математика — 9 игроков из них 7 ботов, ставят 9.90, чтобы разыграть 9 долларов. В итоге живых денег 9 — 7.70 = 1.30. Если один из двух оставшихся возьмет третье место 1.80 — боты попали. второе место 2.70 — сильно попали, про первое место 4.50 я скромно молчу.

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

Ну будут боты вскрывать откровенные блеф-пуши, но там все равно будет в среднем 30% на переезд. А надо всего два раза переехать (так навскидку) чтобы боты попали. В общем сомнительное это дело.
Так я же не спорю — бред так бред. Потому и говорю — лирика. :-) Но, надо сказать, на работу нанимали вполне серьезно и Лексусы нанимателей были вполне небредовыми. ;-) Опять же — не говорилось, что это нужно сделать «с нуля», а ля автор топика. Все это уже было. Просто собственникам было неудобно рулить технической стороной бизнеса, находясь за рубежом — вот и искали человека. А в деталях покерных я сам не силен, поэтому ничего сказать не могу по этой теме. Мой опыт ограничивается тем, что тещу обыгрывал на кухне. ;-)
Цикл статей где парень описывает создание такого бота с начала до конца( с примером кода ), к сожалению на английском, но все довольно подробно описано. Я даже сам сделал такого бота, который играл на одном малоизвестном покер руме на фантики, на рельные деньги я не рискнул. На pokerstars вообще специальный отдел занимается выявлением таких ботов и банят навсегда.
Как выше написали — главная проблема в сокрытии выигрывающего бота. Есть куча сайтов, которые получают статистику по сыграным раздачам множества игроков (тот же PTR), а потом находятся люди, которым не лень поискать закономерности в этой статистике.
Самый простой пример: даже очень хороший игрок периодически выпивает, грустит, расстраивается или что еще, что приводит к более лузовой, агрессивной игре, и часто к заливу энного количества денег. Статистика ботов не имеет подобных колебаний.
Ну и второй момент — хороший игрок высоких лимитов всегда обыграет бота, так как там покер из разряда сугубо математической игры переходит в разряд игры, в которой надо играть от оппонента.
ну написано же «У нас осталось достаточно много мелких косяков, которые могут проявляться раз во много часов и очень трудно такие вещи отлаживать»

выпивает, грустит, расстраивается
Верно подмечено=) Я бы даже сказал капризничает. Бах и перстал играть за этим столом, мол хватит, тут мне больше не нравится=)
А в чем проблема наделить бота некоторым подобием характера, чтобы он иногда заливал? Пускай не всегда играет по шансам.
А мне понравилась история — классный пример того, как можно чему-то научиться.
Сложный, но увлекательный проект, по-моему.
Я в свое время вынашивал идею написания бота, но она так и не воплотилась в реальность.
«Однажды сидя ночью, я зашел в папку с файлами софта PokerStrategy.com (Equiliator, ICM Trainer) и обнаружил, что они написаны на .Net.»

Не могли бы дать прямую ссылку?
ru.pokerstrategy.com/software/ Вам на эту страницу. Справа есть ссылки на то, что нужно. Возможно придется зарегистрироваться
Покерботы в разрезе, часть 2: Сообщества

Покерботы в разрезе, часть 1: вступление
Sign up to leave a comment.

Articles

Change theme settings