Просмотреть всю тему "Создание набора тестов для покерных программ" »»
Re: Создание набора тестов для покерных программ   ID:24653   ответ на 24447 Пн, 25 сентября 2006 18:06 [#]
Sharky Закрыть блок (иконки IM) Форумы CasinoGames
Итак, в качестве примера стандартный Оазис с 1 обменом на 1 боксе. Требуется найти оптимальное решение Bet, Fold, Draw.

Имеем известных карт: 5 на руке и 1 у дилера. 46 неизвестных в колоде. Опять используем принцип комбинаторики и рассчитаем общее число требуемых решений. Так как можно менять любую карту из 5, мы оставляем себе только 4 карты, это значит выборка 4 из 5 и записываем как C(5,4) = 5. Далее можем получить любую из неизвестных 46 карт, это C(46,1) = 46. Далее для оценки понадобится сравнить силу нашей комбинации с комбинацией дилера, которая не известна. Посчитаем и ее используя все вероятности на оставшихся картах. Для этого сделаем выборку 4 недостающих карт из оставшихся 45 (одну мы взяли себе). Получим C(1,1) * C(45,4) = 148995. Далее вычисляем предпочтительное действие Bet или Fold для каждой конечной выборки. Прибавляем оплату или вычитаем потерю находим EV (ценность) данного действия.

Теперь посчитаем сколько требуется просчитать вариантов решений для обмена карт: C(5,4) * C(46,1) * C(1,1) * C(45,4) = 5 * 46 * 1 * 148995 = 34,268,850 решений. Прибавим оценку принятия решения без обмена C(46,4) = 163185. Сложим все вместе и получим: 34,432,035 вариантов требующих вычислений для полной так сказать картины.

Уверен, все согласятся, что вычисления полными переборами с генерацией подмножеств займет много времени. Но вычисления при этом абсолютно верные. Встает задача сократить время перебора, и вот тут уже каждый использует свои трюки и хитрости. У одних теряется точность у других нет и т.п. Поэтому на вопрос почему прога X показывает резултат отличный от проги Y нужно задавать производителям этих прог... Не знаю, кто что использует в оптимизации, поэтому дальше пишу только про свое ПО. Я использую формулы для подсчета вероятностей руки дилера. Таким образом, что обмена 1 карты занимает теперь C(5,4) * C(46,1) = 230 решений. Результат вычислений при этом остается абсолютно точным! Это основная причина, по которой пошел именно по этому пути оптимизации. Минус: сложные формулы и требующие длительной проверки. Но это не единственная оптимизация всего процесса. Очень много хитростей используется для достижения минимального времени расчета. Но о них уже писать не буду. Скажу только, что любая оптимизация не влияет на точность, и это считаю правильным. И между тем постоянно возникают еще идеи, как еще больше сократить время расчетов. Для меня это является чем-то вроде хобби, пока не начал поставки своего ПО в коммерческих целях. Цель -- самый быстрый и точный анализ плюс огромное количество правил. Cool