| 
    | 
    
    | Программисты помогите   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 |  | Разумеется формулы | 
 |  |  |  |