Программисты помогите 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 млн., можно и больше, если электричества не жалко. Спасибо.
|
|
|
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%, а потом думать где же здесь ошибка. Так что с руками все впорядке
|
|
|
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. А к плюсовым мы еще вернемся, спасибо.
|
|
|
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 менее надежном способе, значит, есть мелкая ошибка).
|
|
|
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)!). Потом умножаешь или делишь сочетания.
|
|
|
Re: Программисты помогите ID:10289 ответ на 10276 |
Сб, 5 ноября 2005 13:48 («] [#] [») |
|
|
Друзья!
Есть, возможно, наивный вопрос:
А откуда вы берете это МО?
Как я думаю: для начала вы должны задать стратегию. Ну там, карту менять тогда-то, пасовать тогда-то. Потом шарахнуть 10 млн. сдач и посмотреть результат. Но это работает только если вы заранее знаете стратегию.
А если нет?
Тогда я думю следующее.
Делаем 10 млн. сдач
Для каждой сдачи осуществляем все возможные исходы (напр, для стандартного покера):
1. Сразу пас
2. Игра без обмена
3. Пас после обмена
4. Игра после обмена
Хотя тут еще встает вопрос, какую карту менять. Но это уже надо задавать жестко - до стрита или до флеша, к примеру.
Для каждого исхода получаем итог. Потом крутим-вертим все эти сдачи по-всякому, ищем закономерности по максимальным МО (хорошо бы для удобства сдачи эти в БД какую-нибудь запихать), выводим стратегию игры.
Скажите, я на правильном пути?
Спасибо.
|
|
|
Re: Программисты помогите ID:10290 ответ на 10276 |
Сб, 5 ноября 2005 13:56 («] [#] [») |
|
|
Раздаем случайно 5 карт против карты дилера. Считаем МО каждого возможного решения перебором всех возможных вариантов. Выбираем лучшее МО, суммируем. При желании (для проверки на ошибки) иммитируем реальную игру. Сравниваем МО реальной игры с расчетным. Если совпадает, значит все ОК.
|
|
|
Re: Программисты помогите ID:10291 ответ на 10276 |
Сб, 5 ноября 2005 14:07 («] [#] [») |
|
|
Цитата: | Считаем МО каждого возможного решения перебором всех возможных вариантов. Выбираем лучшее МО, суммируем. | При всем уважении - но получим завышенное МО!
Ситуация:
У дилера
Что надо делать? Надо пасовать (МО=-1)
А при переборе всех возможных вариантов рано или поздно мы неизбежно купим пару, которая сыграет (МО= -1 + 3 = +2). Для данного расклада это будет лучшее МО, но это неправильное МО, так как в реальности мы НЕ будем прикупать, так ведь?
|
|
|
Re: Программисты помогите ID:10292 ответ на 10276 |
Сб, 5 ноября 2005 14:43 («] [#] [») |
|
|
Перебрав все варианты обменов мы получим множество пар и множество пустых комбинааций, каждая из которых будет иметь свое лучшее МО (пас и стэй). Просуммировав это все и вычтя стоимость обмена мы получим МО обмена, которое будет хуже чем -1. Т.е. оптимальным решением в данном раскладе будет ПАС.
|
|
|
Re: Программисты помогите ID:10293 ответ на 10276 |
Сб, 5 ноября 2005 14:57 («] [#] [») |
|
|
Цитата: | Перебрав все варианты обменов | Теперь понятно.
|
|
|
Re: Программисты помогите ID:10295 ответ на 10276 |
Вс, 6 ноября 2005 14:23 («] [#] [») |
|
|
Korovin писал сб, 05 ноября 2005 13:56 | Раздаем случайно 5 карт против карты дилера. Считаем МО каждого возможного решения перебором всех возможных вариантов. . | Для диллерского пятока всеравно же приходится пользоваться комбинаторными формулами.
Или у тебя всётаки "чистый" перебор?
ЗЫ У меня перебором довольно тормознуто получялось.
|
|
|
Re: Программисты помогите ID:10296 ответ на 10276 |
Вс, 6 ноября 2005 16:37 («] [#] [») |
|
|
Разумеется формулы, но я проверял их на полном переборе. Результат идентичен. Т.е. фраза "перебираем все варианты карт дилера" верна.
|
|
|
Re: Программисты помогите ID:10297 ответ на 10276 |
Вс, 6 ноября 2005 18:40 («] [#] [») |
|
|
Korovin писал вс, 06 ноября 2005 18:37 | Разумеется формулы | Это как? На листочке с ручкой? Пятак, насколько знаю, наибольшая головная боль...
|
|
|