Регистрация
Регистрация Поиск Пользователи Все разделы прочитаны  
Важные объявления
Старый 03.11.2005, 04:49     TS Старый   #1 (permalink)
Увлечённый
 
Регистрация: 26.10.2005
Адрес: Провинция
Сообщений: 462
Привет всем. Господа программисты помогите найти ошибку. При стандартных правилах: 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 млн., можно и больше, если электричества не жалко. Спасибо.
Это Я вне форума      
Старый 03.11.2005, 06:55   #2 (permalink)
Ветеран
 
Аватар для Mariner
 
Регистрация: 12.02.2004
Адрес: Россия, УРФО
Сообщений: 1,399
Приветствую!

2 Это Я

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

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

ЗЫ. На выходных будет время, сделаю тебе такой массивчик.
__________________
Mariner

Западное полушарие Марса рассечено на протяжении 4 000 км вдоль экватора рифтовыми долинами Маринер - крупнейшим поясом разломов на планете.
Mariner вне форума      
Старый 03.11.2005, 07:53     TS Старый   #3 (permalink)
Увлечённый
 
Регистрация: 26.10.2005
Адрес: Провинция
Сообщений: 462
Привет Mariner. В том и смысл, что все руки считает идеально точно. Не было этой ошибки раньше, когда такой покер только и считался. Ошибка в сравнение рук при симуляции, либо при счете прибыли (ну в смысле убытков). Хорошо пооптимизировал, а первые версии не сохранились. Но в упор не вижу где ошибка. Есть подозрение, что генератор случайностей выдает на 5% чаще флеш, чем надо (привет online казиношникам). Но на очень большом промежутке не проверял. Либо где-то что-то округляется в мою пользу. При большом числе сдач (желательно 100 млн., когда дисперсия сойдет на нет), при сравнение массива статистики, мне кажется, будет видно аномалию. Это не академический интерес, а метод нахождения хитрой ошибки. МО должно быть около -1.06%. У меня считает 8…10 млн. сдач в час. Так что на пол суток надо запускать. Пока.
Это Я вне форума      
Старый 03.11.2005, 08:02     TS Старый   #4 (permalink)
Увлечённый
 
Регистрация: 26.10.2005
Адрес: Провинция
Сообщений: 462
P.S.
ключевое сдесь "лучше на 0,2%...0,3%". Это то же самое что изобрести двигатель с КПД 105%, а потом думать где же здесь ошибка. Так что с руками все впорядке
Это Я вне форума      
Старый 03.11.2005, 13:53   #5 (permalink)
Бессмертный
 
Аватар для korovin
 
Регистрация: 13.02.2004
Адрес: Россия
Сообщений: 3,027
Попробуй посчитать не обмен 1-й а покупка шестой, остальное тоже самое. Это самая простая игра для компьютера (из реальных плюсовых). И единственная, для которой я получил АБСОЛЮТНО точное МО ПОЛНЫМ перебором ВСЕХ вариантов +1.76%.

Для пятикартончного боле-иенее точное МО -1% рово, но учти что при симуляции игры даже 10 000 000 раздач отклонение в 0,1% это нормально.
korovin вне форума      
Старый 03.11.2005, 17:20     TS Старый   #6 (permalink)
Увлечённый
 
Регистрация: 26.10.2005
Адрес: Провинция
Сообщений: 462
Привет Korovin. Да действительно 10 млн. маловато, надо 100 млн. чтобы отклонение было пара сотых. У меня считается 2 способами: чисто теоретическим (если поставить на цикл 52*с(5,51)=122 млн, можно за 15 часов получить абсолютно точное МО, делится легко на 4 одинаковые масти – еще в 4 раза быстрее); и симуляцией игры типа тренажера в котором играет компьютер. Так вот в первом хорошо считает. А при симуляции всегда лучше на 0,2%...0,3%. Запускал на очень долго. Если провести аналогию с созданным двигателем в 105% КПД. Нет смысла искать ошибку в двигателе, ошибка в работе датчика КПД. Серьезной ошибки нет – проверил все вдоль и поперек. Какая-нибудь тупая ошибка типа попутан знак +-, либо грубое округление при переводе типов переменных, и просто не совершенный ГСЧ. Начал уже вспоминать китайскую мудрость про поиск черной кошки в темной комнате, если похоже ее там нет.
P.S. А к плюсовым мы еще вернемся, спасибо.
Это Я вне форума      
Старый 03.11.2005, 18:06   #7 (permalink)
Бессмертный
 
