Оцените Покерный HandRange A против Покерного HandRange B - PullRequest
1 голос
/ 10 ноября 2010

У меня есть такая проблема: я хочу знать, как часто игрок с портфелем покерных комбинаций бьет другого игрока с другим портфелем покерных комбинаций.

Каждой руке в портфеле присваивается вес (то есть вероятность).Каждая рука в портфеле также знает свою «силу».Это фактически означает, что все карты были сданы.Поэтому, пожалуйста, примите во внимание, что больше не нужно сдавать карты.

Причина, по которой эта проблема раздражает, связана с проблемами дубликатов карт.Например, если я выбираю случайное удержание из портфеля каждого игрока, я должен убедиться, что эти запасы не делят карту - очевидно, обе игры не могут быть сданы на одну карту.

Я хочу сделать этобыстро, так что я могу сделать много разных сравнений RangeA против RangeB в секунду.У меня есть решение, но я пока не буду об этом говорить, потому что не хочу портить ответы.

- Для примера -
Учитывая 5-карточную доску "Ах 3с8c Td Jh ":
HandRangeA = {{" As Ac ", 2,5%}, {" As Ad ", 2,5%}, {" Ac Kc ", 5%} ....}
HandRangeB ={{"As Ac", 7,5%}, {"As Ad", 7,5%}, {"Ac Kc", 5%} ....}
(Каждый HandRange содержит все возможные удержания, которые не используются«доска карт»)

Цель :: вычислить вероятность HandRangeA бьет HandRangeB

Ответы [ 3 ]

1 голос
/ 10 ноября 2010

Я думаю, что Эндрю Прок считается экспертом здесь;проверьте обсуждение здесь и ссылки в нем.

1 голос
/ 10 ноября 2010

Я написал программное обеспечение, которое делало это через Монте-Карло.Это означает, что я выполнил обе руки до завершения, 1000 раз со случайными досками, которые могли прибыть, учитывая ситуацию, и подсчитал выигрыши и проигрыши.Это было удивительно точно.

Так как я делал это для техасского холдема, я сделал бы то же самое после (1) сделки, (2) флопа, 3 (хода), чтобы игрок мог видеть, как их процентыизменилось с учетом платы.

Я действительно должен был закончить эту программу.Но я перестал играть в покер онлайн ....

0 голосов
/ 10 ноября 2010

Я думаю, вы хотите что-то вроде этого:

probWin = 0
For Each HandA in RangeA
  probA = getProbability(HandA)
  For Each HandB in RangeB
    probB = getConditionalProbability(HandB, HandA)
    probWin += probA * probB * getProbabilityADefeatsB(HandA, HandB)

Вам необходимо учитывать условную вероятность, потому что для данной HandA As As, больше нет 7,5% вероятности того, что HandB As As (фактически, вероятность этого составляет 0%). Таким образом, вы берете вероятность того, что А имеет конкретную руку, умноженную на вероятность того, что Б имеет конкретную руку, с учетом того, что имеет А, умноженную на вероятность того, что рука А будет бить руку Б. Это должно дать вам вероятность того, что А получит эту руку против этой конкретной руки Б и выиграет. Я думаю, что перебор всех таких пар должен дать желаемый результат.

Поскольку этот подход является исчерпывающим, нет необходимости в каком-либо моделировании по методу Монте-Карло. Конечно, это будет O (n ^ 2), где n - количество возможных рук, но здесь n относительно мало.

EDIT: Я должен отметить, что, поскольку вы имеете в виду случай, когда все карты были сданы, функция getProbabilityADefeatsB () вернет либо 1, либо 0. Кроме того, getConditionalProbability () будет либо равным 0 (поскольку руки делят карту), либо просто какой у тебя был обычный вес. Было бы сложнее, если бы руки были менее специфичными (если HandA - это AA, то HandB может быть другой разновидностью AA, но это менее вероятно).

...