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

Последний пост:26.11.2023
22
1 4 24 25 26 27 46 114
  • Стартеры можешь не проверят, там косяк.
    Сейчас переделываю стартеры. Уже в 5 раз увеличил скорость.
    44/314
    Ответить Цитировать
    0
  • БиллиУбили, Блин, невозможно уже читать твои посты о том как определить комбинацию из 5-ти карт.
    Сначала я дал тебе наводку, на самый быстрый алгоритм, потом пришел Jak и дал готовый файл и подробную инструкцию, как им пользоваться. Надо дать должное его терпению, он пытался тебе тщательно все объяснить. Вот ссылка на начало объяснения. Прочитай внимательно несколько раз, там важно каждое слово. Если все равно не поймешь, как устроен этот массив, не беда, тебе это не обязательно - прими это как должное, как "черный ящик". Все что тебе нужно - это преобразовать код с Делфи на свой язык программирования. Всего одна строчка кода:

    int a=HR5[ HR5[ HR5[ HR5[ HR5[53+c1]+c2]+c3]+c4]+c5];

    Да, она кажется ужасной и непонятной, но поверь, это намного проще, чем написать весь код с нуля (то что ты пол-года пытаешься сделать и не сдвинулся ни на шаг). Ладно, попробую тебе еще один раз объяснить, как устроен этот массив. Представь детскую настольную игру, где ты кидаешь кубик и ходишь по кружочкам и если на финальном кружочке есть стрелка, то переходишь по ней на другой кружочек. Так вот у тебя есть такая длинная цепочка кружочков и вместо кубика ты вытягиваешь карту и ходишь от 1 до 52. На том месте куда ты пришел есть стрелка куда тебе нужно переместиться (вместо стрелки номер кружочка на какой нужно перейти). Перемещаешься на этот кружочек и снова тянешь карту и ходишь от 1 до 52, а там снова стрелка. И так, после 5-ти карт и 5-ти перемещений ты попадаешь наконец на кружочек на котором написано Приз в виде абстрактного числа, которое однозначно определяет силу комбинации 5-ти карт (заранее рассчитанное число с помощью хитроумного алгоритма, который знать не обязательно). Этот массив (эта игра) так хитроумно устроен, что одинаковые комбинации карт ссылаются на одну и ту же ячейку (одинаковыми считаются набор карт, где поменян порядок следования и карты одного ранга, когда флеш невозможен). Поэтому на одну финальную ячейку с Призом ведут сотни стрелочек из различных мест. Благодаря этому удается сжать пятимерный массив невероятных размеров [52, 52, 52, 52, 52] до вполне разумного по размерам одномерного массива.

    Если тебе не удастся перевести эту одну строчку кода, то лучше завязывай с программированием - это не твое.
    Похоже ты не представляешь на какого уровня задачу ты позарился. Эта проблема лишь одна из многих, впереди еще с десяток намного более сложных проблем.
    Сообщение отредактировал Galax - 11.12.2019, 16:20
    19/52
    Ответить Цитировать
    2
  • 5 баллов! Круто объяснил!

    Это одна из самых простых проблем в расчете китая.
    45/314
    Ответить Цитировать
    0
  • Цитата (c00l0ne @ 11.12.2019)
    Ждите вечером перезапилю видос... Посмотрим на скорость расчета, если Жак не будет доделывать, сам доделаю , декомпилятором делфей и дизассемблером пользоваться умею


    поздно https://twitch.tv/c00l0ne
    99/882
    Ответить Цитировать
    0
  • Galax, спасибо за объяснения.
    В своё оправдание хочу сказать, что
    а) с июля по декабрь у меня был творческий отпуск
    б) определить силу комбинации я таки могу, но с недостаточным быстродействием
    в) спасибо, за предложение воспользоваться чёрным ящиком, но...смысл? И ты, и Jak, предлагает поверить, что каким-то хитроумным способом он даёт правильные результаты.
    И в то же время для стартер прога кладёт вниз и даёт оценку МО около 10 очков.
    Если бы я увидел код(да даже псевдокод), который смог бы разобрать/проверить...тогда бы это ещё имело смысл. Пользоваться непроверенным кодом(ещё раз, НИКОГО НЕ ХОЧУ ОБИДЕТЬ) - ну, СПАСИБО, конечно, но вдруг там косяк? (в третий раз повторюсь, что никого ни в чём не обвиняю)
    Цитата (Galax @ 11.12.2019)
    int a=HR5[ HR5[ HR5[ HR5[ HR5[53+c1]+c2]+c3]+c4]+c5];

    Если всё дело в этой формуле...то на мой взгляд здесь запрограммирована обычная сортировка. Ведь Jak прямым текстом говорит: Массив устроен таким образом, что если мы поменяем местами с1,с2,с3,с4,с5 и будем брать с2,с5,с1,с4,с3 - все равно ответ будет таким-же. То есть по сути этот "волшебный" массив можно заменить операцией сортировки( сложность NlogN, для 5 карт это микросекунды)
    Подумаю ещё над созданием такого массива, но недолго..сам же пишешь, впереди намного более сложные проблемы ))
    199/741
    Ответить Цитировать
    0
  • Цитата (Jak @ 11.12.2019)
    Стартеры можешь не проверят, там косяк.
    Сейчас переделываю стартеры. Уже в 5 раз увеличил скорость.


    я старался
    https://www.twitch.tv/videos/520020040
    100/882
    Ответить Цитировать
    0
  • Цитата
    Если всё дело в этой формуле...то на мой взгляд здесь запрограммирована обычная сортировка.


    Квадратные скобки в Делфи означают извлечение из массива.
    а = HR5[53] - дает 53-й элемент одномерного массива HR5.
    Такие извлечения делаются пять раз (как матрешки одна в другой).
    Все таки лучше завязывай...
    20/52
    Ответить Цитировать
    0
  • Galax, зачем мне завязывать?
    По сути, как я предполагаю, эти скакания 5 раз просто-напросто сортируют исходную комбинацию.
    То есть сортировка любой комбинации как бы произведена заранее и на ней экономится время.
    Ну, ок. Я считаю, что основное время терял не на самой сортировке, а на определении силы комбинации "онлайн"( что гораздо затратнее по ресурсам).
    Да, использовать массив готовых комбинаций - значительный буст, с этим спорить бессмысленно.
    Ещё раз спасибо за ПОДСКАЗКУ.
    200/741
    Ответить Цитировать
    0
  • Про первый стартер , а попробуй 10ку не в масть с 4-кой. Мож она флеши посчитала.
    Если взять , то лучший уже / /
    46/314
    Ответить Цитировать
    0
  • Цитата (Jak @ 11.12.2019)
    Про первый стартер , а попробуй 10ку не в масть с 4-кой. Мож она флеши посчитала.
    Если взять , то лучший уже / /


    специально такой взял ...
    посмотреть как она реагирует на флеш дро и пару и на даму к фантазии ...

    ты если сам не разберешься скидывай исходники я доделаю , вышлю тебе готовый вариант ... но с условием что ты его нигде не опубликуешь )
    101/882
    Ответить Цитировать
    1
  • Подскажите, как решить задачу:

    Пример. Мы без позы, есть ряд


    В колоде 42 карты, все дамы вышли.
    Ауты только на сет/карэ.
    Предположим что я не знаю сколько дилер положил тузов в колоду, но знаю что сейчас есть 82 комбы сетов.

    Как посчитать общие шансы на улучшение до трипса до 4й улицы включительно? Ну или общие шансы.
    9/9
    Ответить Цитировать
    0
  • Marauder62, ты бы изложил сначала свою модель. Как ты в её рамках хочешь что-либо (по)считать. Если тебе нужны цифры, то это наверно к математикам.

    2All
    нормально так держит нагрузку, я даже не ожидал
    std::vector<int> v; // {1, 2, 3};
    for(int j=0; j < 999999; j++)
    {
    v.clear();
    v.push_back(1);
    v.push_back(rand()%14);
    v.push_back(rand()%14);
    v.push_back(rand()%14);
    v.push_back(rand()%14);
    v.push_back(rand()%14);
    v.push_back(rand()%14);
    v.push_back(rand()%14);
    v.push_back(rand()%14);
    v.push_back(rand()%14);
    int n1 = rand()%14;
    // auto
    std::vector<int>::iterator it = std::find(v.begin(), v.end(), n1);
    if (it != v.end())
    {
    temp++;
    }
    }
    менее секунды, ну или практически мгновенно.
    201/741
    Ответить Цитировать
    0
  • Господа, особенно Galax и Jak!
    Возникла следующая проблем(к)а. Как к известным картам(1, 2, 3 и т.д. в линии) найти "продолжение", которое приводит к комбинации старше "А хай"? На примере 3ёх карт я рассуждаю так:
    генерируем С(49,2)/2 = 588 "пар" и, соответственно, делаем 588 запросов в массив комбинаций.
    Вот я и думаю, а не обладает ли "волшебный" массив ещё какими-либо свойствами, позволяющими сократить кол-во запросов?
    И сразу второй, не менее важный вопрос: нет ли в массиве сортировки по старшинству комбинации? Тогда бы имея текущую комбинацию(например, ) можно было найти ВСЕ комбинации старше(или младше). Сами понимаете, делать 2.6кк запросов в массив как-то не комильфо.
    202/741
    Ответить Цитировать
    0
  • Цитата (БиллиУбили @ 16.12.2019)
    генерируем С(49,2)/2 = 588 "пар" и, соответственно, делаем 588 запросов в массив комбинаций.

    Для произвольных 3ёх карт нахождение всех "продолжений", которые составят комбинацию ~ 25к/с
    Сортировка(перед запросом в массив) тормозит всё это дело раз в 5.
    Сейчас попробую искать "продолжения" для 2ух произвольных карт, потом надо думать, что делать дальше.
    Возможно есть способ быстро находить комбинации, в которых входят произвольные карты и уже оттуда выковыривать "продолжения".
    203/741
    Ответить Цитировать
    0
  • Давно пора копать, а ты все лопату изобретаешь.
    Цитата (БиллиУбили @ 17.12.2019)
    Сортировка(перед запросом в массив) тормозит всё это дело раз в 5.

    Какая сортировка?

    Просто 5 обращений к массиву!

    Тем более 3 карты есть. Сразу для них найди смещение в массиве См3. А дальше два обращения для каждой пары по этому смещению и все!
    47/314
    Ответить Цитировать
    0
  • Цитата (Jak @ 17.12.2019)
    Давно пора копать, а ты все лопату изобретаешь.

    Ты прав, друг. Прав, как (почти) всегда.
    Я сейчас таки попробую поиском по массиву, но уже чувствую, что придётся пересесть на
    готовый
    твой велосипед.
    204/741
    Ответить Цитировать
    0
  • БиллиУбили, сложно удержаться
    "Поиск по массиву"

    9renim.jpg


    У меня такое ощущение складывается что ты на квантовом компутере пишешь) кубиты вращаешь)

    Зачем тебе продолжения? Дерево Монте Карло же есть... Там теоретически все продолжения... А практически мы выберем топ вариант, чтобы оценить вариант достаточно просчитать по сто раз глубину...
    Получается обычная рекурсивная функция в 10 строк
    Пусть s матрица текущего состояния, это наш борд сброс и карты опов...
    Из карт своих составляем дерево Монте Карло... 32 варика будет если мне память не изменяет...
    УглуБляемся для каждого варика , т.е. вызываем нашу функцию для s1-s32 ... И т.д. до конечного хода, из которого черпаем исходы... Обновляем веса до корня...
    И так k симуляцией... k выбирается исходя из мощности железа...
    Вы Монте Карло никогда не программировали? Я помню в 10 классе на олимпиадах у нас были похожие уже задачи...
    Сообщение отредактировал c00l0ne - 17.12.2019, 12:59
    102/882
    Ответить Цитировать
    0
  • Цитата (c00l0ne @ 17.12.2019)
    "Поиск по массиву"

    Если у меня есть массив со всеми комбинациями, то для поиска "продолжения"...надо всего лишь найти ячейки, где присутствует "основа". Тогда оставшиеся 2 карты и будут "продолжением".
    Если у тебя есть менее ресурсозатратный алгоритм - милости прошу к нашему шалашу
    Тут как бы идёт речь об обратной задаче. Если в случае поиска комбинации по 5 картам чётко доказано, что массив быстрее, то для обратной задачи не всё так очевидно.

    Цитата (c00l0ne @ 17.12.2019)
    Дерево Монте Карло же есть...

    Конкретику давай. Если у меня 588 вариантов закончить, то на каком этапе мне подрубать Монте - Карло? Выкинуть из них 450?
    205/741
    Ответить Цитировать
    0
  • БиллиУбили, см выше, алгоритм за тебя уже написал... Может исходники тебе выкласть?
    Единственный косяк в том что тебе придется палить три карты опов алгоритму... Потому что оппоненту ход параллельно сложно будет просчитать... Это возможно только на супер железе 1к ядер+

    Пс но от такого упрощения есть плюшки, софт будет менее склонен к рандомным действиям в сложных ситуациях, но цифры будут завышены
    103/882
    Ответить Цитировать
    0
  • Цитата (c00l0ne @ 17.12.2019)
    БиллиУбили, см выше, алгоритм за тебя уже написал... Может исходники тебе выкласть?

    Метод-Карло в моём понимании - симуляция всей выборки случайными значениями. То есть весь расчёт на то, что решение найдётся быстрее(за меньшее число испытаний).
    Ты упорно талдычишь одно и то же: вот 32 путя...и..хоп(!) по щучьем велению(за один-два прогона), мы узнаём, какой путь самый перспективный.
    Про веса и корни вообще ничего не понятно. Как и про неизвестную функцию s, которую вдобавок нужно вызывать(считать) каждый раз заново. Это не алгоритм, а набор маняхотелок.
    206/741
    Ответить Цитировать
    0
1 4 24 25 26 27 46 114
1 человек читает эту тему (1 гость):
Зачем регистрироваться на GipsyTeam?
  • Вы сможете оставлять комментарии, оценивать посты, участвовать в дискуссиях и повышать свой уровень игры.
  • Если вы предпочитаете четырехцветную колоду и хотите отключить анимацию аватаров, эти возможности будут в настройках профиля.
  • Вам станут доступны закладки, бекинг и другие удобные инструменты сайта.
  • На каждой странице будет видно, где появились новые посты и комментарии.
  • Если вы зарегистрированы в покер-румах через GipsyTeam, вы получите статистику рейка, бонусные очки для покупок в магазине, эксклюзивные акции и расширенную поддержку.s