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

22
Статистика
Статистика
22
Статистика темы
  • Популярность
    Топ-4978
  • Постов
    2,261
  • Просмотров
    172,152
  • Подписок
    22
  • Карма автора
    -45
1 24 25 26 27 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 24 25 26 27 114
1 человек читает эту тему (1 гость):
Зачем регистрироваться на GipsyTeam?
  • Вы сможете оставлять комментарии, оценивать посты, участвовать в дискуссиях и повышать свой уровень игры.
  • Если вы предпочитаете четырехцветную колоду и хотите отключить анимацию аватаров, эти возможности будут в настройках профиля.
  • Вам станут доступны закладки, бекинг и другие удобные инструменты сайта.
  • На каждой странице будет видно, где появились новые посты и комментарии.
  • Если вы зарегистрированы в покер-румах через GipsyTeam, вы получите статистику рейка, бонусные очки для покупок в магазине, эксклюзивные акции и расширенную поддержку.