День 19 (9-я сессия).
Сессия: +$71 профитом + ~$5 РБ (завтра капнет лидерборд + начальный Fish Buffet).
Общий итог: +$213.
Общее время: ~29 часов.
Общий винрейт на NL10: 9.5 bb/100 (30 bb/100 на Pokerdom и 6.7 bb/100 на PokerOK).
Графики:
1) Текущая сессия.
2) Общий график на PokerOK (включает те +$70, набитые на пре-старте банкролл-челленджа - в общую сумму челленджа не входят).
3) Результаты на Pokerdom.
Отыграл финальную сессию на NL10, чему несказанно рад - лимит уже успел поднадоесть. Напоминаю: для меня NL25 - это «сейв-поинт». Ниже этой отметки я опускаться больше не планирую.
Сессия вышла отличной. Словил парочку мерзких кулеров, но любители с лихвой всё компенсировали.
С завтрашнего дня штурмую NL25 Rush.
Раздачи, как обычно, в комментариях в телеге (надо же ее как-то продвигать): https://t.me/lutwigs_pain
День 23. Сессии 10-11.
Локальный результат: -$220. Общий итог: -$7. Общее время: 35 часов.
Не зря я обозначил NL25 как «сейв-поинт»! Окунули лицом в грязь по полной программе. Успело случиться всё худшее сразу: и обидные кулеры, и переезды, и, как следствие, тильт с собственными ошибками.
Забавная математика: по количеству выигранных стеков (суммарно с марафона) я всё еще в плюсе, но по деньгам факту уже ушел в минус.
Работаем дальше.
А что за программа такая, которая строит график на пд?
feenords, pd stat. На самом деле, можно просто LLM-кам кидать и они могут посчитать. Или попросить их написать софт, что графики рисовать будет - тоже 2 минуты времени.
День 53. Сессии ~35.
Результат: +$546 (~$160 рейкбеком)
Общее время: ~105 часов
Дистанция: ~90к рук (85-90% Zoom)
Винрейт: 4.5 bb/100
Давно ничего не писал - блогер из меня так себе. За это время успел накатать приличный объем, но шло откровенно тяжело.
На NL25 словил два неприятных даунстрика: один на 20 стеков, второй на 16. На фоне этого начал тильтовать и совершать ошибки. С кем не бывает? В моменте пришло осознание, что пытаться «побить лимит» на стрике просто за счет депозитов - странновато для марафона. В итоге решил спуститься обратно на NL10.
По румам картина абсолютно понятная: GG - худший рум. Почему-то не удивлен. В последние дни ушел на старзы, благо есть возможность их катать из Армении. Там как раз случился второй стрик на 25ке, но успел уже отмазать.
Из-за этих качелей общий винрейт просел до 4.5 bb/100. Часто постить теперь не обещаю, особенно если продолжит так жестко дисповать. Буду выигрывать - хоть каждый день :)
День 57. Сессий: ~38.
Общий результат: +$874 (почти добил сундук на $40 на Старзах, но в профит пока не пишу).
Общее время: ~117 часов.
Дистанция: ~102к рук.
Винрейт: ~4.5 bb/100.
Поскольку на NL25 всё шло как-то вязко, проснулось желание немного полудоманить: забил на 25-ку и пошел шотать NL50. Решение оказалось удачным - приятно апнуло. Покатал буст50 на Покердоме и вынес оттуда +14к руб. (~$180), плюс на Старзах нажил еще около $140.
Сейчас уже максимально близок к тому, чтобы играть NL50 по банкроллу. Выходит, подключать полтинник «по настроению» было не такой уж плохой затеей.
Еще жаба душит платить за pdstats чисто ради красивых графиков (у них только NL10 бесплатный). Так что навайбкодил себе парсер агрегатов сессий и теперь могу делать свои графики с пд.
День 58. Сессий ~39.
Сессия: +$179 (включая добитый сундук на +$40).
Общий итог: +$1053.
Общее время: ~122 часа.
Дистанция: ~105–106к рук.
Винрейт: ~4.8 bb/100 (за время марафона - старзы на скрине).
П - Прошел NL25, случайно шотнув полтинник.
Везение - штука приятная, грех жаловаться. Теперь главная задача - закрепиться на NL50 в ближайшее время. Очень не хотелось бы откатываться обратно в микролимитное болото.
Напоминаю, что за марафоном и раздачами можно следить в моей телеге: https://t.me/lutwigs_pain
Рег столы в минусе, раш столы в хорошем плюсе. Забавно.
Bugs_Bunny, 1) стрик словил - первые 5к раздач вообще не мог ничего выиграть на рег столах, постоянно в куллера катался. -370 было в пике. 2) хуже концентрация, меньше получается думать
День 62. Сессий ~43-44.
Общий итог: +$1048 (упал еще один сундук на Старзах).
Общее время: ~134 часа.
Дистанция: ~114к рук.
Винрейт: ~4.9 bb/100.
Мой прошлый случайный залет на NL50 оказался типичным сюжетом про самонадеянного туриста.
Пришлось возвращаться обратно в окопы NL25 и проходить этот уровень уже по-честному, без чит-кодов. Правда, минус отбивался не очень долго и не очень упорно. Будем считать, что это была дорогая разведка боем. Начинаю попытку закрепиться на полтиннике номер два.
Напоминаю, что за марафоном и раздачами можно следить в моей телеге: https://t.me/lutwigs_pain
День 64. Сессий ~45.
Общий итог: ~$1490 (+75$ лидерборд)
Общее время: ~138 часов
Дистанция: ~116.5к рук
Винрейт: ~5.4 bb/100
Пошло отлично! Сдавали щедро, сам старался играть аккуратно и без лишних выдумок. В Zoom50 снова словил хороший апстрик - вдобавок к профиту попал в лидерборд и получил приятный бонус на $75.
Ради эксперимента заглянул на Stake проверить NL20. Поляна там просто невероятная. Нашел за столом эталонного спонсора, который пушил эни-ту по 100bb каждую раздачу. Отыграл с ним буквально 200–300 рук и спокойно запаковал +4.5 стека. Надо будет присмотреться к руму повнимательнее.
Опять немного забил на марафон, но причина уважительная. Во-первых, я тильтанул - по результатам сейчас где-то +1000$. Во-вторых, с головой ушел в кодинг - дописываю свой собственный покерный солвер.
Из готовых и нестандартных фишек: он уже умеет считать споты с баунти за 72o. В планах прикрутить поддержку вообще всех лудоманских форматов: бомб-потов (в том числе с двумя бордами), "кальмара" и прочей экзотики. Четкое понимание, как реализовать математику под всё это, уже есть.
На скринах пример работы:
Спот: 3bet-пот, SB vs BTN, стеки 100bb (к дефолтным рейнджам принудительно добавлены 72o). Точность не самую высокую поставил, поэтому такой активный сплит есть.
Скрин 1: Расчет с включенным режимом бонуса за 72o.
Скрин 2: Тот же спот, но по классическим правилам.
Из любопытного: Слышал от некоторых регов мнение, что у 72o в таких спотах велью примерно как у топ-пары. Выяснилось, что это не так. При бонусе 4*5 = 20bb, EV руки 72o болтается где-то в районе второй-третьей пары. Причина проста: солвер начинает блефкетчить из-за страха получить штраф. В итоге в таких спотах EV заметно растет в основном у топ-рейнджа, а вот ожидание от блефов, наоборот, падает. Эффект, кстати, не такой серьезный, как мне изначально казалось будет.
StiQs, очень интересно! Но как ты посчитаешь равновесие в бомб-спотах, если это не хедзап? Солвер ведь использует алгоритм CRM, который не годится для мультипотов?
PovArjuga, пока пробую идти через классический mccfr-подход. Для hu постфлоп у меня реализация уже работает, хотя на текущий момент очень медленно (именно mccfr). Для перечисленных форматов ещё не всё дописано, но общее направление именно такое. Понятно, что в мультипотах это будет уже приближённое равновесие без тех гарантий, которые есть в h-up zero-sum, но на практике это всё равно намного лучше, чем полное отсутствие хоть какого-то внятного решения. Плюс я просто не видел на рынке солверов, которые умели бы считать такие игры (двойные борды - бомб-поты считает rocket-солвер), так что стало интересно самому за это взяться и посмотреть, что получится.
PovArjuga, ну и да, для кальмара все становится, конечно, намного сложнее. Пока основная идея mccfr + марковский процесс принятия решений для определения сдвигов в EV и аппроксимация длинных веток нейросетями.
StiQs, рискну предположить, что кальмар в принципе не разрешим на электронных компьютерах. Гораздо более простая задача, префлоп решения в МТТ с FGS, до сих пор по моему решается криво.
PovArjuga, ну как минимум можно заставить солвер играть жадно, чтобы учитывать только статичный сдвиг выплат на терминальных узлах дерева. Да, точный расчет получится только для ситуации, когда остался один кальмар (и неплохое приближение, наверное, когда все в игре), но опять же лучше, чем ничего. И сделать это элементарно (как и 72о - тот же масштаб задачи). Кстати, делать сдвиг для размера банка, как это делают за столами - математически некорректно, потому что награды ассиметричные могут быть, если в раздаче у одного кальмар есть, а у второго игрока - нет. Так что отдельно сделать режим для солвера со статичным сдвигом выплат для каждого из игроков в раздаче имеет смысл.
Ну да, для последней раздачи посчитать не так сложно
Покерные результаты за месяц смешанные. Сделал пару вылазок на NL100, попытки оказались неудачными - суммарно оставил там около $800. Иронично, но почти весь текущий профит марафона был набит на NL25.
Главная проблема сейчас - дисциплина. Обычные столы даются тяжело, на длинных сессиях теряется концентрация, и прокрастинация сильно бьет по объему. В зуме держать темп и откатывать дистанцию мне оказалось гораздо проще. Кстати, бр в районе 2.2-2.3к$.
Уголок программиста-любителя.
Месяц выдался очень плотным по кодингу. Основной фокус был на двух направлениях:
1) MCCFR. Сделал его ленивым по памяти и встроил в продуктовый контур - неплохой задел для обещанных мной расчетов префлопа, двух бордов и прочей экзотики. Добавил частичное распараллеливание (на 4 и 8 потоках уже есть хороший прирост скорости, но все еще очень далек от хотя бы неплохой оптимизации - до коммерческого продукта как до луны пешком).
2) Оценщик силы рук. Добавил поддержку шорт-дека и омахи. По скорости пока уступает лучшим open-source решениям. Омаха вообще получилась очень тяжелой для расчетов.
Замерял свой код против топовых открытых проектов. У некоторых проектов lookup-таблицы и служебные структуры компактнее, лучше попадают в L2/L3 кеш и меньше упираются в задержки памяти. У меня текущий слой в ряде мест тяжелее, и из-за этого часть времени теряется не на саму покерную логику, а на доступ к данным и лишнюю обвязку. Решил сделать параллельный текущему быстрый оценщик. Посмотрим, что получится.
Основные идеи пока: 1) гибрид - для обычного обхода дерева использовать идеальное хеширование (лук-ап таблицы ужать до 100 КБ, чтобы они намертво сидели в L2-кеше и не ждали оперативку), а для монте-карло врубать векторизацию; 2) выпилить медленные gather-инструкции в SIMD. перейт на битслайсинг, чтобы векторно молотить сразу батч из 16 раздач за один такт процессора; 3) жестко упаковать карты (bit-packing). В памяти дерева карта будет весить 1 байт. А уже в хот-пате она на лету будет маппиться в 64-битный битборд.
И да, планирую свою улучшенную версию flopzill'ы для перечисленных форматов - холдема, шорт-дека и для омахи. Лично мне всегда казалось странным, что в флопзилле нет нормальной системы фильтрации по деревьям - если накидал рейндж условного бета, то ветку чеков приходится накидывать через задницу - открывать новую флопзиллу, копировать рейнджи туда.
День 19 (8-й игровой).
Сессия: +$30 (PokerOK). Общий итог: +$137. Общее время: ~25 часов.
ГСЧ сегодня был лоялен. Ошибки присутствовали, но без криминала и дорогих заливов.
Раздачи интересные, есть над чем подумать: https://t.me/lutwigs_pain