Пилю программку по обсчёту китайского покера

Последний пост:26.11.2023
22
1 12 13 14 15 34 114
  • 28 повторов даже для сета чрезмерно дохрена
    33/35
    Ответить Цитировать
    1
  • Цитата (St_CasTieL @ 8.3.2019)
    Так , к слову ... три дня назад в оффлайне играли 3-макс с товарищами в джокерный предельный прогрессив , по 20р за кушик . Так вот , я с одной сэтовой в топе фанты , уничтожил их 28ю повторами до оговоренного "кэпа" , где размер их обнуления был 1000 кушей у каждого :)


    c00l0ne, действительно какие там 5-6 повторов
    7/7
    Ответить Цитировать
    0
  • Цитата (Galax @ 7.3.2019)
    poker hand evaluator


    Цитата (Galax @ 7.3.2019)
    По-памяти писал - действительно это было в 13м году. Во второй половине уже появился ананас и простой китайский умер очень быстро.
    Также ошибся в размере файла - для 7-ми карточной руки 130 Мбайт, для 5-ти карточной - 23 Мбайт.


    Где взять этот файл для 5-ти карточной?
    5/17
    Ответить Цитировать
    0
  • в офф съездили ) вот где чистота игры ))) никаких солверов, ставки в темную ))) весело )
    58/882
    Ответить Цитировать
    0
  • DmNass, Вот ссылка на эпический тред на 2+2, где юзер RayW выложил код для расчета этой таблицы. Весь тред стоит почитать, но сам код на этой странице по ссылке. В результате выполнения кода вы получаете файл в котором рассчитаны ранги рук для 5, 6, 7-ми карточных рук. Так что этот файл можно использовать и для 5-ти карточных рук.
    Используя этот код я переделал его для своих нужд - сократил только для 5-ти карточных рук и, что более важно, добавил ранги для 3-х карточных рук, чтобы в китайском можно было сравнивать верхнюю линию со средней. На свою версию я потратил какое-то время и добавил уникальный код, так что бесплатно раздавать ее не буду.
    3/52
    Ответить Цитировать
    0
  • Вот ссылка:
    http://archives1.twoplustwo.com/showflat.php?Cat=0&Number=8513906&page=0&fpart=13&vc=1
    4/52
    Ответить Цитировать
    0
  • Galax, Спасибо, изучим
    6/17
    Ответить Цитировать
    0
  • Так, алгоритм https://forum.gipsyteam.ru/index.php?viewtopic=142685&view=findpost&p=6015413
    реализовать не удалось. Хранение И комбинации, И 2 карт, И очков для двух линий потребовало многоразрядных переменных, обуздать которые я не смог. Ну что ж, возвращаемся к истокам.
    Обдумываю обновлённый алгоритм.
    1. добавляются 2 произвольные карты вниз и сохраняются все получившиеся комбинации
    2. С учётом 2ух изъятых карт из колоды добавляются 2 произвольные карты в мидл и сохраняются все получившиеся комбинации
    3. С учётом уже 4ёх изъятых карт из колоды добавляются 2 произвольные карты в топ и сохраняются все получившиеся комбинации
    Таким образом, новыми пунктами 1-3 мы избавляемся от пункта 6
    Так же обновлённый 3ий пункт решает проблему "последнего" подьёма, когда наравне с 2мя "нужными" картами, может придти 3ья, которая позволит собрать более сильную комбинацию.
    Проблема идентификации комбинации на 5 картах решается тем, что для каждых 2 карт из п.п.1-3 комбинация собирается уникальная, а значит и определять её(и считать очки) нужно всего один раз.
    100/741
    Ответить Цитировать
    0
  • Может сейчас полегче пойдёт.
    Для какой-то случайной колоды из 46 карт и топа (ну, пусть в мидл стрит) ев перед завершающим подъёмом получилось 2,43 очка.
    Здесь надо было посчитать 15К вариантов, а предстоит считать 1КК...
    101/741
    Ответить Цитировать
    0
  • поменял мидл на , ев уменьшилось до 2.03
    Если мидл , ев ещё уменьшилось... до 2.00
    ну, с этим феноменом ещё предстоит разобраться, главное, что (что-то) считается
    102/741
    Ответить Цитировать
    0
  • Посчитал вот такую ситуацию
    соперник
    ___
    ___

    у нас
    ___
    ___
    ___ сброшены
    пришли
    Если предположить, что дама идёт вниз, то остаётся два варианта: в топ или в топ.
    в топ даёт ев 3.74 очка(без учёта очков за фантазию)
    - 7.22
    По идее, фантазия приносит больше 6 очков, поэтому стоит положить
    Ну, теперь осталось повторить предыдущие шаги программирования, а именно расширить перебор на более, чем 1 подьём назад(включая вариант "не класть " вниз в этом конкретном подьёме, ведь программа не знает, какой расклад более "правильный"). Но в этот раз считать получившиеся комбинации только в завершённой руке(то есть, по идее, каждую комбинацию только один раз).
    103/741
    Ответить Цитировать
    0
  • БиллиУбили, все что больше 3 аутов мы изи ставим фантазию. нахрена тебе прога в таких легких раскладах?)))) даже боюсь представить, как у тебя дама вообще вниз попала
    Сообщение отредактировал Wall-e0605 - 14.3.2019, 1:48
    9/10
    Ответить Цитировать
    1
  • взял перерыв, немного покатал..ничего не меняется, как люди вытаскивают 2 аута из 2, так и вытаскивают...ну, да ладно. Наконец-то пришла здравая идея: передавать дальше по цепочке расчёта ЕВ не строки(линии), а номера карт, их составляющие!
    Превращение линии в строку происходит при её "завершении=заполнении", там же считается комбинация и кол-во очков, которая она принесла. Пока что сделал 2 линии...2 подьёма считаются. Попробую добавить 3ею линию. Не уверен, что получится максимизация очков всей руки, но максимизация очков двух нижних линий - уже неплохо.
    ЗЫ Под "получится" я понимаю окончание расчёта за приемлемое время
    104/741
    Ответить Цитировать
    0
  • Хе-хе. 2 подьёма считает. ~7-8 минут
    Сегодня разберу пример https://forum.gipsyteam.ru/index.php?viewtopic=142685&st=60#entry5978018
    105/741
    Ответить Цитировать
    0
  • Второй раз на те же грабли...8мин считается для 19 карт(ну, какая-то колода завалялась у меня для отладки).
    А в примере нам неизвестно 32 карты, для них перебор я даже боюсь запускать...там будут часы(!)
    И сократить его никак не получится. Я выкинул руки с комбинацией младше "пара" в нижней линии из перебора...время 8 мин практически не уменьшилось. То есть дело именно в кол-ве "неизвестных" карт.
    106/741
    Ответить Цитировать
    0
  • Итак, дамы и господа, пришло время подводить итоги. За всё время было совершено 2 прорыва:
    1. кол-во определения комбинаций из 5 карт(с начислением очков) доведено до 50К за 1 сек
    2. В расчётах используется не части колоды(ака "строки"), а индексы положения карты в колоде. То есть, трём картам в линии соответствуют номера. Например: 5, 9, 11
    Пришло время третьего прорыва ))
    Думал я, думал...а причём тут очки? Ведь, собственно говоря, нам важно собирать как можно старшие комбинации, а сколько очков за них будут давать - определяют конкретные правила.
    Поэтому можно рассмотреть задачу сбора максимальной комбинации в линии. Например, для внизу и двух подьёмов.
    Тогда мы можем действовать по следующему алгоритму:
    1. Посчитать все возможные комбинации. Это и , и , и и т.д. Их число для заданной(да и для полной)колоды конечно.
    2. Тогда на предпоследнем подьёме возможны следующие варианты
    а) пришло
    это вариант нулевого "пересечения". То есть, не существует комбинаций из п.1, которые задействуют 2 из 2 карт подьёма. Возможно собрать , но не более.
    Тогда решение класть А или не класть сводится к точной такой же первоначальной задаче(внизу ), но для одного подьёма. Так как все комбинации из п.1 однозначно определяются 2 картами, вероятность вытащить их на последнем подьёме считается(просто в колоде будет меньше на 3 карты)
    б) пришли Назовём это вариантом 1ого "пересечения". Мы можем уйти как на трипс , так и на стрит с . Для трипса нам понадобится 1 король из 2, для стрита - одна из 4ёх. Решение как бы очевидно.
    в) пришли . Это вариант, так сказать, двух "пересечений". Либо мы уходим на флаш, либо на стрит. Уравнение простое: (1-p)(-6)+p(4)>2, где 2 - очки за моментальный стрит, а 4 - очки за возможный флаш. Нетрудно видеть, что p должно быть > 0.8. Для заданной колоды(кол-ву бубновых карт в ней) эта вероятность легко считается.
    И, наконец, вариант
    г) сразу 3 "пересечения". Пришли . Тут 2 итерации. На первой вы выбираем старшие 2 пары, а именно и сравниваем эту комбинацию со стритом. Уравнение аналогичное: (1-p)(-6)+p(2)>1
    Получается, что стрит стоит собирать при p>75%
    Ну, и так по всем пунктам, по всем комбинация(старше и младше).
    ЗЫ Если кто дружит с математикой, прошу подтвердить или опровергнуть мои выводы. Я пока что поставлю на вероятности заглушки, но неплохо прям сейчас понять, а можно ли сей алгоритм распространить сразу на 3 линии?
    107/741
    Ответить Цитировать
    0
  • Первые результаты по новой методе. Для _условных_ внизу существует 463 комбинации старше "старшая карта". Для _условного_ подьёма из них существуют 40 комбинаций, в которых карты подьёма принимают участия. Скорее всего это что-то типа и и т.п. Вроде как-то мало, но сейчас не буду отлаживать, так как потом не хватит производительности и это будет лишняя работа.
    Напомню, что по текущей концепции внизу собирается максимально возможная комбинация. Немного понятно, как можно будет расширить данный алгоритм для 2ух линий. Если, например, появилась возможность положить трипс двоек в середину, то внизу список возможных комбинаций обрежется до трипс+(то есть, флаш, стрит и т.д.), ну и более страрший трипс, естественно.
    Преимущество последнего(крайнего) подхода мне видится также в том, что все карты уникальные, а значит легко считается вероятность вытащить нужные одну(или 2) на последнем подьёме.
    108/741
    Ответить Цитировать
    0
  • Цитата (БиллиУбили @ 27.3.2019)
    внизу существует 463 комбинации старше "старшая карта".

    Поправка: существует 820 комбинаций, из них 357 - пара, 381 -2пары, 48 - трипс, 18 -стрит и 16 флаш. (напомню, что колода произвольная и я пока туда не заглядывал).
    Таким образом, для того чтобы положить А нужно выполнение 2 условий
    а) P(закончить стрит за 5ый подьём) > P(собрать комбинацию стрит старше за 5ый подьём)
    P(закончить стрит за 5ый подьём) > P/0.8(собрать комбинацию флаш за 5ый подьём)
    ....
    ну, и так для всех комбинаций старше
    б) P(закончить стрит за 5ый подьём) > 0.75*P(собрать любую комбинацию старше "старшая карта")
    так как вытаскивание А из колоды уменьшает кол-во комбинаций на 40, то и вероятности надо пересчитать для "новой" колоды.
    не будем пока учитывать все комбинации из пункта а), а возьмём старшую на один шаг.
    Для пункта а) аналогично возьмём одну комбинацию на шаг младше(конкретно здесь трипс)
    А то это всё опять превратиться в бесполезную работу, когда выяснится, что не хватит производительности.
    Если хотя бы одно условие не выполняется - А не кладём
    109/741
    Ответить Цитировать
    0
  • Цитата (БиллиУбили @ 27.3.2019)
    Для _условных_ внизу существует 463 820 комбинации старше "старшая карта".

    Ситуация осложнилась тем, что если в моей парадигме за комбинацию младше "старшая карта" давать - 6 очков, то требуется знание точного число комбинаций "пара". А его подсчёт осложняется тем, что в подьёме 3 карты. То есть, на предпоследнем подьёме мы положили , а на последнем подьёме флаш не закрылся - это не значит, что мы можем смело записывать -6 очков. Вполне возможно, что нам удастся собрать "пару". Из-за этого для подсчёта ЕВ придётся немного повозиться
    110/741
    Ответить Цитировать
    0
  • Играть, конечно, гораздо легче, чем программировать. Однако, продолжим

    Увы, перебор не тянет даже одну(!) линию.
    Продолжим предыдущую концепцию. У нас есть внизу, и всего 3 исхода: мы соберём флаш, пару или ничего(да, стрит и прочее пока выкинем из рассмотрения). И пусть за пару мы набираем 0 очков, за флаш - 4 очка, за "ничего" - минус 6. Кол-во оставшихся подьёмов - произвольное(примем его равным N)
    Тогда я предполагаю, что для данной колоды и данного подьёма существует единственное разложение, которое максимизирует кол-во очков для линии. Ведь разложение сводится к подсчёту вероятности собрать ту или иную комбинацию(флаш или пара в нашем случае), а они, в свою очередь, зависят лишь от оставшихся карт в колоде и кол-ва оставшихся подьёмов. Тогда на каждом подьёма надо сравнить 3 вероятности:
    - мы "усиливаем" флаш, то есть добавляем одну или 2 бубновых карты(если таковые пришли)
    - мы "собираем" пару, то есть флаш собрать уже не сможем, но и не сможем получить -6 очков
    - мы ничего не кладём, таким образом переходим к той же самой задаче, но без трёх карт в колоде и кол-ву подьёмов, уменьшенных на 1(то есть N-1)
    Рассмотрим, для примера, случай N=2
    Тогда для данной колоды мы можем посчитать комбинации из 2 карт, приводящих к флашу, комбинации из 2 карт, приводящих к паре(АА, 1010 и т.д.), и комбинации из одной карты, тоже приводящие к паре(,, и т.д.)
    Тогда вариант, что на из данного подьёма(например, ) мы не задействуем ни одну карту соответствует варианту, что вероятность собрать пару вместе с "четвёртой" картой меньше, чем вероятность собрать пару за последний подьём с 3мя картами + вероятность собрать флаш(тут + означает не арифметическое действие, а соответствует сложению вероятностей). БОнусом в данном подходе является то, что все эти вероятности(достать конкретные 2 или 1 карты за Х подьёмов) считаются аналитически, то есть перебор не нужен. Вторым бонусом является тот факт, что при выходе некоторых карт из колоды(мы видим их у соперника) нам не нужно пересчитывать все комбинации, а нужно лишь удалить неосуществимые.
    Находить 2ух и 1дно карточные комбинации для флаша и пары я уже научился, удалять тоже. Осталось произвести сравнение вероятностей на N-i подьёме.
    111/741
    Ответить Цитировать
    0
1 12 13 14 15 34 114
1 человек читает эту тему (1 гость):
Зачем регистрироваться на GipsyTeam?
  • Вы сможете оставлять комментарии, оценивать посты, участвовать в дискуссиях и повышать свой уровень игры.
  • Если вы предпочитаете четырехцветную колоду и хотите отключить анимацию аватаров, эти возможности будут в настройках профиля.
  • Вам станут доступны закладки, бекинг и другие удобные инструменты сайта.
  • На каждой странице будет видно, где появились новые посты и комментарии.
  • Если вы зарегистрированы в покер-румах через GipsyTeam, вы получите статистику рейка, бонусные очки для покупок в магазине, эксклюзивные акции и расширенную поддержку.