Аватар для korovin
 
Регистрация: 13.02.2004
Адрес: Россия
Сообщений: 3,027
Не понимаю, как это просто разделить на 4, по моему тут надо сжатие мастей применять. У меня для расчета МО используется цикл из 7432 среднестатистических рук, для оценки МО мне этого достаточно. Насчет абсолютной точности, смысла нет. Ну посчитаеш ты точно МО на одном боксе, а на двух, трех, шести?

Расчет МО, это семечки, дойдеш до усреднения стратегий для командной игры, вот там напаришся (если дойдеш конечно).
korovin вне форума      
Старый 03.11.2005, 21:13     TS Старый   #8 (permalink)
Увлечённый
 
Регистрация: 26.10.2005
Адрес: Провинция
Сообщений: 462
Наверное, я не ясно объясняю. Попробую еще раз. Подсчет точного МО это не новый вид спорта. Это просто критерий истины при тестировании на наличие ошибок. Эта дурацкая ошибка откинула меня в развитии более чем на 2 месяца назад. Цель этого, я думал давно пройденного этапа, сделать движок, выдающий одно из 3…4 решений: скинуть, закрыться, купить шестую, поменять 00000 или 01000 или 11110 ну и т.д. Дальше при помощи этого движка делаем систему игры. Продолжение в личку…
Это Я вне форума      
Старый 04.11.2005, 03:00     TS Старый   #9 (permalink)
Увлечённый
 
Регистрация: 26.10.2005
Адрес: Провинция
Сообщений: 462
Спасибо Mariner уже не надо. Нашел "ошибку". Все до смешного бонально. Генератор случайных чисел имеет влияние на приход определенных последовательностей карт. Усложнив генератор во много раз добился идеального результата.
Это Я вне форума      
Старый 04.11.2005, 16:51     TS Старый   #10 (permalink)
Увлечённый
 
Регистрация: 26.10.2005
Адрес: Провинция
Сообщений: 462
2korovin. Теперь можно поиграться. Я правильно понял: покупка за 1 ANTE, потом менять нельзя, покупать игру нельзя, страховаться нельзя и ТК играет. Выплаты стандартные. Расчет 2 способами одновременно 100 млн. раздач за 3 часа. 1 способ математический: МО=1,76039%; второй способ симуляция игры (решения тоже математические) МО=1,75583%. При этом сыграло 526 Роял-флешей и 3974 стрит-флеш. А в стандартном покере МО чуть больше минус единицы: -0,954, возможно -0,924 (почему-то немного разошлось на 2 менее надежном способе, значит, есть мелкая ошибка).
Это Я вне форума      
Старый 04.11.2005, 18:04   #11 (permalink)
Новичок
 
Регистрация: 25.09.2005
Адрес: Томск
Сообщений: 27
У меня просьба ко всем кто считает МО по комбинаторным формулам,
раньше я брал эти формулы на poker.ru, но теперь там все снесли,
а я снес свой винт на помойку и теперь придется все начать заново.

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

2_Это Я Как ты усложняешь ГСЧ, у меня тоже часто вылазят мастевые комбинации, после 40-50 млн.раздач получается в 2-2.5 раза чаще чем должно быть по терверу.
rombyk вне форума      
Старый 05.11.2005, 13:05     TS Старый   #12 (permalink)
Увлечённый
 
Регистрация: 26.10.2005
Адрес: Провинция
Сообщений: 462
Привет 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)!). Потом умножаешь или делишь сочетания.
Это Я вне форума      
Старый 05.11.2005, 13:48   #13 (permalink)
Участник
 
Регистрация: 28.10.2005
Адрес: Калуга
Сообщений: 158
Друзья!
Есть, возможно, наивный вопрос:
А откуда вы берете это МО?

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

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

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

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

Скажите, я на правильном пути?
Спасибо.
__________________
Скилл равен разнице между апстриком и даунстриком.
Gefest вне форума      
Старый 05.11.2005, 13:56   #14 (permalink)
Бессмертный
 
Аватар для korovin
 
