Текстовая версия форума CASINOBOARD << полная версия страницы
Базар вокруг игры / Комп в помощь / Ускорить расчет раскладов в покере...
Страницы(4): [ «  <  1  2  3  4  >  »]
grey
Re: Ускорить расчет раскладов в покере... [ID=23730] [ответ на 23702 ()]
Пт, 7 мая 2004 22:25 [#]
denker писал(а) ср, 05 мая 2004 08:41
2Grey:А мат.ожидание e t.c. тоже целочисленными функциями бум считать?
Для вычисления МО требуется 1 (одна) итоговая операция деления с плавающей запятой. Остальной расчет идет в целых числах.
Цитата:
ИМХО, на современном "железе" разница между целочисленными и "плавающими" функциями не существенна...
Разумеется, несущественна. Всего-то на порядок. Какая разница, ждать 3 минуты или час?
ёжик
Re: Ускорить расчет раскладов в покере... [ID=23784] [ответ на 23702 ()]
Вс, 30 мая 2004 12:24 [#]
Grey, ты не прав, разница по времени получается 3мин и 3мин+1секунда Smile (вообще сомниваюсь что для компа имеет разница целочисленные или плавающие. Возможно, ширина значения в байтах и повлияет на процесс..., но,если взять допустим значения типов INT и FLOAT,то ширина для них одинаковая(ЗЫ:32))
grey
Re: Ускорить расчет раскладов в покере... [ID=23785] [ответ на 23702 ()]
Вс, 30 мая 2004 13:03 [#]
ёжик писал(а) вс, 30 мая 2004 13:24
Grey, ты не прав, разница по времени получается 3мин и 3мин+1секунда Smile (вообще сомниваюсь что для компа имеет разница целочисленные или плавающие. Возможно, ширина значения в байтах и повлияет на процесс..., но,если взять допустим значения типов INT и FLOAT,то ширина для них одинаковая(ЗЫ:32))
Ежик, ты тоже используешь тип float для расчета количества сочетаний? (я, кстати, тоже не вижу разницы между печенью и селезенкой - ширина одинаковая Smile)
Hamster
Re: Ускорить расчет раскладов в покере... [ID=23786] [ответ на 23702 ()]
Вс, 30 мая 2004 13:36 [#]
Ребяты, не ссорьтесь! Грей абсолютно прав - "ширина" тут абсолютно ни причем - дело в том, что алгебраические операции, например умножения Int*Int и Fload*Float комп обрабатывает, скажем там по разным алгоритмам. Так, что естессно, для ускорения количественныен показатели надо делать целыми.

Hamster
З.Ы. А вообще - есть такая штука как профайлер...
grey
Re: Ускорить расчет раскладов в покере... [ID=23787] [ответ на 23702 ()]
Вс, 30 мая 2004 14:42 [#]
Все так, только основной пожиратель тактов процессора не умножение, а деление. (Неспециалистам советую сравнить алгоритмы того и другого "на бумажке". 1 класс, 2 четверть)
Миша
Re: Ускорить расчет раскладов в покере... [ID=23789] [ответ на 23702 ()]
Вс, 30 мая 2004 16:28 [#]
Hamster, привет.

Мне видится, что спор – на пустом месте.

Думаю все здесь собравшиеся понимают, что в машине есть только сложение. Операция умножения выполняется за N тактов сложения (со сдвигом), равным длине сомножителя. Отличие целочисленной арифметики от плавающей лишь в сложении порядков. Но это все лишь алгоритмически (при одинаковой длине разница несущественна).

Реализация в железе зависит, естесственно, от самого железа. От сопроцессора для плавающей арифметики (помните был такой Х86/Х87, в современных машинах он встроен), от конвеерной обработки, от обработки переполнений (в целых – заботьтесь сами) и кучи других прибамбасов. Так что результаты на разных процессорах могут отличаться.

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

Удачи.
Миша.
joker2k1
Re: Ускорить расчет раскладов в покере... [ID=23790] [ответ на 23702 ()]
Вт, 8 июня 2004 01:08 [#]
Интересная тема.
тоже занялся написанием своего анализатора.
вот написал только что первую версию.
хотелось бы сравнить с вашими по скорости, чтобы знать я на верном пути или чтото не допонимаю.

в чем оцениваете скорость?

не понял просто что значит "считает обмен 5 карт на 1 боксе за 6 секунд". это значит считает один вариант обмена за 6 сек? или все С(46,5)=1370754?

или что значит анализ одной руки? анализ с обменами или без?
Mariner
Re: Ускорить расчет раскладов в покере... [ID=23791] [ответ на 23702 ()]
Вт, 8 июня 2004 07:09 [#]
Приветствую!

Цитата:
в чем оцениваете скорость?
Можно в вариантах заданного типа обмена в секунду (минуту).

Цитата:
не понял просто что значит "считает обмен 5 карт на 1 боксе за 6 секунд". это значит считает один вариант обмена за 6 сек? или все С(46,5)=1370754?
Считает МО заданного типа обмена, т.е. обмена 5 карт за 6 секнуд. Или тоже самое что 1370754 возможныхк 5 карточных комбинаций за 6 секунд.
Сейчас для обмена 5 карт скрорость такая: с сжатием по мастям 0.88 секунд, без сжатия - 11 секнуд.
Комп Athlon XP 2200+

ЗЫ. Это не самые лучшие показатели.
joker2k1
Re: Ускорить расчет раскладов в покере... [ID=23792] [ответ на 23702 ()]
Чт, 10 июня 2004 23:58 [#]
Отлично!

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

Мои результаты гораздо скромнее - счас считает обмен пяти карт за час.
Но счас я пишу вторую версию, в которой, благодаря усовершенствованию алгоритмической и программной стороны, думаю добится гораздо более лучших результатов нежели сейчас Smile
Mariner
Re: Ускорить расчет раскладов в покере... [ID=23793] [ответ на 23702 ()]
Пт, 11 июня 2004 08:57 [#]
Приветствую.

Установи сам себе необходимый уровень и стремись к нему.
Мне требуется всего лишь 20 000 000 млн 5 карточных обменов в сутки на моем компьютере. Smile

Как закончишь вторую верси пиши результат, можешь на e-mail.
L0M
Re: Ускорить расчет раскладов в покере... [ID=23795] [ответ на 23702 ()]
Пт, 11 июня 2004 16:38 [#]
Всегда хочется большЕго Smile
Когда есть 5 карт за полторы секунды мечтаешь о сотне за тоже время Smile
А мне и миллиона в сутки достаточно Smile
NoSound
Re: Ускорить расчет раскладов в покере... [ID=23796] [ответ на 23702 ()]
Пт, 11 июня 2004 23:08 [#]
Хватит мерить скорости, давайте сравним результаты. А чтобы никаких псевдо секретов не разглашать, можно выбрать какие-нибудь экзотические правила. Если на них результаты будут одинаковые, значит и все остальное работает правильно.

Я начну. Насколько я знаю, в Москве правил с обменом 2 за 1 не осталось. По-этому мой вариант такой:
Обмен 2 карт за 1 анте, ТК играет, покупка обменом старшей карты за 1 анте, без страховки, выплаты стандартные.

Результаты
МО : 0.007 анте (+0.7%)
ошибка: 0.001 анте (0.1%) (ошибка стандартная гауссовская, то есть вероятность истинного значений быть в пределах ошибки равна 60 с чем-то процентов)
7.8 млн рук за 2.5 часа.
Mariner
Re: Ускорить расчет раскладов в покере... [ID=23797] [ответ на 23702 ()]
Сб, 12 июня 2004 04:44 [#]
Приветствую!

С удовольствием бы перестал мериться скоростью и улчшать алгоритм, если бы не одно но.
Расчет обмена 2 карт занимает у меня для 2,3 млн рук около 60 часов, так что расчет 7.8 млн рук займет около недели...

Может расскажешь идею, как тебе удалось добиться такой скорости?
ЗЫ. Можно по e-mail.

Кроме того, по первости процедуру расчета МО написал сам неправильно. Т.е. получал МО, которое согласуется с другими расчетами, оно было чуть меньше, но попадало в +- ошибку. Пришлось сравнивать МО по комбинациям и таким образом отловить две страшных ошибки.
NoSound
Re: Ускорить расчет раскладов в покере... [ID=23798] [ответ на 23702 ()]
Сб, 12 июня 2004 13:08 [#]
Обмен 2 карт за 10 секунд ? Это не плохой, это очень плохой результат. Как вообще у тебя такое получилось, если обмен 5 карт делается у тебя за 1 секунду. Обмен 2 карт должен быть раз в сто быстрее. Чего-то ты напутал, мне кажется.

Для двух карт неплохо будет работать и простой переборный алгоритм со сжатием по мастям. Вот и получишь мою скорость. Там же всего 46*45/2 комбинаций надо перебрать (без сжатия). Для расчета комбинаций дилера используется комбинаторный анализ.

По-моему пора писать подробный manual по алгоритмам просчета покеров Smile
Mariner
Re: Ускорить расчет раскладов в покере... [ID=23799] [ответ на 23702 ()]
Сб, 12 июня 2004 18:40 [#]
Приветствую!

Цитата:
Обмен 2 карт за 10 секунд ? Это не плохой, это очень плохой результат. Как вообще у тебя такое получилось, если обмен 5 карт делается у тебя за 1 секунду. Обмен 2 карт должен быть раз в сто быстрее. Чего-то ты напутал, мне кажется.
Собственно, получается 11 обменов 2 карт в секунду. Причем сжатие по мастям не использую. Т.к. пока нет времени выводить формулы. Знаю несколько путей улучшить скорость расчета, но пока руки не доходят реализовать. Sad Кстати, повод есть повод подумать мне, почему же у меня так медленно... Confused

Цитата:
Для двух карт неплохо будет работать и простой переборный алгоритм со сжатием по мастям. Вот и получишь мою скорость. Там же всего 46*45/2 комбинаций надо перебрать (без сжатия). Для расчета комбинаций дилера используется комбинаторный анализ.
Да, но всего 2 карты можно сбросить 10 способами и получаем 10*1035=10350. Остальное также.

Цитата:
По-моему пора писать подробный manual по алгоритмам просчета покеров
В очередь! Smile У меня эта идея появилась 1,5 года назад. Уже исписано более 48 страниц в 96 листовой терадке. Буду на пенсии, перебью в Word. Cool
NoSound
Re: Ускорить расчет раскладов в покере... [ID=23800] [ответ на 23702 ()]
Вс, 13 июня 2004 15:44 [#]
> Собственно, получается 11 обменов 2 карт в секунду.
Да, действительно, я неправильно посчитал. Принимай извинения.

Разница между нашими алгоритмами наверное вот в чем. Ты считаешь вероятности дилера для каждого из 10350 случаев, а я только один раз в начале.
Моя ошибка от такого упрощения для одного обмена примерно равна до 0.01 анте. Однако у нас симуляция, а значит нам важно не точное значение, а принять правильное решение. Возможных действий 10 и пусть их мо равновероятно распределены по отрезку в 1 анте, тогда вероятность принять неправильное решение будет 2*0.01/1 = 0.02. Если мы принимаем неправильное решение, то теряем в точности примерно начальные 0.01 анте, итого получаем конечную ошибку 0.01*0.02=0.0002, то есть очень мало. Это оправдывает мое упрощение.
Мутно наверное написал, но думаю смысл понятен.

> Уже исписано более 48 страниц в 96 листовой терадке
Ну ты даешь! Начнешь набирать в цифру, посылай на рецензию Smile
korovin
Re: Ускорить расчет раскладов в покере... [ID=23801] [ответ на 23702 ()]
Пн, 14 июня 2004 08:56 [#]
Интересно наблюдать за столь живущей темой

Цитата:
Обмен 2 карт за 1 анте, ТК играет, покупка обменом старшей карты за 1 анте, без страховки, выплаты стандартные.
Хотелось бы уточнить, ОДНУ карту менять нельзя? Если можно, то МО явно занижено, если нельзя - завышено.

Предлагаю для чистоты эксперимента убрать пока покупку игры. Пусть будет классический покер, 1 бокс, ТК играет, выплаты стандартные (1,1,2,3,4,5,7,20,50,100). Анет платят. Пас возможен всегда. Посчитаем МО:

Обмен 1 карты, стэй или пас: -1.00% (900 сек)
Обмен 2х карт, стэй или пас: -0.45% (5000 сек)
Обмен 5и карт, стэй или пас: -4.10% (21000 сек)

В скобках указано время потраченое на анализ 7,46 миллионов раздач на ноутбуке PM1300. Алгоритм обменов "упрощенное сжатие мастей". Анализ игры дилера после КАЖДОГО варианта обмена (прикупа). Все алгоритмы протестированы на алгоритмах полного перебора.

Попутный вопрос к тем, кто считает игру дилера один раз за раздачу. Допустим у нас пара, мы посчитали по формулам комбинаторики сколько комбинаций дилера выше, ниже, равно, пустых. Затем начинаем менять карты, получилось 2 пары, как использовать уже имеющуюся информацию, ведь мы не знаем солько там две пары старше/младше/равно. Уточнять, пренебрегать? У меня время на уточнение внутри комбинации сопоставимо со временем полного анализа игры дилера. Смысл терять точность?
NoSound
Re: Ускорить расчет раскладов в покере... [ID=23802] [ответ на 23702 ()]
Пн, 14 июня 2004 15:46 [#]
Приветствую!

Korovin писал(а) пн, 14 июня 2004 09:56
Хотелось бы уточнить, ОДНУ карту менять нельзя? Если можно, то МО явно занижено, если нельзя - завышено.
Одну карту в моих правилах менять нельзя. Результаты действительно получаются больше, чем твои (ниже).
Korovin
Предлагаю для чистоты эксперимента убрать пока покупку игры. Пусть будет классический покер, 1 бокс, ТК играет, выплаты стандартные (1,1,2,3,4,5,7,20,50,100). Анет платят. Пас возможен всегда. Посчитаем МО:

Обмен 1 карты, стэй или пас: -1.00% (900 сек)
Обмен 2х карт, стэй или пас: -0.45% (5000 сек)
Обмен 5и карт, стэй или пас: -4.10% (21000 сек)
Мои правила такие же, только с покупкой. Смотрим обмен 2х карт по твоим правилам то есть без покупки, другие обмены пока не посчитал. Мои результаты такие
-0.68% (7000 сек)
ошибка 0.10% (то есть -0.68 +- 0.10)
Вероятность правильности и моего и твоего результата около 2-3%, то есть маловероятно. У кого-то ошибка.

Korovin
В скобках указано время потраченое на анализ 7,46 миллионов раздач на ноутбуке PM1300. Алгоритм обменов "упрощенное сжатие мастей". Анализ игры дилера после КАЖДОГО варианта обмена (прикупа). Все алгоритмы протестированы на алгоритмах полного перебора.
Машина слабая, Duron 650. Все алгоритмы также протестированы на полных переборах.

Korovin
Попутный вопрос к тем, кто считает игру дилера один раз за раздачу.
Это я Smile

Korovin
Допустим у нас пара, мы посчитали по формулам комбинаторики сколько комбинаций дилера выше, ниже, равно, пустых. Затем начинаем менять карты, получилось 2 пары, как использовать уже имеющуюся информацию, ведь мы не знаем солько там две пары старше/младше/равно. Уточнять, пренебрегать? У меня время на уточнение внутри комбинации сопоставимо со временем полного анализа игры дилера. Смысл терять точность?
По формулам комбинаторики я просчитываю не больше\меньше\равно, а вероятности каждой комбинации дилера. А потом для каждого расклада игрока считаю больше\меньше\равно по сохраненному результату. Эта функция работает у меня довольно долго (0.0005 сек) и создает основной вес по времени исполнения. По-этому мое упрощение создает мне выигрыш в скорости в сотни раз (на 5 картах).
Не думаю, что разница между нашими результатами обусловлена этим упрощением. Возможно дело в том, что я не учитываю при одинаковых по значению парах старшую карту, хотя кажется вероятность одинаковых пар очень мала, тем более МО этой ошибки будет равно нулю (на первый взгляд). А как у тебя анализатор проходит стандартные натановские примеры ?
---
1. Ваши карты – J-10-9-8 пик и туз треф, у дилера – пятёрка бубён. Ожидаемый выигрыш при замене туза треф – $304.
2. Ваши карты – J-10-9-8 пик и девятка треф, у дилера – пятёрка бубён. Замена с разбиением девяток приносит в среднем $309. Ожидаемый выигрыш при сохранении пары – $99.
---
korovin
Re: Ускорить расчет раскладов в покере... [ID=23803] [ответ на 23702 ()]
Пн, 14 июня 2004 16:57 [#]
Цитата:
1. Ваши карты – J-10-9-8 пик и туз треф, у дилера – пятёрка бубён. Ожидаемый выигрыш при замене туза треф – $304.
2. Ваши карты – J-10-9-8 пик и девятка треф, у дилера – пятёрка бубён. Замена с разбиением девяток приносит в среднем $309. Ожидаемый выигрыш при сохранении пары – $99.
3,0406 / 3.0932 / 0.9940

1. Стыдно признатся, но я так и не сделал сравнение флеш на флеш (флстрит в том числе) по старшей карте, у меня строго по масти (такие правила были в городе где я начинал). Разница небольшая но есть.

2. Я так понял, у тебя покупка игры в этот покер добавляет 1.3%. По моим расетам это ОЧЕНЬ много для такой игры. Во сколько она у тебя оценит покупку в 6+6 без ТК, процентов в 10? Ты для каждой пустой руки дилера считаеш МО покупки или какой-то оценочный метод?

3. Ты считаеш МО симуляцией случайных раздач? Я сформировал массив из 7462-х среднестатистических рук (сжатие мастей) и назвал это циклом. При симуляции масти и карта дилера генерируются случайно (в принципе КД тоже можно сделать циклом). Схождение достигается при числе циклов более 50.
NoSound
Re: Ускорить расчет раскладов в покере... [ID=23804] [ответ на 23702 ()]
Пн, 14 июня 2004 18:39 [#]
Korovin
3,0406 / 3.0932 / 0.9940
у меня 3.0351 \ 3.0878 \ 0.9945
из 3.04 \ 3.09 \ 0.99

1. А у меня все флеши одинаковые. Smile Тоже надо исправлять. Очень интересно, какая разница у тебя получается ? Это может дать оценку ошибки и по учету старшей карты.
2. На самом деле у меня покупка автоматически считается тоже. Для примера, который мы рассматривали, она была около 1.5% даже. Но я не берусь судить, насколько это верно. Если у тебя есть какие-нибудь точные цифры по покупкам, пожалуйста пиши сюда, мне будет очень интересно сравнить. Кстати мы о какой цене покупки говорим, я ставил 1. Насчет метода - да, для каждой пустой руки считаю МО покупки. Я еще посмотрю как там реализовано, помню что не абсолютно точно сделано.
3. Да, симуляция случайных раздач. А ты с циклами конечно мощно завернул. Тут первый вопрос конечно, не будет ли твоя оценка математического ожидания "смещенной" в смысле математической статистики. Понятно, что при стремление 7462 к бесконечности получится точно, но какая точность метода для 7462 ? Однако твой подход кажется эффективным для небольшого числа циклов, вначале схождение должно быть много лучше моего (общепринятого).В любом случае идея, конечно, креативная и интересная.
Страницы(4): [ «  <  1  2  3  4  >  »]