Офлайн-казино / Оазис-покер / Программисты помогите
  Страницы(9): [#  1  2  3  4  5  6  7  8  9  >  »]   Перейти вниз
Программисты помогите   ID:10276 Чт, 3 ноября 2005 04:49 [#] [»)
Это Я Форумы CasinoGames
Привет всем. Господа программисты помогите найти ошибку. При стандартных правилах: 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 («] [#] [»)
Mariner Форумы CasinoGames
Приветствую!

2 Это Я

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

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

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

Для пятикартончного боле-иенее точное МО -1% рово, но учти что при симуляции игры даже 10 000 000 раздач отклонение в 0,1% это нормально.
        
 
Re: Программисты помогите   ID:10281   ответ на 10276 Чт, 3 ноября 2005 17:20 («] [#] [»)
Это Я Форумы CasinoGames
Привет 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 («] [#] [»)
korovin Форумы CasinoGames
Не понимаю, как это просто разделить на 4, по моему тут надо сжатие мастей применять. У меня для расчета МО используется цикл из 7432 среднестатистических рук, для оценки МО мне этого достаточно. Насчет абсолютной точности, смысла нет. Ну посчитаеш ты точно МО на одном боксе, а на двух, трех, шести?

Расчет МО, это семечки, дойдеш до усреднения стратегий для командной игры, вот там напаришся (если дойдеш конечно).
        
 
Re: Программисты помогите   ID:10284   ответ на 10276 Чт, 3 ноября 2005 21:13 («] [#] [»)
Это Я Форумы CasinoGames
Наверное, я не ясно объясняю. Попробую еще раз. Подсчет точного МО это не новый вид спорта. Это просто критерий истины при тестировании на наличие ошибок. Эта дурацкая ошибка откинула меня в развитии более чем на 2 месяца назад. Цель этого, я думал давно пройденного этапа, сделать движок, выдающий одно из 3…4 решений: скинуть, закрыться, купить шестую, поменять 00000 или 01000 или 11110 ну и т.д. Дальше при помощи этого движка делаем систему игры. Продолжение в личку…
        
 
Re: Программисты помогите   ID:10285   ответ на 10276 Пт, 4 ноября 2005 03:00 («] [#] [»)
Это Я Форумы CasinoGames
Спасибо Mariner уже не надо. Нашел "ошибку". Все до смешного бонально. Генератор случайных чисел имеет влияние на приход определенных последовательностей карт. Усложнив генератор во много раз добился идеального результата.
        
 
Re: Программисты помогите   ID:10286   ответ на 10276 Пт, 4 ноября 2005 16:51 («] [#] [»)
Это Я Форумы CasinoGames
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 («] [#] [»)
rombyk Форумы CasinoGames
У меня просьба ко всем кто считает МО по комбинаторным формулам,
раньше я брал эти формулы на poker.ru, но теперь там все снесли,
а я снес свой винт на помойку и теперь придется все начать заново.

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

2_Это Я Как ты усложняешь ГСЧ, у меня тоже часто вылазят мастевые комбинации, после 40-50 млн.раздач получается в 2-2.5 раза чаще чем должно быть по терверу.
        
 
Re: Программисты помогите   ID:10288   ответ на 10276 Сб, 5 ноября 2005 13:05 («] [#] [»)
Это Я Форумы CasinoGames
Привет 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 («] [#] [»)
Gefest Форумы CasinoGames
Друзья!
Есть, возможно, наивный вопрос:
А откуда вы берете это МО?

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

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

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

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

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

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

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

Текущее время: Ср, 25 декабря 00:56:43 2024
Время, затраченное на генерацию страницы: 0.03639 секунд