评估Poker HandRange A vs. Poker HandRange B.

时间:2010-11-10 16:28:35

标签: algorithm poker

我遇到了这个问题:我想知道持有扑克牌组合的玩家多久会击败持有不同投手组合的另一名玩家。

投资组合中的每只手都有权重(即可能性)。投资组合中的每一只手也知道它自己的“力量”。这实际上意味着已经处理了所有卡片。所以请假设不再需要处理卡片。

这个问题令人讨厌的原因是因为重复卡问题。例如,如果我从每个玩家的投资组合中选择一个随机持有,我必须检查这些持有者不会共享一张卡 - 显然这两个游戏都不能同一张牌。

我想快速执行此操作,以便每秒可以进行许多不同的RangeA与RangeB比较。我有一个解决方案,但我不会谈论它,因为我不想玷污任何反应。

- 例如 -
鉴于5张牌“Ah 3c 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 个答案:

答案 0 :(得分:1)

我写了一些通过蒙特卡罗这样做的软件。这意味着我完成了双手完成,1000次随机板可以到达情况,并计算赢和输。这非常准确。

因为我是为德州扑克做的,所以我会在(1)交易,(2)翻牌,3(转牌)之后做同样的事情,所以玩家可以看到他们的比例如何在董事会中改变。

我真的应该完成那个软件。但我不再在网上玩扑克......

答案 1 :(得分:1)

我认为Andrew Prock在这里被认为是专家;查看讨论here,并在其中进行链接。

答案 2 :(得分:0)

我想你想要这样的东西:

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 Ac,HandB不再有7.5%的可能性(事实上,有0%的可能性)。因此,您将A的特定手的概率乘以具有特定手的B的概率,给定A具有的概率,乘以A的手击B的手的概率。这应该会让你有机会对付B的特定牌并获胜。迭代所有这些对应该给出我想的结果。

由于该方法是详尽的,因此不需要任何类型的蒙特卡罗模拟。当然这将是O(n ^ 2),其中n是可能的牌数,但是这里的n相对较小。

编辑: 我应该注意,因为你指的是已经处理了所有卡的情况,getProbabilityADefeatsB()函数将返回1或0.此外,getConditionalProbability()将正好为0(因为双手共享一张卡)或者只是你的常规体重是多少。如果手的特异性较低(如果HandA是AA,那么HandB可能是AA的不同风格,但不太可能),这会更复杂。