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

Последний пост:6 июля
18
1 2 3 4 5 24 82
  • Цитата (БиллиУбили @ 30.1.2019) *
    уфф...удалось ввести подьём по 3 карты(кладём 0,1 или 2 карты)
    Для линии из 3 карт время расчёта по сравнению с подьёмами по 2 карты(кладём 0,1 или 2 карты) увеличилось более, чем в 2 раза.
    Для колоды 25 карт:
    Спойлер: Показать

    Вероятность закончить комбинацию уменьшилась:
    Спойлер: Показать

    Теперь жду ваш совет, что делать дальше:
    подрубать 2 линию или поработать надо оптимизацией алгоритма? Принимаю ваши комментарии до завтрашнего утра.

    поправка 3 карты(кладём 0,1 или 2 карты) -> 3 карты(кладём 1 или 2 карты)

    Никто ничего не пишет потому, что думаю все перестали окончательно понимать, что ты имеешь ввиду. Кто нибудь что нибудь понял? Не мог бы ты поподробней, желательно на примерах написать, что ты имеешь ввиду под " подьём по 3 карты(кладём 0,1 или 2 карты)"
    3/35
    Ответить Цитировать
    0
    Это сообщение пока никто не оценил.
  • diklee, ну, тут всё просто. Имеем незаконченную (руку)линию и какую-то колоду. Как нам посчитать вероятность закончить(собрать живую) руку за N подьёмов?
    Очевидно перебрать все варианты "замощения" и найти число успешных.
    Теперь имеем правило подьёма "берём одну карту и её кладём". Пространства для творчества 0, однако если колода позволяет(в ней есть нужные карты) рука таки закроется в Х% испытаний.
    Меняем правила, по которым осуществляется подьём. Мы берём 1 карту, но необязательно её класть, можно сбросить. Как понять, что на 5ом подьёме стоит выкинуть какую-то карту, а не положить? Надо сравнить две вероятности для двух "новых" рук(с картой ИЛИ без) за 5-1 = 4 подьёма.
    Снова меняем правила. Приходят 2 карты, положить можно обе, одну или 0. Как узнать, сколько класть? Сравнить вероятность собрать руку с добавленными картами(от 0 до 2) за число подьёмов, уменьшенное на 1.
    Правила можно поменять ещё раз. Приходят по 3 карты, мы обязаны положить (любые) 2. В алгоритме ничего не меняется принципиально, разве что колода начинает кончаться быстрее.
    Сорри, что обьяснил сумбурно. Посмотри, как решается задача https://ru.wikipedia.org/wiki/%D0%A5%D0%B0%D0%BD%D0%BE%D0%B9%D1%81%D0%BA%D0%B0%D1%8F_%D0%B1%D0%B0%D1%88%D0%BD%D1%8F, кое-что должно проясниться
    19/734
    Ответить Цитировать
    0
    Это сообщение пока никто не оценил.
  • БиллиУбили, странный алгоритм ... в идеале надо бегать по дереву ходов - искать ветки более менее адекватные ... их прокачивать ...
    5/511
    Ответить Цитировать
    0
    Это сообщение пока никто не оценил.
  • c00l0ne, да, друг, ты недалеко от истины.
    Рекурсивное разложение споткнулось на колоде уже из 10 карт.
    Поэтому, возвращаясь к нашему примеру https://forum2.gipsyteam.ru/index.php?viewtopic=142685&view=findpost&p=5960212
    мы не сможем перебрать все подьёмы(по 3 карты) до заполнения всех "пустых" ячеек. Это займёт огромное время.
    Поэтому попробуем план "Б". Сначала найдём все варианты из 6 карт, которые нас устроят: это, например ,, и т.д. А потом посчитаем вероятность собрать эти 6 карт из колоды двумя наборами. (некоторые варианты, которые нас устроят будет невозможно собрать, нужных карт просто не будет в колоде).
    Общее число вариантов вытащить 6 карт из колоды тоже считается.
    20/734
    Ответить Цитировать
    0
    Это сообщение пока никто не оценил.
  • Цитата (БиллиУбили @ 1.2.2019) *
    c00l0ne, да, друг, ты недалеко от истины.
    Рекурсивное разложение споткнулось на колоде уже из 10 карт.
    Поэтому, возвращаясь к нашему примеру https://forum2.gipsyteam.ru/index.php?viewtopic=142685&view=findpost&p=5960212
    мы не сможем перебрать все подьёмы(по 3 карты) до заполнения всех "пустых" ячеек. Это займёт огромное время.
    Поэтому попробуем план "Б". Сначала найдём все варианты из 6 карт, которые нас устроят: это, например ,, и т.д. А потом посчитаем вероятность собрать эти 6 карт из колоды двумя наборами. (некоторые варианты, которые нас устроят будет невозможно собрать, нужных карт просто не будет в колоде).
    Общее число вариантов вытащить 6 карт из колоды тоже считается.

    Почему не можем перебрать все подъемы по 3 карты? У нас есть уже пришедшая рука АА2. Варианта два туз либо вниз либо вверх. Надо рассмотреть их отдельно. Остаётся 40 карт. Из них надо перебрать все варианты по 3 карты. Это 40!/(37!*3!). 9880 вариантов, не так и много.
    4/35
    Ответить Цитировать
    0
    Это сообщение пока никто не оценил.
  • Цитата (diklee @ 1.2.2019) *
    9880 вариантов, не так и много

    этот подьём мы знаем. Но я решал немного другую задачу. Найти ЕВ для руки И любых следующих подьёмов(а не просто АА2). Там число вариантов 4 подьёма = С(колода, 3). Потом для каждого(!) подьёма надо передать следующему вызову рекурсивной функции новую колоду(без 3карт) для 12(!) вариантов разложения каждого подьёма. Очевидно, что это - тупиковый путь. Перебор не потянул даже колоду из 10 карт.


    Но зато я провёл эксперимент "пацан к успеху шёл".
    Имеем колоду из N(13) карт. И две линии: в мидл 4 карты, внизу - 3 карты(топ пока не рассматриваем, его как бы нет)
    Для данной "руки" мы можем посчитать абсолютно все "успешные" завершения: как для нашей колоды, так и для "полной". Короче, для любой.
    Теперь мы введём понятие "пути к успеху". Оно равно отношение "успешных" завершений ко всем вариантам завершения.
    "Успешным" мы можем считать завершением либо к руке, которая позволяет фуллколода, либо к руке, которая позволяет наша колода.
    Пока это не важно, это считается примерно одинаковое время.
    Теперь результаты.
    Для 13 карт мы имеем 1716 вариантов(С(13,3)*3, порядок вытаскивания карт важен) завершения.
    Из них 126 успешны. Таким образом, "путь" составляет ~ 13.6 чего там
    Теперь мы решаем следующую задачу: достаём из колоды 1 карту и решаем, что делать: класть в мидл, класть вниз, или сбросить. Также примем, что после этого у нас останется либо 2 свободных места, либо 3, которые мы закроем одним подьёмом(да, это немного неправильно, но смотрим дальше).
    Если мы не кладём эту карту никуда, то число вариантов завершения сократится до 1320(число карт в колоде уменьшилось до 12), а число "успешных" - до 78.
    Таким образом, новый "путь" составит ~ 16.9 чего там
    Теперь положим карту в мидл. Число всех последующих вариантов завершения сократится до 132(заново посчитано), а вот успешных уменьшиться до 8. То есть "путь" составит ~ 16.5
    Теперь положим карту вниз. Число последующих вариантов "успешного" завершения также сократится до 132(свободных мест столько же, кол-во карт в колоде столько же), а вот число успешных составит 40. То есть "путь" составит 3,3
    Нетрудно понять, какой вариант из 3 стоит выбрать.

    ЗЫ Числа посчитаны для конкретных 13 карт в колоде и для конкретных 4 и 3 карт в линиях.
    Путь не отнормирован на очки "успешного успеха".
    Завтра я прогоню алгоритм на 40карточной колоде и если всё будет норм, буду считать подьёмы честно(сначала по формуле приходят 2 карты, можно положить {1,2}, потом можно положить {0,1,2}, потом приходят 3, можно положить {1,2}. В общем, всё как вы любите.
    ЗЫЫ Естественно, путь зависит от кол-ва оставшихся подьёмов. Но главное, чтобы он считался какое-то малое время.
    21/734
    Ответить Цитировать
    0
    Это сообщение пока никто не оценил.
  • да ты забей ты делаешь нудятину ... на строки свои тоже забей ...

    1) перейди на массивы из цифор (integer) быстрее всего считается... процы х64 под них оптимизированы
    2) алгоритм плохой ... ты делаешь полный перебор ... а надо методом монте карло считать то что нам нужно ...
    3) нужно дерево куда мы все это записывать будем ...
    4) начинаем крутить раздаем - считаем - записываем ...
    5) анализируем результаты , выбираем правильный розыгрыш или как поставить стартер исходя из максимального евшки той или другой ветки...

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

    могу тебя поконсультировать в дальнейшем ... но хотелось бы 10$ в час получить )

    пс но учитывая что ты строками в программе пользуешься, ты случайно не гуманитарий ?)troll.gif

    пс2 хотел тебе тест гуманитарий -технарь предложить :
    но тест провальный оказался
    Спойлер: Показать


    добавься в скайп
    Сообщение отредактировал c00l0ne - 2.2.2019, 4:02
    6/511
    Ответить Цитировать
    1
  • БиллиУбили, или на дискорд канал , здесь тебе точно никто не будет помогать ... форум общественное место ...
    на твиче у меня там ссылка на дискорд https://www.twitch.tv/c00l0ne
    7/511
    Ответить Цитировать
    0
    Это сообщение пока никто не оценил.
  • Цитата (c00l0ne @ 1.2.2019) *
    могу тебя поконсультировать в дальнейшем ... но хотелось бы 10$ в час получить )
    спасибо, я уже понял твой уровень, посмотрев твой стрим в ноябре 18ого. Очень сильно сомневаюсь, что за 3 месяца что-то изменилось.
    Я тебя попросил помочь: выложи абсолютно точно решённое разложение любого* подьёма(не важно как, в Екселе, на бумажке, аналитически или ещё как). Зачем мне твои вскукареки "РРЯЯ!! ничего не получится!! нужны супермощностя, а их нет!!!"?

    *любого = любого на твой вкус из тех, для которых у тебя это решение есть
    22/734
    Ответить Цитировать
    0
    Это сообщение пока никто не оценил.
  • Так, эксперимент "пацан к успеху шёл №2".
    Колода из 30 карт, мидл и низ те же(4 и 3 карты).
    В начале общее число завершений - 21924, из них успешных - 1208
    Вытаскиваем карту А, и решаем, куда её положить.
    Предположим, вниз. Число успешных завершений - до 378.
    Теперь в мидл. Число успешных падает до 30.
    Не знаю, нужно ли нам здесь общее кол-во завершений или можно просто сравнить число успешных между собой.
    Вытаскиваем карту Б. Если положить в мидл, число вариантов до успеха составит 92, а вниз - до 0(ну, вот такая "неудачная" карта попалась - как говорится, и ни туда, и ни сюда).
    Теперь попробуем считать строго подьём за подьёмом.
    23/734
    Ответить Цитировать
    0
    Это сообщение пока никто не оценил.
  • diklee, сделал твоё упражнение. Ты прав, для 40 карт в колоде всего 9880 вариантов выбрать след. подьём.
    Если мы кладём вниз, то существует 1444 удачных завершений.
    Если НЕ кладём - 2280*
    Вероятности завершить руку: ~15% и 20% соответственно
    Считает секунды.
    МОжешь ещё какую-нибудь задачку подкинуть (пока я разбираюсь с более, чем одним подьёмом)

    *2280 = 2022 (дважды посчитал подьём типо )
    Сообщение отредактировал БиллиУбили - 3.2.2019, 0:11
    24/734
    Ответить Цитировать
    0
    Это сообщение пока никто не оценил.
  • Цитата (БиллиУбили @ 2.2.2019) *
    diklee, сделал твоё упражнение. Ты прав, для 40 карт в колоде всего 9880 вариантов выбрать след. подьём.
    Если мы кладём вниз, то существует 1444 удачных завершений.
    Если НЕ кладём - 2280*
    Вероятности завершить руку: ~15% и 20% соответственно
    Считает секунды.
    МОжешь ещё какую-нибудь задачку подкинуть (пока я разбираюсь с более, чем одним подьёмом)

    *2280 = 2022 (дважды посчитал подьём типо )
    15 и 20 гуд. Но "секунды" это непозволительно долго, веть следующий шаг это расчет ситуации на ход раньше, где эти секунды тебе надо будет повторить условно говоря эти 9880 раз, уже не 9880, но не суть. Если конечно речь идёт о полном абсолютно точном переборе. Если будут решения таких ситуаций с абсолютным перебором, пусть не на ранних стадиях, но все же, то будет хоть с чем сравнивать решения по твоему методу, я его плохо понимаю, точней вообще нихера не понятно
    5/35
    Ответить Цитировать
    0
    Это сообщение пока никто не оценил.
  • БиллиУбили,
    Цитата (diklee @ 2.2.2019) *
    Если конечно речь идёт о полном абсолютно точном переборе.
    В том то и дело, что нет никакого моего метода. Полный перебор не посчитать. Поэтому приходится маневрировать.
    Например:
    -заранее обрывать ветки перебора, ведущие к комбинации "старшая карта" в нижней линии
    -на ранних подьёмах предположить, что путь подьёмами по 3 карты(нужно оставить 2) приблизительно равен пути подьёмами по 2карты(нужно оставить 2), который считается намного быстрее. Но это приближение, так как подьём по 3 карты дополнительно уменьшает колоды на 1 карту(по сравнению с подьёмом по 2 карты).
    - на ранних подьёмах можно не считать пути для разного разложения подьёма точно, а лишь делать их оценку, достаточную для сравнения путей(а, значит, и выбирать разложение подьёма).
    Если у тебя есть какие-то соображения - пиши.
    25/734
    Ответить Цитировать
    0
    Это сообщение пока никто не оценил.
  • Цитата
    спасибо, я уже понял твой уровень, посмотрев твой стрим в ноябре 18ого[/quote
    гы
    8/511
    Ответить Цитировать
    0
    Это сообщение пока никто не оценил.

  • Какие у кого будут идеи сократить(упростить) полный перебор?
    26/734
    Ответить Цитировать
    0
    Это сообщение пока никто не оценил.
  • БиллиУбили, ты странный человек, ты реально думаешь кто то тебе подскажет , как сделать софтину а ты потом на этом наваришься ?troll.gif
    9/511
    Ответить Цитировать
    0
    Это сообщение пока никто не оценил.
  • Это мне напоминает то, как вроде как работают шахматные движки, ветвь вариантов, отсечения не перспективных по хитрому алгоритму, количественная оценка позиции в пешках. В китае должна быть в кушах.ни в шахматных ни в китайских я далек от понимания, но почему то, интуитивно кажется, что китай должен быть проще.
    2й пункт все равно не понятен, как можно вместо 3х, две поднимать.
    6/35
    Ответить Цитировать
    0
    Это сообщение пока никто не оценил.
  • К сожалению правил китайского покера я не знаю, но несколько раз видел как играют - навскидку похоже на какой-то пасьянс (просьба не сильно смеятся, если что ;))
    По теме программы. Скорее всего задача решается обычным перебором (хотя, возможно я ошибаюсь). Трудности по скорости у тебя из-за неверно выбранных типов данных (видел у тебя строки, типы с плавающей запятой - они ведь все жутко медленные). В крайнем случае используй только целые числа. Но, можно все ускорить на несколько порядков, используя в основном битовые операции. Для понимания, что я имею ввиду, к примеру все ранги можно представить с помощью двух байт: 0001111111111111 - нулевой бит 2-ка, 1-й - 3-ка, ...,12-й - туз. И все рассчеты проводить за счет битовых (очень быстрых) операций процессора.
    Сообщение отредактировал EternalRain - 3.2.2019, 3:39
    1/14
    Ответить Цитировать
    0
    Это сообщение пока никто не оценил.
  • Цитата (c00l0ne @ 2.2.2019) *
    ты странный человек, ты реально думаешь кто то тебе подскажет , как сделать софтину а ты потом на этом наваришься
    когда люди обмениваются идеями, их у них меньше не становится.

    diklee,
    Цитата (diklee @ 2.2.2019) *
    2й пункт все равно не понятен, как можно вместо 3х, две поднимать
    Предположим, у тебя 2 карты на флеш внизу, 3 свободных места и 2 подьёма. Если подьёмы по 2 карты, то ты в любом случае закроешь флеш, если за оставшиеся 2 подьёма(4карты) тебе попадётся не менее 3 карт нужной масти. Как бы они не распределись по подьёма(1-2 или 2-1). То есть неважно, в какой очередности ты их сыграешь(сначала 4ый, а потом 5ый или наоборот). А если подьёмы по 3 карты, то может возникнуть ситуация, что на 4ом подьёме тебе придут 3 карты нужной масти, а в 5-ом -0(ну, или наоборот). Вроде бы ты вытащил 3 карты нужной масти, но собрать флеш не смог.
    Цитата (EternalRain @ 2.2.2019) *
    В крайнем случае используй только целые числа. Но, можно все ускорить на несколько порядков, используя в основном битовые операции
    Спасибо за совет, но число вариантов растёт экспоненциально(если не круче). К целым числам перейти можно, но сначала неплохо бы разобраться с логикой.
    27/734
    Ответить Цитировать
    0
    Это сообщение пока никто не оценил.
  • БиллиУбили,
    Цитата (БиллиУбили @ 2.2.2019) *
    Какие у кого будут идеи сократить(упростить) полный перебор?
    Так, ну идея такая. В нижней линии есть оганиченное кол-во "успешных" комбинаций. Составим этот список. Напротив каждой комбинации укажем, какие карты нам нужно вытащить из колоды.
    {} -> {}
    {} -> {}
    {} -> {}
    {} -> {}
    ...
    {} -> {}
    ...
    Подьёмов осталось 3(подьём на пикче пока не рассматриваем). Колода известна. Значит, можно однозначно посчитать вероятности "вытащить" нужные карты за 3 подьёма.
    Сделаем пока это.
    28/734
    Ответить Цитировать
    0
    Это сообщение пока никто не оценил.
1637 постов
1 2 3 4 5 24 82
1 человек читает эту тему (1 гость):
Зачем регистрироваться на GipsyTeam?
  • Вы сможете оставлять комментарии, оценивать посты, участвовать в дискуссиях и повышать свой уровень игры.
  • Если вы предпочитаете четырехцветную колоду и хотите отключить анимацию аватаров, эти возможности будут в настройках профиля.
  • Вам станут доступны закладки, бекинг и другие удобные инструменты сайта.
  • На каждой странице будет видно, где появились новые посты и комментарии.
  • Если вы зарегистрированы в покер-румах через GipsyTeam, вы получите статистику рейка, бонусные очки для покупок в магазине, эксклюзивные акции и расширенную поддержку.