Просмотреть всю тему "Ускорить расчет раскладов в покере..." »»
Re: Я использую такой алгоритм   ID:23714   ответ на 23702 Сб, 10 апреля 2004 19:31 [#]
Mariner Форумы CasinoGames
Приветствую!

Еще раз повторю, мне нужна всего лишь идея. Остальное додумывается самостоятельно в автономном режиме. Smile
Мой алгоритм позволяет с помощью одной и той же процедуры считать обмен 0..5 карт при открытых 0..5 карт дилера. Только медленно. Smile
Алгоритм следующий. Задаем 5 карт игрока. Задаем открытую карту дилера. По формулам комбинатроники определяем комбинации дилера. Затем по формулам комбинатроники считаем сколько раз проиграет данный расклад игрока дилеру. Сколько раз выиграет. Ну и до кучи считаем ничьи. При заданных оплатах за комбинации, считаем МО.
Если проводим обмен 1..5 карт, то алгоритм будет следующим. Убираем из начального расклада игрока 1..5 карт, добираем в цикле недостающие карты. Получаем новый расклад к которому применяется приведенный выше алгоритм. Суммируем МО каждого расклада и делим на число таких раскладов при обмене.
Например, обменять 1 карту игрока можно 5 способами. Пусть у нас первый бокс и открыта 1 карта дилера.
Меняем 1 карту в первой позиции расклада игрока. Всего возможно 52-1-5=46 обменов. Получаем 46 новых раскладов игрока и значений их МО. Затем меняем карту во 2,3,4 и 5 позиции расклада игрока.
Выбираем лучшее значение МО и, соответственно, позиции обмена.
Обменять 5 карт можно всего одним способом. Возможных новых комбинаций игрока С(46,5)=1370754. Мой алгоритм считает около 2 минут. Тормоза из-за того, что необходимо посчитать МО для 1370754 новых раскладов. Confused
Какие данные надо предварительно насчитать и запомнить, чтобы ускорить расчет обмена 5 карт? Обмен 5 карт рассматриваю в том плане, что он самый требовательный к скорости расчета.

2 Ivan
Quote:
Комбинации дилера считаются по комбинаторным формулам для начальной позиции и для некоторых критических вариантов обмена. Для комбинации Туз-Король учитывается 3-я карта. Для остальных комбинаций учитывается только один номинал - для пары это номинал пары, для 2-х пар номинал старшей пары и т.д. Все флеши считаются одинаковыми. Эти числа запоминаются и потом используются для сравнения с комбинациями игрока. Комбинации игрока для всех рассматриваемых вариантов обмена считаются по комбинаторным формулам, так же как и комбинации дилера. Этот алгоритм в некоторых ситуациях дает значительную ошибку в оценке, но при выборе хода ошибки редки и все они недорогие.
Продолжу тройка и фул учитывается номинал тройки. Стрит (стритфлэш, рояль) - старшая карта. Так?
Можно чуть подробнее про "Комбинации игрока для всех рассматриваемых вариантов обмена считаются по комбинаторным формулам".
Как ты считаешь возможные комбинации игрока по формулам комбинатроники?
Смущает вот что. Обмен 5 карт у игрока. Можем посчитать по формулам комбинатроники сколько комбинаций различного типа может быть из оставшихся 46 карт у игрока. Затем, посчитать сколько возможных комбинаций дилера. А вот как теперь найти МО обмена?

2 Korovin
Quote:
А можно считать АБСОЛЮТНО точно. Анализ одной руки 0.000001с или миллион рук в секунду.
Готов обсудить продажу алгоритма с заинтересованными лицами. ДОРОГО.
Готов бесплатно выслушать идею. Т.к. скорость и точность расчета просто потрясают. Shocked