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

22
Статистика
Статистика
22
Статистика темы
  • Популярность
    Топ-251
  • Постов
    2,261
  • Просмотров
    173,567
  • Подписок
    22
  • Карма автора
    -45
1 106 107 108 109 114
  • читай выше я там добавил, перегрузи страницу

    Ответить Цитировать
    273/314
    + 0
  • Jak @ 28.04.23 

    читай выше я там добавил, перегрузи страницу

    Я читал это ещё до написания... Все кто с cuda встречаются первые разы одно и то же пишут, про лопату и рабочих которые таскают пустые мешки 

    К сожалению все так и есть, микрокод один и если у нас есть условный оператор if else 

    То потоки которые условие не выполняют будут ждать пока выполнятся потоки у которых условие выполняется на их данных , потом потоки выполнят условие else а те которые выполнили будут простаивать .... Такова плата за тысячи потоков 

    В остальном же рекурсивные алгоритмы идеально ложатся под вычисления cuda...

    Выпрямлять алгоритм надо, избегать ветвлений if else

    Сообщение отредактировал c00l0ne - 28.4.2023, 13:39
    Ответить Цитировать
    792/882
    + 0
  • Рекурсия запрещена

     

    на CUDA писать не могу, карта AMD, потому пишу на OPENCL

     

    я щас примерно посчитал, у меня впустую работают примерно 60-70% ядер, надо их просто не запускать с пустыми данными.

    Ответить Цитировать
    274/314
    + 0
  • Jak @ 28.04.23 

    Рекурсия запрещена

    Ну поэтому и выпрямлять надо алгоритм 

    Грубо говоря в пять форов:

    For step1 

      For step2 

         For step 3

             For step4 

                bingo check royalty 

                Calc ev 

              Calc ev 

        ......

     

    Jak @ 28.04.23 

    OPENCL

    Да та же рожа, вид сбоку 

    Пс ну вы ваще    если честно, занялись gpu и тут не отписались, я бы подготовился получше... Эх , этот вот советско-российский менталитет , сидеть в каморке , кодить... В одиночку...

    Ответить Цитировать
    793/882
    + 0
  • Так и делаю. Но частота каждого ядра меньше и многие работают впустую.

     

    Эти все циклы каждое ядро будет считать кучу времени. Надо разбить на миллионы маленьких. Тогда будет быстро.

    Ответить Цитировать
    275/314
    + 0
  • Jak @ 28.04.23 

    частота каждого ядра меньше и многие работают впустую.

    Чиво?

    Ну все же не так работает как вы думаете, там гпу и дубляторы 

    Ну типо ячейки вычислительные одинаковые но со своими регистрами 

    Этакие fpu модельки для вычислений... Код крутиться один и каждый модуль может пользоваться своими регистрами , обращаясь к своей памяти там в массиве 

    Тормозит скорее всего из-за обращений к памяти, которая устроена у вас плохо , там кеш быстрый а сама vram ddr5-6 тормозная 

    Запустите профилер какой нибудь, скорее всего я имхо прав 

    Профилер покажет большие траты на обращение к памяти vram 

    Вам надо все элементы массивов поместить в private memory , все что влезет

    Все что попадает в приватную либо кешится либо в регистры пихуется... А это сверх быстро, если влезет HR5  то будет бинго х1000, если HR5 не влезет то придется смириться с x50-100

    Сообщение отредактировал c00l0ne - 28.4.2023, 14:03
    Ответить Цитировать
    794/882
    + 0
  • А эти миллионы маленьких циклов будут запускаться не синхронно, а как кому удобно, значит их еще надо синхронизировать в нужном порядке, что-то раньше, что-то потом после подсчета. Чтобы посчитанные данные не пропали.

    Ответить Цитировать
    276/314
    + 0
  • Jak, ой не не не не это утопия, у нас есть иерархия в алгоритме, что когда посчитать надо и куда сохранить , какие миллионы параллельных потоков дядь ...

    Ответить Цитировать
    795/882
    + 0
  • Пока еще не научился запускать другие kernel из основного kernel. Ругается постоянно.

    Ответить Цитировать
    277/314
    + 0
  • Jak @ 28.04.23 

    Пока еще не научился запускать другие kernel из основного kernel. Ругается постоянно.

    Повторюсь ищите bottleneck , gpu это железо которое надо очень аккуратно нагружать, где то водичка протекает в вашем алгоритме, обращения к памяти скорее всего, ушел поспать

    Ответить Цитировать
    796/882
    + 0
  • Ты прям руководитель проекта.

    Ответить Цитировать
    278/314
    + 0
  • Из-за слабости мощностей и несовершенства алгоритма, мы считаем ЕВ таким образом:

     

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

     

    НО!

     

    Когда мы считаем роялти для 2 карт, мы не берем в расчет, что третья карта у нас будет в сносе и не должна участвовать в дальнейших расчетах. Она у нас как бы в колоде. Ведь по правилам ананаса, нам дают три карты. 

     

    Вопрос: на сколько влияет эта третья карта на дальнейшие расчеты? Ладно если она пустышка, а если она тоже нам нужна? Она наш нужный аут. Мы должны ее выкинуть, а мы ее опять в колоду замешали. И она опять может нам прийти.

     

    При последнем подъеме, когда имеем 11 карт. Тут все легко, перебираем все пары и наш метод верный. Можем все перебрать. И все совпадает.

     

    Когда имеем 9 карт. Вот тут уже есть расхождения. В разных вариантах, в зависимости от наличия флешей и аутов, ошибка в роялти 0,1-0,3 куша.

     

    Когда имеем 7 карт, будет 2 уровня с приблизительными расчетами. Вот тут ошибка уже может достигать 10%. При роялти 5 ошибка 0,3-0,4 куша. Меньше 0,2 куша не бывает.

    Для 7 карт считает от 20 до 300 сек в разных вариантах линий.

     

    Не говорю уже про стартер в 5 карт. Можно посчитать точно для 5 карт, но время уже измеряется часами. Даже без флешей.

    Причем роялти всегда растет при точном расчете по правилам игры.

    Ответить Цитировать
    279/314
    + 0
  • Jak, не актуально для меня уже... Сорямба

    Jak @ 09.05.23 

    В разных вариантах, в зависимости от наличия флешей и аутов, ошибка в роялти 0,1-0,3 куша.

     

    Когда имеем 7 карт, будет 2 уровня с приблизительными расчетами. Вот тут ошибка уже может достигать 10%. При роялти 5 ошибка 0,3-0,4 куша

    Карт меньше в колоде, вот и растет евшка, насчет точности ... Ну ход то меняется ? Надо это смотреть и ошибки искать в этом направлении... 

    Не в ту сторону копаете имхо...

    То что вы называете ошибкой, называется словом "расхождение" , оно логично потому что зафиксировав сброс вы играете уже в другую игру... С другими вероятностями прихода карт, с другим деревом у которого больше деталей... Такие вещи не сравниваются между собой...

    Jak @ 09.05.23 

    Можно посчитать точно для 5 карт, но время уже измеряется часами

    Это вы ещё не считали "неточно" с учётом оппонента ) 1 стартер = 1 неделя кекв

     

    пс на правах рекламы : 

    если кому-то нужно посчитать последнюю и предпоследнюю сдачу с учетом оппонента абсолютная точность, без всяких приближений то ... пишите в лс , ориентируйтесь на 300-500-800$ за солвер... такое решение покроет 90-95 % ваших вопросов по игре... 

    останутся стартера ... могу и по ним подсказать ... 

    если наберется 5+ заявок ... то возможно продакшн замучу ...

    Сообщение отредактировал c00l0ne - 9.5.2023, 20:34
    Ответить Цитировать
    797/882
    + -1
  • Jak, сорямба, вчера засыпал уже, может вы меня не поняли

    Jak @ 09.05.23 

    ошибка в роялти 0,1-0,3 куша.

    Jak @ 09.05.23 

    При роялти 5 ошибка 0,3-0,4 куша. Меньше 0,2 куша не бывает.

    Я считаю что вы напрямую цифорки сравниваете алгоритмов, что в теории БОЛЬшая ошибка

    Вы должны сравнивать таким образом:

    1. Создаёте датасет тыч 100 раздач

    2. Запускаете симуляцию игры двух этих алгоритмов на общем датасете:

    А) решаете спот двумя алгоритмами

    Б) играете его получая реальную разницу ев

    Вот эти цифры вы вправе сравнивать...

    Алгоритма1 vs алгоритма2 на общем датасете через симуляцию раздач

    А другие цифры сравнивать нельзя, мат часть просто не позволяет этого делать

     

    пс вообще вы смотрю из зоны комфортного программирования не любите выходить ))) 

    по мне так лучше большими шагами ступать как можно дальше и глубже в болоте ... 

    чем маленькими шажками топтаться на асфальтной дорожке в парке...

    Сообщение отредактировал c00l0ne - 10.5.2023, 6:14
    Ответить Цитировать
    798/882
    + 0
  • Всего возможных датасетов для 1 игрока = С(52,17)= 21 945 588 357 420. Для троих игроков цифра вообще сумасшедшая.

    Что такое 100к игр? 4,55*10^-7 % = 0,000000455%    Это тупиковый путь. Что 100к игр, что 10к игр - это капля в море. Как можно на основе этой капли говорить обо всем океане?

     

    Ну, запущу я на счет 2 разных алгоритма. Даже три - еще алгоритм, буду случайно класть и выкидывать карты.

    Вдруг! А это может быть. Третий, случайный алгоритм соберет лучшее ЕВ, значит он наиболее правильный!

    И вообще, что такое алгоритм игры? Просто класть карты - это легко. Надо оценить ЕВ каждого хода. А как это сделать без оценки позы? Разложить до конца и посмотреть ЕВ? У кого ЕВ больше, тот и молодец? Я думаю на большой дистанции ГСЧ тут победит. Пусть не каждый раз, но когда-то такое будет. Попадется такой датасет, где ГСЧ победит. Мы же берем всего миллионные доли процента из всех игр. Когда-то будет такой сет, что ГСЧ победит 100%.

     

    В любой игре (шашки, шахматы, нарды, покер и тд) нужна функция, которая оценивает текущую позицию. Это основа любой игры.

    На основании этой функции можно сделать вывод, вот этот ход лучший, он ведет к повышению ЕВ. Конечно желательно в оценочной функции принимать во внимание не только свои карты, но и карты всех игроков. И их расположение на линиях, тк они тоже влияют на общую оценку позы.

    Ведь и человек так же играет, считает свои ауты, оценивает свои шансы на сбор лучших линий, оценивает шансы оппов на сбор линий, примерно считает ЕВ каждого хода. Но чел не может посчитать все вероятности точно, калькулятор слабоват. У компа тут сил побольше. 

    Но даже с мозгами компа китай сложно посчитать точно, вот мы и ищем упрощения для того, чтобы хоть как-то оценить позу.

     

    Если бы игра была крестики-нолики 3х3, тогда можно ее легко посчитать. Там вариантов мало, можно все перебрать.

    Остальные игры посчитать посложней.

     

    Я и пишу такую оценочную функцию. И уже дальше, на основании этой функции можно придумывать алгоритм игры, сделать ход, оценить новую позу и сравнить оценку с другими ходами.

     

    Текущая оценка с 2-мя картами была достаточно точной для оценки позиции. Пусть и упрощенной. До этого были варианты когда просто пытались как-то класть карты и смотреть, что будет в конце.

    Оценка с 2мя картами вообще-то играет в другую игру. Не в ананас с тремя картами, а в китайский покер, когда приходят 2 карты и мы их раскладываем по линиям. Но даже эта погрешность нас удовлетворяла, тк была самая прогрессивная.

    Т.к. эта оценка приблизительная, даже с полным перебором, я задал себе вопрос, 

    А если попробовать посчитать именно по три карты и как в реале из колоды выбрасывать снос? Сильно ли ошибочна наша оценка с двумя картами?

     

    Учитывая все наработки появилась возможность посчитать по-точнее оценку в достаточно короткое время.

     

    Когда-то был китай с одной картой. Его было легко посчитать. Я этим тоже занимался, но игры была медленной и скучной. Потом появился турбо-китай, по 4 карты давали и их нужно было класть все сразу. Игра ускорилась. Но тоже можно посчитать, тк инфа есть вся. А вот в ананасе появилась неопределенность, не понятно, что они выкинули, это дало интерес к игре.

    Ответить Цитировать
    280/314
    + 0
  • Jak, вычитайте сообщение с помощью gpt 4 , много воды ... 

    Из вашего сообщения я понимаю, что вы обсуждаете использование алгоритмов для оценки позиции и принятия решений в играх, в том числе и в покере. Оценочная функция, которая учитывает текущую позицию, может помочь определить лучший ход, который повышает ожидаемую стоимость (EV) игры. В играх с небольшим числом возможных позиций, таких как крестики-нолики, можно перебрать все возможные варианты, чтобы определить лучший ход. Однако в более сложных играх, таких как покер, это уже невозможно, поэтому используются алгоритмы и эвристики для оценки позиции. Вы также упоминаете использование ГСЧ (генератора случайных чисел) в алгоритмах для игр, который может давать случайные результаты, но в целом на большой дистанции может выдать приемлемый результат. Однако, использование ГСЧ не всегда дает точный результат и не является единственным методом для принятия решений в играх.

     

    дата сет это собранные раздачи или там, сгенерированные каким либо путем : 

    Вам же надо понять насколько алгоритм А лучше или хуже алгоритма Б , 

    Если вы возьмете одну раздачу - это не показательная выборка .... 

    100к достаточно будет, ну проведите миллион ... это же все масштабируется изменением одной цифры : 

    for n = 1 to 100k -> 1kk

     

    лучше задумайтесь как датасет сделать ... вообще в теории ? 

    вот это задача достойная ... 

    насчет шашек шахмат нардов это игры с полной информацией ...

    покер игра с не полной информацией , не корректно сравнивать ... 

     

    Jak @ 10.05.23 

    А если попробовать посчитать именно по три карты и как в реале из колоды выбрасывать снос? Сильно ли ошибочна наша оценка с двумя картами?

    это не корректный вопрос , вопрос должен звучать так : "Измениться ли наша стратегия? И на сколько EV? " 

     

     

     

    Jak @ 10.05.23 

    Учитывая все наработки появилась возможность посчитать по-точнее оценку в достаточно короткое время.

     

    к сожалению наработки эти только ваши )

     

    Jak @ 10.05.23 

    Когда-то был китай с одной картой. Его было легко посчитать. Я этим тоже занимался, но игры была медленной и скучной. Потом появился турбо-китай, по 4 карты давали и их нужно было класть все сразу. Игра ускорилась. Но тоже можно посчитать, тк инфа есть вся. А вот в ананасе появилась неопределенность, не понятно, что они выкинули, это дало интерес к игре.

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

     

    Jak @ 10.05.23 

    Я думаю на большой дистанции ГСЧ тут победит.

    ой, тервер вам в руки , ну можно же сгенерировать полное дерево и пробежаться тем же алгоритмом 1 и алгоритмом 2 для сравнения по нему, не нужен тут никакой гсч

    Я так понимаю алгоритм 2 это и есть полный пробег по дереву ... 

    так еще проще , берете и когда бежите по полному дереву параллельно пробегайте по дереву алгоритма 1 и смотрите где различия у вас ... 

    ну и сохраняете евшку ... EValg1 EValg2

     

    PS что там с CUDA, получилось выжать ТераФлопсы из видюхи ?

    Сообщение отредактировал c00l0ne - 10.5.2023, 9:15
    Ответить Цитировать
    799/882
    + 0
  • Ты вроде вообще меня не слышишь.

     

    У меня нет алгоритма. Ни 1, ни 2.

     

    c00l0ne @ 10.05.23 

    Вам же надо понять насколько алгоритм А лучше или хуже алгоритма Б ,

    Если вы возьмете одну раздачу - это не показательная выборка ....

    Я беру не одну, не 100к раздач, а ВСЕ! Все 100500 раздач.

     

    Еще раз напишу - у меня нет алгоритма! Оценочная функция - это не алгоритм! Она не говорит куда надо положить какую карту. Она просто любой позиции, каждому набору карт на линиях дает какую-то циферку.

    Ответить Цитировать
    281/314
    + 0
  • Jak @ 10.05.23 

    Ты вроде вообще меня не слышишь.

     

    У меня нет алгоритма. Ни 1, ни 2.

     

    Я беру не одну, не 100к раздач, а ВСЕ! Все 100500 раздач.

     

    Еще раз напишу - у меня нет алгоритма! Оценочная функция - это не алгоритм! Она не говорит куда надо положить какую карту. Она просто любой позиции, каждому набору карт на линиях дает какую-то циферку.

    я уже кринжовать начинаю , дорогой товарищ

    я Вас слышу , я Вам информацию говорю в конце тунеля ... 

    прислушайтесь йо: 

    Jak @ 10.05.23 

    У меня нет алгоритма. Ни 1, ни 2.

     

    они Есть у Вас : 

    1. двухкарточный 

    2. трехкарточный

     

    Jak @ 10.05.23 

    Я беру не одну, не 100к раздач, а ВСЕ! Все 100500 раздач.

    об этом поподробней, что значит вы берете все раздачи ? 

    Все стартера , все их расклады , все первые ходы, все вторые ходы ? 

    Что это значит ? Все стартера нереально взять , сами понимаете займет годы ... при текущем уровне вычислений... 

    Первые ходы тоже , вторые третьи вы можете да посчитать своими алгоритмами ... но в конкретной раздаче, а ВСЕ ходы вторые третьи ? 

    Их очень много чтобы заявлять об этом ... 

    Jak @ 10.05.23 

    Оценочная функция - это не алгоритм

    это функция по которой алгоритм максимумов выберет вам ходы ... 

    разные функции = разные алгоритмы будут

     

    приходим к тому что нам надо понять diffEV(Alg1, Alg2)  = 

    берем какую нибудь выборку достаточно большую(датасет) и прогоняем на этих алгоритмах ... считаем EV ... 

    смотрим среднее на раздачу отклонение одного алгоритма от другого 

    получаем diffEV ну я думаю где то 0.1 куш будет на раздачу для последних сдач ...

     

    Jak, пс если остались вопросы спрашивайте...

    Сообщение отредактировал c00l0ne - 10.5.2023, 10:08
    Ответить Цитировать
    800/882
    + 0
  • c00l0ne @ 10.05.23 

    об этом поподробней, что значит вы берете все раздачи ?

     

     

    Конечно не 100500 со стартера, а с текущего положения. Имеем 7-9 карт на линиях у нас + наш снос и 7-9 карт у оппов. С этого момента вглубь я перебираю ВСЕ варианты. Было, что брал по 2 карты на подъем (это в выложенной проге), а теперь попробовал брать по 3 карты.

     

    c00l0ne @ 10.05.23 

    это функция по которой алгоритм максимумов выберет вам ходы ...

    разные функции = разные алгоритмы будут

    а почему ты решил, что надо брать максимум? может надо брать 2-е или 3-е решение? Или их смесь в %%?

     

    c00l0ne @ 10.05.23 

    берем какую нибудь выборку достаточно большую(датасет) и прогоняем на этих алгоритмах ... считаем EV ...

    смотрим среднее на раздачу отклонение одного алгоритма от другого

    делал такое. брал набор колод и играл за всех игроков. Все по честному. Каждый знает только свои карты, снос других он не видит. Ну получил какое-то ЕВ и что? Есть эталон? Или брать 17 карт, раскладывать из них фанту и стремиться к ней? Во-1х это будет угадайка, а во-2х это будет резалториентед игра. Подгон под ответ.

    Ведь вполне возможно, что глупый набор ходов приведет к макс результату.

     

    ПС. 

    c00l0ne @ 10.05.23 

    если остались вопросы спрашивайте...

    вопросов нет. их и не было никогда.

    Ответить Цитировать
    282/314
    + 0
  • Jak, не знаю что отвечать , опять вода ... 

    Jak @ 10.05.23 

     

    вопросов нет. их и не было никогда.

    завидую, у меня остались только одни вопросы )

    Эх того бы программиста с Новосибирска "допросить с пристрастием" )

    Или олимпиадника)

    на худой конец лексермана)

    Ответить Цитировать
    801/882
    + 0
1 106 107 108 109 114
1 человек читает эту тему (1 гость):
Зачем регистрироваться на GipsyTeam?
  • Вы сможете оставлять комментарии, оценивать посты, участвовать в дискуссиях и повышать свой уровень игры.
  • Если вы предпочитаете четырехцветную колоду и хотите отключить анимацию аватаров, эти возможности будут в настройках профиля.
  • Вам станут доступны закладки, бекинг и другие удобные инструменты сайта.
  • На каждой странице будет видно, где появились новые посты и комментарии.
  • Если вы зарегистрированы в покер-румах через GipsyTeam, вы получите статистику рейка, бонусные очки для покупок в магазине, эксклюзивные акции и расширенную поддержку.