Jak, ты сдесь выкладывал HR5 и HR3 лукаптаблички , а ты их сам делал,а то может у тебя есть возможность с джокерами сделать их?
Чтобы Дж Дж
Был равен коду рояля
Посмотрел пару лекций по Opencl, да! видеокарты считают здорово в свои пару тысяч cuda ядер, но запихать задачу конкретную в них очень сложно. В виду специфики устройства железа.
итог:
c00l0ne @ 14.09.22нужны спецы которые смогут распараллелить алгоритм Монте Карло на gpu
Такой продукт можно будет запускать у конечных пользователей. На их железе (видеокартах).
Сам делаю.
В начале подгружал файлики, потом вычисляю их перед загрузкой проги, они небольшие и считаются быстро.
Сейчас не дома, доеду до компа, сделаю для джокеров.
Jak, окай, потом еще одну сложную лукап табличку надо бу, выкладу альфаверсию скоро, можно будет перфоманс потестить... но сразу грю запасайтесь ядрами , хотя бы 8 шт и памятью 32гб мин
в идеале 64 ядреный треатриппер какой нибудь за 500к ру кек
кстати если есть треаттриппер возьму в аренду на неделю
Приветствую. Давно пытался сделать что-то типа калькулятора для китайского покера. Довольно много сделал, но забросил. Уже пару лет прогресса в коде нет. Если кто-то находится в таком же положении/состоянии, то можно попробовать объединиться и совместно подумать над решением задачи. Я забросил на этом шаге:
Jak @ 14.09.22по какому принципу-алгоритму раскладывать пятерку?
Пишите у кого будет желание совместными усилиями взять китайскую крепость.
c00l0ne, это все слова. Нужно алгоритм/принцип описать более подробно.
Если нужна 'симуляция в симуляции' методом монте-карло, то да без суперкомпьютера не решить задачу.
Если достаточно одной 'симуляции', то достаточно процессора среднего ноутбука.
Конечно здесь нужно визуально показывать, что я подразумеваю под симуляцией(это десятки тысяч переборов всех возможных комбинаций, если я ничего не путаю их 5837832 если стартер необходимо выбирать из 17 карт), но лень записывать видео.
Вот дана условная картинка(не все подъемы, но мы намеренно упрощаем):
У каждого стартера свое количество продолжений(от 6 до 27) и соответственно количество конечных листьев разное.
За одну симуляцию(проход), мы узнаем значения в листьях всех стартеров (всего 5837832 возможных варианта).
Проходим так для примера 20000 раз. Значения в листьях можно как накапливать, так и скидывать после каждого раза.
Как после 20000 раз таких итераций определить какой стартер нужно выбрать для продолжения. Какой использовать принцип/алгоритм?
p.s. программирование это мое хобби и с математикой я на вы, поэтому сильно не пинайте меня, если я где-то сильно ошибаюсь в формулировках/терминах.
c00l0ne, кстати там ошибка от 12(а не 6) до 27 вариантов продолжения.
Я делал простой калькулятор для 6+ холдема и для обычного холдема. Правда все это было не публично, результаты с известными калькуляторами совпадали. Так что принцип метода монте-карло я знаю.
Luisito99,
Luisito99 @ 16.09.22программирование это мое хобби и с математикой я на вы, поэтому сильно не пинайте меня, если я где-то сильно ошибаюсь в формулировках/терминах
Могу тебе помочь с математикой , а ты может накатаешь код кек
Монте Карло обычно считают с конечных узлов, с терминальных, в этих узлах игра заканчивается и результат известен, далее идут к узлам все выше и выше
Основные моменты это индексировать узлы, чтобы не выполнять дважды одни и теже расчеты, второе аппроксимировать узлы, т.к. игра целиком не влезет в память и время расчётов ограничено, лукап таблицы тут помогают и прочие ухищрения
Но в целом решение задачи такой это обычные умножения флоатные
Luisito99, то как ты написал, допустим игра против фантазии без оппонента:
Первых ходов 47*46*45 которые породят 44*43*42 вторых ходов и т.д. это утопичный сценарий... Низкая точность(из-за того что мы не сможем симулировать достаточно семплов для каждой ветви) и высокие требования к памяти( терабайты?)
Последнее решается допустим упрощением узлов, но тут же возрастет нагрузка на cpu , как и обратно если захотим разгрузить cpu придётся хранить большие таблицы для упрощения расчётов, вот и задача найти оптимальные параметры для текущего железа.
c00l0ne,
Мы рассматриваем задачу в вакууме(т.е. мы одни, оппоненты на фантазии)
У нас есть 5 карт: эти карты мы можем разложить 232 вариантами(какой вариант оптимальный мы не знаем)
Потом добавляются еще 3 карты: эти карты мы можем разложить от 12 до 27 вариантами(в зависимости от стартера),
Далее еще 3 карты и так до конца....
Всего у нас будет выбор из 17 карт, это 5837832 листьев(всех возможных вариантов, всех 232 вариантов стартера)
В листьях будут очки(если комбинации удовлетворяют требованиям старшинства комбинаций в трех боксах)
Очки будут разными, в зависимости от комбинаций.
Дальше есть несколько вариантов продолжения:
- мы можем найти листья с максимальным кол-м очков, записать к каждому стартеру к которому они относятся и обнулить
- накапливать в листьях
- и много других вариантов, на что фантазии(нашей) хватит
- сделать правильно(но как?)
Далее мы перемешиваем колоду и берем другие 3 карты для первого подъема и так далее.
Проходим так, для примера 20000 раз
Итого:
Если выбирать стартер по первому варианту, то он будет слишком 'оптимистичный'(агрессивный)
Luisito99 @ 16.09.22Потом добавляются еще 3 карты: эти карты мы можем разложить от 12 до 27 вариантами(в зависимости от стартера),
эти три карты 47*46*45 вариантов , не понимаю куда они денутся)
ты рассматриваешь одну ветку, один семпл, а таких будет 47*46*45*колвовариантовразложить на первом только ходу и т.д., полное дерево монте Карло огромно для китайского
и твой метод прямолинейного решения захлебнется в таком дереве или заблудится или просто по времени это будет не осуществимо, не забывайте то что мы решить должны всю игру, все стартера за один присест, а не работать с одним стартером
и решение это должно быть приемлимым по времени, ну там за неделю максимум
то что ты пытаешься сделать называется подсказчик, а мы тут будем пилить солвер ибо
подсказчик решает частично игру
солвер решает полностью игру
Ладно. Времени сейчас писать нет.
Интересно как Jak делал стартер, он же вроде уже давно пытается замутить программу.
Может быть кто-то еще делал, да не доделал как я. Может быть получится скооперироваться с кем-то.
Luisito99, jak занят hrjokers надеюсь)
c00l0ne @ 16.09.22эти три карты 47*46*45 вариантов , не понимаю куда они денутся)
Ну, во-первых троек будет в 6 раз меньше.
Не 47*46*45=97'290, а 47*46*45/2/3, т.к. нам не важен порядок поднятия карт. Типа =
Далее. Т.к. мы из этих трех кладем всего 2 (две) можно считать что = + + , т.о. надо просчитать всего 47*46/2=1081 вариантов.
Далее можно заморочиться и действовать "по науке" к каждой паре на следующем шаге "выкинуть из колоды" одну любую карту.
А можно пренебречь этим на "первом проходе", перебрать все 1081 пар, на след шаге 45*44/2=990 пар, и т.д.
Когда дойдем до конца, вернемся по дереву назад, мы будем знать какая пара имеет какую оценку. И тогда уже из тройки мы можем выбрать лучшую из трех пар. И на "втором" проходе мы уже более точно можем сымитировать игру именно с этим стартером. Т.к. на каждом подъеме оценка для каждой пары будет известна, можно быстро пробежаться по дереву и определить оценку каждого расклада стартера.
Jak, дерево огромно, забудте о таких методах
начнем с того что нам придется проиндексировать ноды
для этого придется табличку лукап составить на 13 карт, изоморфизм пусть будет,флеши отдельно: indexnode=hrnode[c13+...hrnode[c2+hrnode[13+c1]]]
и мне нужно знать ее размер
Например нода с индексом 0 выглядит так :
222
23333
44445
ну и соответственно
HRnode(
222
23333
44445
) = 0
нода с индексом 1 выглядит так :
222
23333
44446
HRnode(
222
23333
44446
) = 1
нода с индексом 2 выглядит так :
222
23333
44447
и т.д.
до
ААА
АКККК
ДДДДВ
Jak если у тебя есть описание как сделать лукап табличку, если ты поделишься я сделаю за выходные ...
Будем дальше думать ...
Jak @ 17.09.22И на "втором" проходе мы уже более точно можем сымитировать игру
это невероятно затратно , ветка решается абсолютно точно за один проход ...
лукап табличка сложная потому что
222
33332
44445
равна ноде
222
33323
54444
но не равна
223
22333
54444
порядок в лайнах только не важен, а в целом он важен
так же индексы не существующих нод не должны быть в лукаптабличке
например такой
222
22333
34444
двоек в колоде 5 шт не бывает
у кого есть желание создайте сервер дискорд ... форум лагает иногда жуть как ...
Есть ещё вариант вместо cpu посчитать на gpu, через Cuda или opencl, но я тоже не разбираюсь в этом, нужны спецы которые смогут распараллелить алгоритм Монте Карло на gpu, если кто то есть пишите, заколабимся на пару дней
Шевелитесь- сделаем софт и по 500 баксов на продажу выставим, 1000 продаж пол мульта изи мани
Да и игра оживет, потому что игроки будут стремиться к идеальной игре, а так катаем как курица лапой, я за сессию ошибок кушей на 100 - 200 кушей наверное делаю за 500 раздач от идеала
Вот курс по Cuda или opencl