Регистрация: 13.02.2004
Адрес: Россия
Сообщений: 3,027
Раздаем случайно 5 карт против карты дилера. Считаем МО каждого возможного решения перебором всех возможных вариантов. Выбираем лучшее МО, суммируем. При желании (для проверки на ошибки) иммитируем реальную игру. Сравниваем МО реальной игры с расчетным. Если совпадает, значит все ОК.
korovin вне форума      
Старый 05.11.2005, 14:07   #15 (permalink)
Участник
 
Регистрация: 28.10.2005
Адрес: Калуга
Сообщений: 158
Цитата:
Сообщение от Цитата:
Считаем МО каждого возможного решения перебором всех возможных вариантов. Выбираем лучшее МО, суммируем.
При всем уважении - но получим завышенное МО!
Ситуация:

У дилера
Что надо делать? Надо пасовать (МО=-1)
А при переборе всех возможных вариантов рано или поздно мы неизбежно купим пару, которая сыграет (МО= -1 + 3 = +2). Для данного расклада это будет лучшее МО, но это неправильное МО, так как в реальности мы НЕ будем прикупать, так ведь?
__________________
Скилл равен разнице между апстриком и даунстриком.
Gefest вне форума      
Старый 05.11.2005, 14:43   #16 (permalink)
Бессмертный
 
Аватар для korovin
 
Регистрация: 13.02.2004
Адрес: Россия
Сообщений: 3,027
Перебрав все варианты обменов мы получим множество пар и множество пустых комбинааций, каждая из которых будет иметь свое лучшее МО (пас и стэй). Просуммировав это все и вычтя стоимость обмена мы получим МО обмена, которое будет хуже чем -1. Т.е. оптимальным решением в данном раскладе будет ПАС.
korovin вне форума      
Старый 05.11.2005, 14:57   #17 (permalink)
Участник
 
Регистрация: 28.10.2005
Адрес: Калуга
Сообщений: 158
Цитата:
Сообщение от Цитата:
Перебрав все варианты обменов
Теперь понятно.
__________________
Скилл равен разнице между апстриком и даунстриком.
Gefest вне форума      
Старый 06.11.2005, 14:23   #18 (permalink)
Увлечённый
 
Регистрация: 13.02.2004
Сообщений: 443
Цитата:
Сообщение от Korovin писал сб, 05 ноября 2005 13:56
Раздаем случайно 5 карт против карты дилера. Считаем МО каждого возможного решения перебором всех возможных вариантов. .
Для диллерского пятока всеравно же приходится пользоваться комбинаторными формулами.
Или у тебя всётаки "чистый" перебор?

ЗЫ У меня перебором довольно тормознуто получялось.

ёжик вне форума      
Старый 06.11.2005, 16:37   #19 (permalink)
Бессмертный
 
Аватар для korovin
 
Регистрация: 13.02.2004
Адрес: Россия
Сообщений: 3,027
Разумеется формулы, но я проверял их на полном переборе. Результат идентичен. Т.е. фраза "перебираем все варианты карт дилера" верна.
korovin вне форума      
Старый 06.11.2005, 18:40   #20 (permalink)
Увлечённый
 
Аватар для cooper(jr)
 
Регистрация: 21.03.2005
Сообщений: 427
Отправить сообщение для cooper(jr) с помощью ICQ
Цитата:
Сообщение от Korovin писал вс, 06 ноября 2005 18:37
Разумеется формулы
Это как? На листочке с ручкой? Пятак, насколько знаю, наибольшая головная боль...
cooper(jr) вне форума      

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Есть программисты тут? AllMAD Железо 5 02.07.2010 12:30
SAP программисты всех стран... alexejv Поговорим за жизнь 6 27.01.2009 13:43
Программисты дайте совет Брюс Поговорим за жизнь 11 07.01.2006 11:52


Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.

Быстрый переход
Правила форумов CGM Контакты Справка Обратная связь CGM.ru Архив Вверх Главная
 
Использование материалов сайта разрешено только при наличии активной ссылки на источник.
Все права на картинки и тексты принадлежат Информационному агентству CGM и их ПАРТНЕРАМ. Политика конфидециальности
CGM.ru на Youtube CGM.ru на Google+ CGM.ru в Twitter CGM.ru на Facebook CGM.ru в vKontakte CGM.ru в Instagram

В сотрудничестве с Pokeroff.ru
Текущее время: 03:33. Часовой пояс GMT +3.
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot