Текстовая версия форума CASINOBOARD << полная версия страницы
Офлайн-казино / Оазис-покер / Программисты помогите
Страницы(9): [1  2  3  4  5  6  7  8  9  >  »]
Это Я
Программисты помогите [ID=10276]
Чт, 3 ноября 2005 04:49 [#]
Привет всем. Господа программисты помогите найти ошибку. При стандартных правилах: 5–1+1, 1 бокс, играем от ТК, нет страховки, нет покупки, нет 6 карты, замена только 1 карты, без ограничений, выплаты 1-1-2-3-4-5-7-20-50-100. У Лесного около -1%. У меня, хоть тресни, играет лучше на 0,2%...0,3%. Абсолютно уверен, что это не я гениальный программист, а ошибка при подсчете выигрыша или при сравнении комбинаций. Введите в коде массив WIN[206], обнулите его и при каждом выигрыше n ANTE посчитайте статистику выигрышей WIN[n+4]++. Потом, в конце, распечатайте:
cout << MO << endl;
for(i=0;i<205;i++)
{
cout << i-4 << WIN[i] << endl;
}
ну вы поняли, что смещение на 4 потому что можно проиграть -4 ANTE, а выиграть до 201 ANTE.
Распечатку как-нибудь передайте мне. Зарядите не меньше чем 10 млн., можно и больше, если электричества не жалко. Спасибо.
Mariner
Re: Программисты помогите [ID=10277] [ответ на 10276 ()]
Чт, 3 ноября 2005 06:55 [#]
Приветствую!

2 Это Я

Хм. Для получения МО игры вовсе не обязательно ее полностью симулировать. Вполне достаточно просуммировать МО рук игрока. Получиться гораздо быстрее. Есстественно если не преследуется цель получения дисперсии.

Я бы проверил свой движек так.
Взял демку покерного анализатора Блитца, которая позволяет считать МО руки при обмене 1 карты.
Задавал исходные комбинации всех типов (пустая, ТК, пара и т.д.) и сравнивал значения возможных комбинаций у дилера.

ЗЫ. На выходных будет время, сделаю тебе такой массивчик.
Это Я
Re: Программисты помогите [ID=10278] [ответ на 10276 ()]
Чт, 3 ноября 2005 07:53 [#]
Привет Mariner. В том и смысл, что все руки считает идеально точно. Не было этой ошибки раньше, когда такой покер только и считался. Ошибка в сравнение рук при симуляции, либо при счете прибыли (ну в смысле убытков). Хорошо пооптимизировал, а первые версии не сохранились. Но в упор не вижу где ошибка. Есть подозрение, что генератор случайностей выдает на 5% чаще флеш, чем надо (привет online казиношникам). Но на очень большом промежутке не проверял. Либо где-то что-то округляется в мою пользу. При большом числе сдач (желательно 100 млн., когда дисперсия сойдет на нет), при сравнение массива статистики, мне кажется, будет видно аномалию. Это не академический интерес, а метод нахождения хитрой ошибки. МО должно быть около -1.06%. У меня считает 8…10 млн. сдач в час. Так что на пол суток надо запускать. Пока.
Это Я
Re: Программисты помогите [ID=10279] [ответ на 10276 ()]
Чт, 3 ноября 2005 08:02 [#]
P.S.
ключевое сдесь "лучше на 0,2%...0,3%". Это то же самое что изобрести двигатель с КПД 105%, а потом думать где же здесь ошибка. Так что с руками все впорядке
korovin
Re: Программисты помогите [ID=10280] [ответ на 10276 ()]
Чт, 3 ноября 2005 13:53 [#]
Попробуй посчитать не обмен 1-й а покупка шестой, остальное тоже самое. Это самая простая игра для компьютера (из реальных плюсовых). И единственная, для которой я получил АБСОЛЮТНО точное МО ПОЛНЫМ перебором ВСЕХ вариантов +1.76%.

Для пятикартончного боле-иенее точное МО -1% рово, но учти что при симуляции игры даже 10 000 000 раздач отклонение в 0,1% это нормально.
Это Я
Re: Программисты помогите [ID=10281] [ответ на 10276 ()]
Чт, 3 ноября 2005 17:20 [#]
Привет Korovin. Да действительно 10 млн. маловато, надо 100 млн. чтобы отклонение было пара сотых. У меня считается 2 способами: чисто теоретическим (если поставить на цикл 52*с(5,51)=122 млн, можно за 15 часов получить абсолютно точное МО, делится легко на 4 одинаковые масти – еще в 4 раза быстрее); и симуляцией игры типа тренажера в котором играет компьютер. Так вот в первом хорошо считает. А при симуляции всегда лучше на 0,2%...0,3%. Запускал на очень долго. Если провести аналогию с созданным двигателем в 105% КПД. Нет смысла искать ошибку в двигателе, ошибка в работе датчика КПД. Серьезной ошибки нет – проверил все вдоль и поперек. Какая-нибудь тупая ошибка типа попутан знак +-, либо грубое округление при переводе типов переменных, и просто не совершенный ГСЧ. Начал уже вспоминать китайскую мудрость про поиск черной кошки в темной комнате, если похоже ее там нет.
P.S. А к плюсовым мы еще вернемся, спасибо.
korovin
Re: Программисты помогите [ID=10282] [ответ на 10276 ()]
Чт, 3 ноября 2005 18:06 [#]
Не понимаю, как это просто разделить на 4, по моему тут надо сжатие мастей применять. У меня для расчета МО используется цикл из 7432 среднестатистических рук, для оценки МО мне этого достаточно. Насчет абсолютной точности, смысла нет. Ну посчитаеш ты точно МО на одном боксе, а на двух, трех, шести?

Расчет МО, это семечки, дойдеш до усреднения стратегий для командной игры, вот там напаришся (если дойдеш конечно).
Это Я
Re: Программисты помогите [ID=10284] [ответ на 10276 ()]
Чт, 3 ноября 2005 21:13 [#]
Наверное, я не ясно объясняю. Попробую еще раз. Подсчет точного МО это не новый вид спорта. Это просто критерий истины при тестировании на наличие ошибок. Эта дурацкая ошибка откинула меня в развитии более чем на 2 месяца назад. Цель этого, я думал давно пройденного этапа, сделать движок, выдающий одно из 3…4 решений: скинуть, закрыться, купить шестую, поменять 00000 или 01000 или 11110 ну и т.д. Дальше при помощи этого движка делаем систему игры. Продолжение в личку…
Это Я
Re: Программисты помогите [ID=10285] [ответ на 10276 ()]
Пт, 4 ноября 2005 03:00 [#]
Спасибо Mariner уже не надо. Нашел "ошибку". Все до смешного бонально. Генератор случайных чисел имеет влияние на приход определенных последовательностей карт. Усложнив генератор во много раз добился идеального результата.
Это Я
Re: Программисты помогите [ID=10286] [ответ на 10276 ()]
Пт, 4 ноября 2005 16:51 [#]
2korovin. Теперь можно поиграться. Я правильно понял: покупка за 1 ANTE, потом менять нельзя, покупать игру нельзя, страховаться нельзя и ТК играет. Выплаты стандартные. Расчет 2 способами одновременно 100 млн. раздач за 3 часа. 1 способ математический: МО=1,76039%; второй способ симуляция игры (решения тоже математические) МО=1,75583%. При этом сыграло 526 Роял-флешей и 3974 стрит-флеш. А в стандартном покере МО чуть больше минус единицы: -0,954, возможно -0,924 (почему-то немного разошлось на 2 менее надежном способе, значит, есть мелкая ошибка).
rombyk
Re: Программисты помогите [ID=10287] [ответ на 10276 ()]
Пт, 4 ноября 2005 18:04 [#]
У меня просьба ко всем кто считает МО по комбинаторным формулам,
раньше я брал эти формулы на poker.ru, но теперь там все снесли,
а я снес свой винт на помойку и теперь придется все начать заново.

У кого есть эти формулы, пожалуйста, киньте ссылку или ответьте на форуме. Заранее благодарен...

2_Это Я Как ты усложняешь ГСЧ, у меня тоже часто вылазят мастевые комбинации, после 40-50 млн.раздач получается в 2-2.5 раза чаще чем должно быть по терверу.
Это Я
Re: Программисты помогите [ID=10288] [ответ на 10276 ()]
Сб, 5 ноября 2005 13:05 [#]
Привет rombyk. Не знаю, на чем ты пишешь. Но в встроенная в С++ функция rand() имеет определенные закономерности. Флеши у меня тоже выходили в 2 раза чаще, чем надо. Я чуть с ума не сошел, когда искал ошибку. Потом прикрутил другой генератор – нашел где-то в нете. Стало все вроде нормально. Но оказалось, что тоже на 5…10% больше флешей. Недавно сделал так:

peremeshat=rand()%10; for(i=0;i<peremeshat;i++) fignj=rand();
k[vz]=rand()%13+2;
peremeshat=rand()%10; for(i=0;i<peremeshat;i++) fignj=rand();
k_m[vz]=rand()%4;

переменная peremeshat принимает случайное значение (допустим до 10). После этого столько раз вхолостую вызывается генератор. После этого он используется по назначению. И так каждый раз перед использованием.

Формулы сочетаний, перестановок и т.д. у меня в памяти с института. Нужно просто сходить в библиотеку и взять учебник. Либо по ссылкам на слова “сочетание, перестановка, комбинаторика”. А формула всего одна c(n,m)=n!/(m!(n-m)!). Потом умножаешь или делишь сочетания.
Gefest
Re: Программисты помогите [ID=10289] [ответ на 10276 ()]
Сб, 5 ноября 2005 13:48 [#]
Друзья!
Есть, возможно, наивный вопрос:
А откуда вы берете это МО?

Как я думаю: для начала вы должны задать стратегию. Ну там, карту менять тогда-то, пасовать тогда-то. Потом шарахнуть 10 млн. сдач и посмотреть результат. Но это работает только если вы заранее знаете стратегию.
А если нет?

Тогда я думю следующее.
Делаем 10 млн. сдач
Для каждой сдачи осуществляем все возможные исходы (напр, для стандартного покера):

1. Сразу пас
2. Игра без обмена
3. Пас после обмена
4. Игра после обмена
Хотя тут еще встает вопрос, какую карту менять. Но это уже надо задавать жестко - до стрита или до флеша, к примеру.

Для каждого исхода получаем итог. Потом крутим-вертим все эти сдачи по-всякому, ищем закономерности по максимальным МО (хорошо бы для удобства сдачи эти в БД какую-нибудь запихать), выводим стратегию игры.

Скажите, я на правильном пути?
Спасибо.
korovin
Re: Программисты помогите [ID=10290] [ответ на 10276 ()]
Сб, 5 ноября 2005 13:56 [#]
Раздаем случайно 5 карт против карты дилера. Считаем МО каждого возможного решения перебором всех возможных вариантов. Выбираем лучшее МО, суммируем. При желании (для проверки на ошибки) иммитируем реальную игру. Сравниваем МО реальной игры с расчетным. Если совпадает, значит все ОК.
Gefest
Re: Программисты помогите [ID=10291] [ответ на 10276 ()]
Сб, 5 ноября 2005 14:07 [#]
Цитата:
Считаем МО каждого возможного решения перебором всех возможных вариантов. Выбираем лучшее МО, суммируем.
При всем уважении - но получим завышенное МО!
Ситуация:

У дилера
Что надо делать? Надо пасовать (МО=-1)
А при переборе всех возможных вариантов рано или поздно мы неизбежно купим пару, которая сыграет (МО= -1 + 3 = +2). Для данного расклада это будет лучшее МО, но это неправильное МО, так как в реальности мы НЕ будем прикупать, так ведь?
korovin
Re: Программисты помогите [ID=10292] [ответ на 10276 ()]
Сб, 5 ноября 2005 14:43 [#]
Перебрав все варианты обменов мы получим множество пар и множество пустых комбинааций, каждая из которых будет иметь свое лучшее МО (пас и стэй). Просуммировав это все и вычтя стоимость обмена мы получим МО обмена, которое будет хуже чем -1. Т.е. оптимальным решением в данном раскладе будет ПАС.
Gefest
Re: Программисты помогите [ID=10293] [ответ на 10276 ()]
Сб, 5 ноября 2005 14:57 [#]
Цитата:
Перебрав все варианты обменов
Теперь понятно.
ёжик
Re: Программисты помогите [ID=10295] [ответ на 10276 ()]
Вс, 6 ноября 2005 14:23 [#]
Korovin писал сб, 05 ноября 2005 13:56
Раздаем случайно 5 карт против карты дилера. Считаем МО каждого возможного решения перебором всех возможных вариантов. .
Для диллерского пятока всеравно же приходится пользоваться комбинаторными формулами.
Или у тебя всётаки "чистый" перебор?

ЗЫ У меня перебором довольно тормознуто получялось.
korovin
Re: Программисты помогите [ID=10296] [ответ на 10276 ()]
Вс, 6 ноября 2005 16:37 [#]
Разумеется формулы, но я проверял их на полном переборе. Результат идентичен. Т.е. фраза "перебираем все варианты карт дилера" верна.
cooper(jr)
Re: Программисты помогите [ID=10297] [ответ на 10276 ()]
Вс, 6 ноября 2005 18:40 [#]
Korovin писал вс, 06 ноября 2005 18:37
Разумеется формулы
Это как? На листочке с ручкой? Пятак, насколько знаю, наибольшая головная боль...
Страницы(9): [1  2  3  4  5  6  7  8  9  >  »]