Re: Ускорить расчет раскладов в покере... ID:23805 ответ на 23702 |
Вт, 15 июня 2004 06:56 («] [#] [») |
|
|
Приветствую!
Сейчас что-то не сооброжу что NoSound c Korovin написали, но циферками своими поделюсь.
AC, 3.03628995428793 / 9C, 3.08884905679648 / 0.993994546067347
Флэши считаю точно, больше/меньше/равно.
Что еще вспомню, напишу.
|
|
|
Re: Ускорить расчет раскладов в покере... ID:23806 ответ на 23702 |
Вт, 15 июня 2004 11:11 («] [#] [») |
|
|
По точности. Предлагаю равнятся на Маринера.
По покупке игры. Возьми тестовую задачу: У тебя 4 туза, у дилера допустим 7. +МО покумки инры по упрощенной модели считается на пальцах. Сравни решение со своим.
По симуляции. Если перебрать все варианты руки против всех КД, мы и получим абсолютно точное МО. Это чуть более 100 миллионов раздач. Можно и здесь применить сжатие мастей, будет немного меньше. Эту идею я и заложил в свои циклы, так как нас нтересует не только первый бокс, кроме того есть игры типа 12345, 1+1 или 2+1, 6+6 или 6+5, которые считаются на порядок дольше обычных
|
|
|
Re: Ускорить расчет раскладов в покере... ID:23807 ответ на 23702 |
Вт, 15 июня 2004 12:05 («] [#] [») |
|
|
Korovin писал(а) вт, 15 июня 2004 12:11 | По симуляции. | У меня получается не 7462, а 3094 - это число возможных комбинаций 5 карт игрока если считать все масти одинаковыми. Если брать 3094 действительно получается несмещенная оценка, схождение будет более быстрое за счет уменьшения эффективной диспресии. Думаю раза в 4-5 быстрее будет.
Еще я не понял как ты формируешь цикл для нескольких боксов, в этом случае цифра 7462 должна сильно возрасти, примерно [7462*7462 - поправка на недостижимые комбинации] для двух боксов.
|
|
|
Re: Ускорить расчет раскладов в покере... ID:23808 ответ на 23702 |
Ср, 16 июня 2004 05:55 («] [#] [») |
|
|
Приветствую!
2 Korovin & NoSound
Поясните идеи насчет циклов. Читаю, читаю и не врубаюсь.
ЗЫ. Как обычно можно по e-mail или ЛС.
|
|
|
Re: Ускорить расчет раскладов в покере... ID:23809 ответ на 23702 |
Ср, 16 июня 2004 10:31 («] [#] [») |
|
|
2 Mariner. Как я понял. Симуляция раскладов у нас начинается со случайного выбора карт игрока и КД. При этом случайном выборе мы действуем прямо так, как на самом деле происходит, и получаем в итоге дисперсию результатов - настоящая дисперсия (НД). Тут же замечу, что скорость расчета обратно пропорциональна квадрату дисперсии. Korovin же разбил все возможные начальные расклады на группы, с целью уменьшить дисперсию и увеличить скорость. Группы выбрал следующим образом - каждая группа содержит фиксированное число карт игрока каждого из достоинств. Скажем группа "две 9ки, две 10ки и туз". То есть от такой группы до расклада еще нужно определиться с мастями(сжатие по мастям). Таких групп всего 3094, если я правильно посчитал. У каждой группы есть своя вероятность выпадения. Она очень легко считается, для примера выше равна 6*6*4. Теперь в цикле на каждую группу уделяем какое-то число раскладов, случайным образом выбирая масти и КД. Можно не 1, а 2-3 в зависимости от вероятности группы. Таким образом сформировали цикл, по которому и пробегаем много-много раз. Общее МО считаем по вероятносте каждой группы, перемноженной с МО внутри группы. В чем смысл? Дело в том, что таким образом мы уменьшаем эффективную дисперсию(ЭД) результатов. Если в каждой группе дисперсия будет равна НД, то ЭД будет равна НД. Но если в группах дисперсия будет меньше НД, а так и будет, то ЭД сильно уменьшится. А значит скорость увеличится в квадрат умеьшения диспресии раз.
Почему в группе дисперсия будет меньше НД ? Потомучто информация "две 9ки, две 10ки и туз" во многом уже предопределяют результат, и он будет иметь гораздо меньшие отклонения, чем в общем случае.
п.с. Многое в описанном выше алгоритме можно еще улучшать ...
|
|
|
Re: Ускорить расчет раскладов в покере... ID:23810 ответ на 23702 |
Чт, 17 июня 2004 00:43 («] [#] [») |
|
|
У меня получилось так: каре, фулл по 156, троек, 2 пары по 858, пар 2860, беспарных 1287, плюс столько же флешей я выделил отдельно для уменьшения дисперсии результата. По идее можно пары и беспарки еще разбить на 4, 3, 2 одной масти. Я обхожу это случайной генерацией мастей в каждом цикле. Можно включить в цикл и перебор карты дилера. Если бы кто-нибудь вывел аналитически оптимальное соотношение размера цикла - скорости схождения, был бы признателен
|
|
|
Re: Ускорить расчет раскладов в покере... ID:23811 ответ на 23702 |
Чт, 17 июня 2004 01:18 («] [#] [») |
|
|
Приветствую всех участников форума.
Сам я считаю перебором, и до недавнего времени спсоб увеличения скорости расчётов видел лиш в увеличении тактовой частоты и кэша процессора, а об обмене пятака даже и не мечтал. И в рамках начатой темы для начала хотел-бы спросить чем лучше пользоваться для изучения комбинаторики.
И ещё вопросик, для увеличения скрости расчётов в 5+1-1+1 я не веду переоценку массива диллерских комбинаций при покупке и обмене, чем, как я считаю, отбрасываю наиболее дисперсионные решения с небольшой потерей МО. Так ли ето?
|
|
|
Re: Ускорить расчет раскладов в покере... ID:23812 ответ на 23702 |
Чт, 17 июня 2004 03:34 («] [#] [») |
|
|
Насчет дисперсионных решений ты имееш ввиду купить вскрышку?
Без ТК при покупки 1-й карты вскрышка прийдет в трех случаях из 46. Без переоценки ты считаеш пас (-1 анте) При точном расчете стэй (-0.84 анте). Потери только на этом 0.16*3/46=0.01.
|
|
|
Re: Ускорить расчет раскладов в покере... ID:23813 ответ на 23702 |
Чт, 17 июня 2004 08:48 («] [#] [») |
|
|
Да именно это я и имел ввиду, только подобную оценку я сделал и сам посчитав с переоценкой и без неё. Мне интересно сильно ли я теряю в общем МО игры. А его без комбинаторики моими методами подсчитать нереально долго. Поэтому повторяясь хочу спросить, чем можно воспользоваться для изучения комбинаторики, можно на мыло.
|
|
|
Re: Ускорить расчет раскладов в покере... ID:23814 ответ на 23702 |
Чт, 17 июня 2004 11:25 («] [#] [») |
|
|
Korovin писал(а) чт, 17 июня 2004 01:43 | У меня получилось так: каре, фулл по 156, троек, 2 пары по 858, пар 2860, беспарных 1287, плюс столько же флешей я выделил отдельно для уменьшения дисперсии результата. | Хорошее разделение. А есть ли какие-нибудь идеи как этот метод на 2 и более боксов распространить ? Все-таки 1 бокс лишь частный случай, если получиться придумать для общего случая, то это будет большой скачок по скорости схождения.
Какая твоя оценка, во сколько раз быстрее работает, чем переборный алгоритм ?
|
|
|
Re: Ускорить расчет раскладов в покере... ID:23815 ответ на 23702 |
Чт, 17 июня 2004 13:13 («] [#] [») |
|
|
Прветствую всех.
Не уверен что подскажу правильно, т.к. не до конца понимаю идею метода. Но мне кажется на два и более бокса его можно применить следующим образом. Не считать каждый бокс, а рассмотреть один бокс с учетом знания карт соседних, т.е. пересчитать насколько повысит МО в каждой группе(в основном группе беспарных) знание дополнительных вышедших карт.
|
|
|
Re: Ускорить расчет раскладов в покере... ID:23816 ответ на 23702 |
Чт, 17 июня 2004 13:37 («] [#] [») |
|
|
Приветствую!
Цитата: | Хорошее разделение. А есть ли какие-нибудь идеи как этот метод на 2 и более боксов распространить ? Все-таки 1 бокс лишь частный случай, если получиться придумать для общего случая, то это будет большой скачок по скорости схождения.
Какая твоя оценка, во сколько раз быстрее работает, чем переборный алгоритм ? | В общем как себе представляю это дело я. Применяем сжатие по мастям к картам игрока также как мы и делали это для карт дилера.
Для нескольких боксов переоценку числа комбинаций и их вес можно производить динамически. Что, в принципе, у меня и сделано при обмене 5 карт. Кроме того, все эти динамические перерасчеты можно просчитать заранее для всех возможных случаев в таблички. По этому пути я сейчас и начинаю идти. Проблемы возникают при оценке числа комбинаций больше/меньше. Но думаю, что это можно сделать алгоритмически. Так, например, чтобы посчитать число пустых комбинаций для любого числа вышедших карт необходимо всего лишь несколько табличек, общим объемом примерно 32 килобайта. По скорости сейчас ничего не могу. Как закончу реализацию, напишу.
Теперь о следующем важном шаге - разработка стратегий. Вот научились мы быстро (очень быстро, хотя не все ) считать МО игры для заданных правил. Как быть с разработкой стратегий?
Скорее всего, дело обстоит так. Для оценки МО игры используем одни алгоритмы. (Программа симулятор) Для разработки стратегии используем другие (без сжатия по мастям карт игрока). (Программа тренажер).
ЗЫ. Блин, научите меня, как сделать так, чтобы при цитировании указывалось в рамке чья это цитата. (Какую нажать кнопку?)
|
|
|
Re: Ускорить расчет раскладов в покере... ID:23817 ответ на 23702 |
Чт, 17 июня 2004 14:58 («] [#] [») |
|
|
2 BUGy
Нет, так не получится. Для каждого первого бокса будут свои результаты на втором.
2 Mariner
Не понял насчет табличек, давай поподробнее. Кнопка "цитата", там просто пишешь типа <quote title=Mariner писал>
|
|
|
Re: Ускорить расчет раскладов в покере... ID:23818 ответ на 23702 |
Чт, 17 июня 2004 19:10 («] [#] [») |
|
|
Цитата: | Не считать каждый бокс, а рассмотреть один бокс с учетом знания карт соседних, т.е. пересчитать насколько повысит МО в каждой группе(в основном группе беспарных) знание дополнительных вышедших карт. | Разумеется. Я так и считаю. Какая нам разница что на соседних боксах, каре на каждом или пустые на этих каре. на схождение МО число открытых боксов влияет слабо, поэтому их можно сдавать случайно. Нас ведь интересует только какие карты вышли, вернее как правило только карты одного-двух номиналов. Прще говоря нет смысла считать МО за два бокса сразу, если достаточно знать МО одного бокса, на втором будет такое же. Не путать с номер бокса с числом известных карт!
|
|
|
Re: Ускорить расчет раскладов в покере... ID:23819 ответ на 23702 |
Чт, 17 июня 2004 19:35 («] [#] [») |
|
|
Korovin писал(а) чт, 17 июня 2004 20:10 | Разумеется. Я так и считаю. | А при чем здесь твои циклы ? Вроде о них речь то.
|
|
|
Re: Ускорить расчет раскладов в покере... ID:23820 ответ на 23702 |
Чт, 17 июня 2004 19:42 («] [#] [») |
|
|
Все, понял. Извините.
|
Вложение:
BS5i.bj1
(Размер: 11.97KB, Загружено 168 раз)
|
|
|
|
Re: Ускорить расчет раскладов в покере... ID:23821 ответ на 23702 |
Пт, 18 июня 2004 06:17 («] [#] [») |
|
|
Приветствую!
NoSound | Не понял насчет табличек, давай поподробнее. | В общем вчера закончил реализацию расчта пустых комбинация через таблицы при игре дилера от ТК. Результат меня разочаровал. Скорости не прибавилось, а наоборот даже убавилось. Может что не так сделал.
Идея следующая.
Всего пустые комбинации получаются из 1113 пяти ранговых комбинаций. Поэтому значения рангов заранее извеcтны и их можно поместить в массив [1..1113][1..5].
Далее. Значенни каждого ранга карты меняется от 0 до 4, т.е. 0 нет карт в ранге .. 4 все карты есть в ранге.
Число пустых комбинаций в заданной пятикарточной комбинации получается перемножением числа свободных карт в ранге n1*n2*n3*n4*n5. Эти произведения тоже можно посчитать заранее и поместить в массив с числом элементов 5^5=3125 вида [0..4,0..4,0..4,0..4,0..4].
Теперь осталось посчитать возможные флэши, тоже в виде таблички, с числом элементов 2^13=8192.
Далее расчет очень прост.
цикл от 1 до 1113
суммируем число пустых комбинаций
конец
от 1 до 4
вычитаем флэши
конец
Вот и все.
Зы. Кто сможет реализовать шустро, велкам в мыло с исходником.
|
|
|
Re: Ускорить расчет раскладов в покере... ID:23822 ответ на 23702 |
Вт, 22 июня 2004 16:13 («] [#] [») |
|
|
приветствую!
ну у меня после недельных раздумий и недельной реализации задуманного получилось что теперь МО обмена пяти карт считается за 1 сек. (т.е. то, что раньше считалось за час). Т.е. прогресс на лицо.
считается все точно, без упрощений. без сжатий
объяснил бы кто, как считать со сжатием, не понятно как учитывыть вышедшие карты в сжатой таблице.
понимаю, что медленно. думаю ускорить. счас активно об этом думаю. есть еще варианты. думаю можно ускорить еще раз ... сто. главное придумать алгоритм работы со сжатыми таблицами. вот счас над этим и работаю.
пишу на VC++.
p.s. я смотрю после того как я сюда последний раз написал добавилось много чего нового и все довольно инофрмативно. спасибо вам за это.
|
|
|
Re: Ускорить расчет раскладов в покере... ID:23823 ответ на 23702 |
Ср, 23 июня 2004 06:37 («] [#] [») |
|
|
Приветствую!
2 joker2k1
Прими мои поздравления. Довольно шустрый у тебя получился рассчет обмена 5 карт. Напиши на каком оборудовании считаешь.
Опиши идею/алгоритм реализации. Можно по e-mail или ЛС.
2 Сам себе
Похоже придется переписывать под С/C++. Присоветуйте нормальный компилятор.
|
|
|
Re: Ускорить расчет раскладов в покере... ID:23824 ответ на 23702 |
Ср, 23 июня 2004 11:09 («] [#] [») |
|
|
2Mariner:
считаю на p4-2400.
это на самом деле не шустро. все тормозит изза того что возможных замен ~1300000 и для каждой из них надо оценить игру. моя процедурка оценивает примерно 1,5млн в сек комбинаций игрока с комбинациями дилера(выдает профит игры для заданной комбинации). вот и получается что около секунды.
идея... ну тупое оптимизированное сравнение с учетом специфики задачи и особенностей расчета (выкидывание критичных мест в таблицы).
если бы вот соптимизировать генерацию замен, например пожать какнть эту таблицу(пожать ее можно), но чтобы все равно с помощью какогонть алгоритма точно расчитывать игру (чтобы не сравнивать невозможные комбинации). вот счас на этой стадии нахожусь. есть пара-тройка идей думаю их
|
|
|