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

Последний пост:26.11.2023
22
1 19 20 21 22 41 114
  • Jak, Сколько попыток Монте-Карло ты делаешь на каждой глубине рекурсии? Зависит ли это к-во от глубины рекурсии?
    7/52
    Ответить Цитировать
    0
  • Разберем подъем 3 карт.
    Я их делю по имеющимся картам (5, 7, 9, 11).
    9 и 11 полный перебор, там мало.
    5, 7- на этом уровне = сколько задали руками, пусть 1000 (генерирую полный вариант до конца 3+3+3+3 или 3+3+3), дальше не расширяю. Для каждой (3) смотрю 27 вариантов положить на 3 линии и иду внутрь. Выходит, что не расширяю. Для всех вариантов одинаковые условия. Выходит для 7 = 1000*27*1*(6-20)*1*6, для 5-ки побольше.
    Для 7 карт есть вариант "академически" - полный перебор, долго.

    Поменял ехе-шник. Т.к. в начале положил вариант, в котором немного не так считались бонусы на 13 картах, когда все линии полные.

    (2+2) - две пары, (2) - пара.
    Тут есть проблема, если считать просто бонусы, то вариант QQ/(2+2)/(2+2 или сет) одинаков для проги по бонусам с QQ/(2)/(2). А для игрока - они разные. Та же проблема на фанте.
    Чтобы стимулировать ложить более сильные комбы на линии, я добавил дробные доли по кикерам. Старше кикеры или сила линии, две пары против пары, больше результат. Но с академической точки зрения, результаты стали не совпадать с точными (без дробей). В последнем варианте я убрал прибавку за кикеры.
    Так что, по бонусам будет максимальная комба, но по силе руки не самая сильная. Может ложить при фанте вверх и мид слабые кикеры, какой вперед попадется.
    Сообщение отредактировал Jak - 3.12.2019, 16:18
    30/314
    Ответить Цитировать
    0
  • Я интересуюсь, чтобы оценить достоверность полученных результатов.
    Получается ты в глубине рекурсии не проводишь свое собственное Монте-Карло.
    На втором этапе рекурсии ты взял случайные три карты и имеешь 27 вариантов разложения. Как ты определишь какой вариант лучше? Ведь ты считаешь только для одного набора следующих карт (которые заранее определены). А для другого набора лучшее разложение будет другим. Нам же нужно знать лучшее разложение для всех возможных вариантов. Т.е. нужно провести хоть какое-то Монте-Карло внутри рекурсии.
    8/52
    Ответить Цитировать
    0
  • Было бы не плохо провести такое исследование. Сравнить полученные тобой результаты с точными результатами полученные полным перебором (для 9-ти карт, или для 7-ми пусть долго но что-бы быть уверенным в дальнейших результатах). Причем тесты нужно проводить с различными структурами стартовых позиций (особенно важны агрессивные разложения, типа верх уже готов, а низ еще нужно собирать).
    И если бы ты мог попробуй такой метод. Вместо 500к попыток МК, сделай так - верхний уровень 10000 попыток, а каждый внутренний рекурсивный по 1000(или хотя бы 200). И сравни с предыдущими двумя вариантами.
    Важно убедиться, что полученные данные достоверны и несмотря на упрощенный метод дают правильный результат.
    9/52
    Ответить Цитировать
    0
  • Jak, Или я тебе не до конца понял, или ты не ясно объяснил свой алгоритм. Если ты в глубине рекурсии не проводишь никаких дополнительных расчетов и нет механизма выбора оптимального разложения для текущей ситуации, то не получится ли так что программа всегда выбирает лучшее разложение для текущих 12 карт. Т.е для заданных 12 карт программа выберет вариант, как будто бы она знала все 12 карт наперед. Получится то, что вы на прошлой странице темы обсуждали с вероятным каре, если в данной 12-ке возможно каре, то программа будет его расскладывать с первой улицы, несмотря на то, что оно закроется на последней улице. Ведь для данного расклада программа знает, что оно закроется и даст максимальные очки. А в реальной жизни ты никогда не будешь так расскладывать.
    Еще раз внимательно проанализируй свой алгоритм.
    10/52
    Ответить Цитировать
    0
  • Ребятки займитесь лучше делом поважнее а я вас отблагодарю
    Вот есть 7,462 стартера
    Многие из них имеют одинаковую ценность по мат .ожиданию
    Напишите список правельных раскладов стартовых рук ТОЛЬКО для 1 -й позиции
    Желательно для прогрессива
    2/27
    Ответить Цитировать
    0
  • Цитата (Jak @ 3.12.2019)
    Поменял исполняемый файл. В той версии ошибка.

    SHA1 232075FA9DA71787F8C7330FB72A3525B5C1F722
    MD5 C05F6B57FAC8E85A9CBE4FAC6F7BB3C0


    Исходники? Там есть? Стоит качать? В личку мне кинь на выходных посмотрю...
    71/882
    Ответить Цитировать
    1
  • Для меня программирование подобных задач (китайский покер, прога типа ICMizer) - это хобби. Как кроссворды порешать. Еще на cgm.ru участвовал в конкурсе на "самое быстрое определение комбинации".
    В советах по кодированию не нуждаюсь. Исходники никому не дам.
    Продавать свои проги не собираюсь, есть другой бизнес. Готов просто выложить для всех.
    Если есть умные мысли по алгоритмам - велком!
    31/314
    Ответить Цитировать
    1
  • Цитата (Jak @ 5.12.2019)
    Для меня программирование подобных задач (китайский покер, прога типа ICMizer) - это хобби. Как кроссворды порешать. Еще на cgm.ru участвовал в конкурсе на "самое быстрое определение комбинации".
    В советах по кодированию не нуждаюсь. Исходники никому не дам.
    Продавать свои проги не собираюсь, есть другой бизнес. Готов просто выложить для всех.
    Если есть умные мысли по алгоритмам - велком!


    Для всех бесплатно) вот за это просто красавчик!!!
    3/27
    Ответить Цитировать
    0
  • Jak, Для меня программирование тоже хобби. И раз ты альтруистически решил поделиться своей программой, то и я решил поделиться своими мыслями, наработками в этой области. Сам я перестал работать над программой лет 5 назад, в ананас не играю с тех пор и скорее всего играть уже не буду, прогу уже не доделаю - поэтому просто поделюсь своими мыслями, вдруг кому-то пригодиться.

    Решать такую сложную задачу как ананас можно различными способами - Монте-Карло, полный перебор, комбинаторикой, или какой-то гибрид этих методов.
    Но независимо от метода нам нужно всегда оценить конечную ситуацию, когда все карты разложены - сколько очков мы заработаем? Во-первых, нужно быстро оценить ситуацию, какая покерная комбинация получилась на каждой линии и нет ли скупа, и сколько бонусных очков мы заработали. Тут беспорный лидер - это получение ценности руки из заранее расчитанного массива данных. Я вижу ты тоже используешь этот метод. А вот автор этой темы уже полгода стоит на месте и пытается изобрести велосипед (50 000 рук в секунду у него, а у меня где-то в 1000 раз больше). Кроме этого для финального подсчета очков нужно учитывать EV от фентези (субъективный фактор, о нем поговорим позже), сколько очков мы проиграем при скупе (тоже субъективный и неизвестный фактор) а также сколько мы наберем очков при сравнении линий с оппонентом (от -6 до +6).
    Чтобы решить все эти проблемы я для начала поступил так. Я применял метод минимакса, как в шахматах - сначала делаю оптимальный ход за себя, потом за оппонента, потом снова за себя и так до конца пока оба игрока не заполнят руку. Далее сравнение двух готовых рук по правилам ананаса. В результате мы получаем абсолютно точный результат в нем учитывается все - и очки за линии и сколько мы проиграем при скупе (только очки за фентези попрежнему субъективны). И самое главное мы учитываем силу руки оппонента - как часто он скупается, как часто собирает фентези и т.д. Этот метод хорош, но у него один существенный недостаток - время расчетов. Ведь наша глубина рекурсии вырастает вдвое для подсчета оппонента. Таким методом можно подсчитать расклад для 9-ти, 11-ти карт (помоему у меня получилось и для 7-ми карт подсчитать после определенных оптимизаций). Но абсолютно не пригоден для 5-ти карт и тем более для стартового рассклада.
    Сделаю отступление и опишу каким методом я перебирал все варианты при минимаксе. Например, при 7 картах у нас есть С(44,3)=13244 вариантов троек и каждую из них мы можем разложить 27 способами.На самом деле нам достаточно посчитать все возможные пары С(44,2)= 946 и каждую пару можем разложить 9 способами. Далее при переборе всех троек мы просто сравниваем уже расчитанные EV трех возможных пар и выбираем лучшее и ведем счетчик сколько раз мы будем выбирать данную лучшую пару. Но и это еще можно улучшить - когда у нас нет возможности собирать флеш, тогда масть карты не имеет значение и 52 карты превращаются в 13 различных карт. Тогда нам нужно расчитать EV только для С(13,2) =78 вариантов по 9 способов разложения. Если же есть возможность флеша, то нужно еще посчитать приблизительно столько же вариантов для масти флеша. Итого для каждой глубины рекурсии нам нужно расчитать EV для максимум (78+78)*9 = 1404 позиций вместо 13244*27= 357 588 позиций.

    Продолжение следует...
    11/52
    Ответить Цитировать
    1
  • Цитата (mahatmaGandi @ 5.12.2019)
    Для всех бесплатно) вот за это просто красавчик!!!


    СССР Вер 2.0 перезагрузка
    На выходных пильну обзор софта твоего
    Другой бизнес это не ботоводство случайно ?
    72/882
    Ответить Цитировать
    1
  • Пс для наивных, предупредить хочу что бесплатный сыр... Бывает такой:
    1. Может содержать руткиты, это программы скрытые от антивируса... Но дающие полный контроль над вашим компьютер... Например могут смотреть за вашим экраном и перехватывать пароли
    2. Возможно в софте допущены грубые ошибки в алгоритмах обработки результатов или в симуляции... И польза сомнительная от расчетов...

    Мой телефон рофлит:
    Т9 тролит :

    Цитата
    польза сомнительная от
    кулона
    73/882
    Ответить Цитировать
    2
  • Цитата (Jak @ 5.12.2019)
    Для меня программирование подобных задач (китайский покер, прога типа ICMizer) - это хобби. Как кроссворды порешать. Еще на cgm.ru участвовал в конкурсе на "самое быстрое определение комбинации".
    В советах по кодированию не нуждаюсь. Исходники никому не дам.
    Продавать свои проги не собираюсь, есть другой бизнес. Готов просто выложить для всех.
    Если есть умные мысли по алгоритмам - велком!


    Объясни, пожалуйста, как пользоваться программой. Что какое поле означает и для чего.
    7/17
    Ответить Цитировать
    0
  • Зачем разные кнопки First 5 и First 5a?
    8/17
    Ответить Цитировать
    0
  • Цитата (DmNass @ 6.12.2019)
    Объясни, пожалуйста, как пользоваться программой. Что какое поле означает и для чего.

    #377 читал?
    Цитата (Galax @ 5.12.2019)
    Тут беспорный лидер - это получение ценности руки из заранее расчитанного массива данных.

    Да, именно так.
    Цитата (Galax @ 5.12.2019)
    сначала делаю оптимальный ход за себя, потом за оппонента, потом снова за себя и так до конца пока оба игрока не заполнят руку. Далее сравнение двух готовых рук по правилам ананаса. В результате мы получаем абсолютно точный результат в нем учитывается все - и очки за линии и сколько мы проиграем при скупе (только очки за фентези попрежнему субъективны).

    Пока ищу только лучший вариант для меня. С оппами не сравниваю. Это, конечно, лучший вариант, но времени (для счета) не хватает. Предполагаю, что лучший для меня расклад, будет лучшим и против оппов (хотя, конечно знаю случаи, когда лучше разбить 2+2 в миде и положить пару в топ).
    Цитата (Galax @ 5.12.2019)
    Например, при 7 картах у нас есть С(44,3)=13244 вариантов троек и каждую из них мы можем разложить 27 способами.На самом деле нам достаточно посчитать все возможные пары С(44,2)= 946 и каждую пару можем разложить 9 способами. Далее при переборе всех троек мы просто сравниваем уже расчитанные EV трех возможных пар и выбираем лучшее и ведем счетчик сколько раз мы будем выбирать данную лучшую пару.

    Тут не понятно, почему С(44,3)? Мы одни против фанты? А если виден один опп, то уже С(52-5-5-3,3)=С(39,3). Ну это частности. Основная мысль понятна.
    Вариант считать не тройки, а двойки, проходил. Считает быстро, но результаты очень примерные. Проверял такое: беру двойку, и из колоды убираю по очереди все остальные карты (имитирую тройки). И проверяю результат. Результаты разнятся примерно на 12%. И я решил, что для более точного решения этот путь не подходит.
    Цитата (Galax @ 5.12.2019)
    когда у нас нет возможности собирать флеш, тогда масть карты не имеет значение и 52 карты превращаются в 13 различных карт.

    А вот про это думал. Сейчас этим занимаюсь.
    Пару дней назад совершил крупный прорыв, теперь считаю полным перебором 7,9,11 своих карт достаточно быстро. Ускорил алгоритм для 7-ок в 6 раз. Еще добавлю туда флеш и будет супер. Изменил алгоритм расчета 7-рок и добавил распараллеливание - вообще бомба! Считаю все 27 вариантов одновременно.
    Еще пробовал отсекать внизу простые пары - не будет фанты, или ограничить внизу только QQ+. Все остальное в мусор. Ведь если внизу меньше QQ, в топе не собрать фанту. Скорость растет, но опять это не точное решение. Буду стремиться к точному результату.
    Galax, А не мог бы ты посчитать точное решение для всех раскладов какой-нибудь раздачи для сравнения? А то я думаю, что у меня полный перебор без ошибок, а может нет? Уже были такие моменты для других прог. Писал кальк для холдема 6+, и у нас расходились варианты в другим программистом.
    Цитата (c00l0ne @ 6.12.2019)
    На выходных пильну обзор софта твоего
    Другой бизнес это не ботоводство случайно ?

    Прога сырая. Нет. Не ботоводство. В китай не играю. Это лотерея. В которой еще надо мало того, что получить хорошие карты, надо еще их правильно разложить. Строительный бизнес. Есть авторитетные ребята с форума, которые знают меня и бизнес.
    Цитата (c00l0ne @ 6.12.2019)
    Пс для наивных, предупредить хочу что бесплатный сыр... Бывает такой:
    1. Может содержать руткиты, это программы скрытые от антивируса... Но дающие полный контроль над вашим компьютер... Например могут смотреть за вашим экраном и перехватывать пароли
    2. Возможно в софте допущены грубые ошибки в алгоритмах обработки результатов или в симуляции... И польза сомнительная от расчетов...

    Конечно. Но я думаю у всех есть дома или второй комп или ноут. Запустите там, где я ничего своровать не с могу.
    Но исходники не дам бесплатно. Давал один раз, заебали, как ты так пишешь? где комментарии? нихера не понятно! Так уже давно никто не пишет! И т.д.
    Нахер мне отбиваться от "крутых программеров" которые сами ничего не могут написать? Разумеется это не относится к этой ветке.
    И верить результатам нельзя. Потому и прошу у других их результаты. Свои проверить.
    32/314
    Ответить Цитировать
    0
  • Цитата (DmNass @ 6.12.2019)
    Зачем разные кнопки First 5 и First 5a?

    Разные варианты расклада. В первом случае каждый раз генерируется последовательность случайных карт во время счета, во втором, вначале генерирую карты, потом считаю для всех вариантов. Второй более универсален для разных условий, можно этим способом и после 5-ти раскладывать и после 7ми и т.д. Думал скорость возрастет. Нет.
    33/314
    Ответить Цитировать
    0
  • А для двоих можно считать? Что, если я не заполню картами поле одного из оппонентов? Это будет расчет на двоих или просто некорректный расчет?
    9/17
    Ответить Цитировать
    0
  • Довольно таки интересно конечно вышло, но видно, что еще сырая. А так красавчик!
    Сообщение отредактировал DmNass - 6.12.2019, 18:31
    10/17
    Ответить Цитировать
    0
  • Продолжение...
    Итак я застрял на том, что пытался учитывать флеш возможности при полном переборе вариантов. Т.е. отдельно считать позиции когда масти карт не флешевые и дополнительно считать когда флешевые. Где-то запутался, где-то не мог побороть лень. Потом показалось, что ананас скоро умрет (тогда игра была только на Гамблере) и в результате забил на прогу. Сейчас по прошествии 5 лет понимаю, что был не прав. Возможно этот вариант был тупиковым ведь он не сможет посчитать стартовую руку, но мне нужно было иметь эталонный расчет (максимально точный), чтобы с ним сравнивать будущие приближенные расчеты.
    Чтобы я сделал дальше...Нужно упрощать расчеты. Если мы знаем карты оппонента можно сначала просчитать отдельно (не учитывая наши карты) его расклад, чтобы узнать сколько раз он будет скупаться, сколько собирать фентези и в результате узнать его среднее мат.ожидание (сколько очков он в среднем наберет). Эти данные используем для расчета своей руки (теперь уже не учитывая карты оппа), когда у нас скуп отнимаем эти средние очки оппа. В результате мы довольно точно учитываем скуп и фентези, но не можем учитывать очки за линии. Мы их игнорируем (ну или можем выбрать приблизительно из диапазона -6...+6, учитывая мат.ожидание оппа и наше мат.ожидание). В результате мы очень выигрываем по времени (вместо двойной глубины рекурсии получаем два раза по одинарной глубине) и при этом довольно точные результаты.
    Следующее упрощение - не учитываем карты оппонента. Тогда сколько очков мы проигрываем при скупе? Я бы рекомендовал каким-то образом узнать сколько в среднем очков набирает средний игрок за игру. Это можно сделать если у вас есть солидная база собственных сыгранных игр или где-то есть статистика игр по ананасу (кажется где-то на форуме была инфа от Гамблера). Зная процент скупов, процент фентези и среднее к-во собранных очков на линии - нужно вычислить среднее EV среднестатистического игрока. Это среднее значение мы будем использовать в дальнейших расчетах. Теперь несколько слов о фентези EV - сколько очков мы добавляем себе при фентези. Вот вы довольно точно узнали сколько очков в среднем собирается на фантазии. Но на мой взгляд некорректно добавлять эти 14 очков. Ведь мы будем играть не против мертвой руки, опп может собрать хорошую руку и даже свое собственное фентези. Я считаю нужно добавлять разницу между теоретическими очками (14) и очками, которые в среднем набирает игрок (то среднее EV , что мы посчитали выше). С другой стороны можно рассуждать так. В следующей сдаче я в среднем соберу столько-то очков(например 6), а при фентези в среднем 14, значит фентези мне принесет допольнительно 14-6=8 очков. Вот это EV от фентези и нужно добавлять при рассчетах. Если быть дотошным, то можно пойти еще дальше. Когда мы первый раз расчитывали среднее EV игрока, мы учитывали что фентези EV=14, после первой итерации скоректировали его до 8, далее проводим вторую итерацию, учитывая что фентези EV=8, и получим еще более скорректированное значение. После нескольких итераций мы будем сходиться к определенному значению. Вот эти значения среднего EV игрока и фентези EV я бы выбрал для дальнейших расчетов. Т.е первое отнимал бы при нашем скупе, а второе добавлял при нашем фентези.
    Итак все, что выше написано, нужно только для того, чтобы мы корректно посчитали готовую руку - сколько очков мы заработаем. Теперь вернемся к методам, каким образом перебирать все варианты. Если использовать алгоритм полного перебора двоек вместо троек и считать только для одного игрока, то возможно получить за разумное время расчет для 5-ти карт (но это не точно). Для стартового расклада нужно придумывать что-то принципиально другое.
    Монте-Карло видится единственным разумным вариантом. Но нужно уметь внутри рекурсии для случайных трех карт быстро выбирать лучший расклад из 27 возможных. Этот метод (выбор внутри рекурсии) не обязательно должен быть точным, но довольно быстрым. Можно попробовать свое собственное Монте-Карло с малым количеством проб (200-100), но и это я боюсь не уложится в разумное время. Наконец можно попробовать комбинаторикой (тут нужны хорошие математические знания). Т.е для каждой незаконченной линии нужно посчитать вероятность собрать различные комбинации(каре, фуллхаус, флеш, трипс, и т.д.), зная какие карты вышли и на основании этих данных оценить приблизительно EV руки (хотя бы очень грубо). Это позволит выбирать лучший вариант когда он очевидный (к нашей паре пришел трипс, или к флеш-дро пришла карта флеша), а в остальных случаях выбирать какой-то вариант более-менее разумный. Я сам конкретно не знаю как посчитать эту комбинаторику, но рыл бы в этом направлении.

    Пока все...
    12/52
    Ответить Цитировать
    1
  • Galax, одним словом: утопия...
    Монте Карло очень просто делается для китайского...
    Но нужен супер комп... От сотки ядер...

    Процы подешевеют можно будет заняться, от АМД которые ThreadripperЫ
    74/882
    Ответить Цитировать
    0
1 19 20 21 22 41 114
4 человека читают эту тему (4 гостя):
Зачем регистрироваться на GipsyTeam?
  • Вы сможете оставлять комментарии, оценивать посты, участвовать в дискуссиях и повышать свой уровень игры.
  • Если вы предпочитаете четырехцветную колоду и хотите отключить анимацию аватаров, эти возможности будут в настройках профиля.
  • Вам станут доступны закладки, бекинг и другие удобные инструменты сайта.
  • На каждой странице будет видно, где появились новые посты и комментарии.
  • Если вы зарегистрированы в покер-румах через GipsyTeam, вы получите статистику рейка, бонусные очки для покупок в магазине, эксклюзивные акции и расширенную поддержку.s