我有一个问题:我想知道一名拿着扑克手组合的玩家击败了另一个拿着其他扑克手组合的玩家。

投资组合中的每一只手都有重量(即可能性)。投资组合中的每一只手也都知道自己的“力量”。这实际上意味着所有卡都已被交易。因此,请假设不需要更多的卡。

这个问题之所以令人讨厌的原因是由于重复的卡问题。例如,如果我从每个玩家的投资组合中选择一个随机持有,则必须检查这些持有量不会共享卡 - 显然,这两部戏都无法处理同一张卡。

我想快速执行此操作,以便我可以每秒进行许多不同的rangea vs 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%} ....}
(每个手工都包含不使用“板卡”的所有可能持有)

目标::计算Probaility Handrangea击败Handrangeb

有帮助吗?

解决方案

我认为您想要这样的东西:

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为AC,因此不再有7.5%的手动为AC(实际上,实际上有0%的机会)。因此,考虑到A具有特定手的概率,您的可能性乘以A的概率,鉴于A的概率,乘以A的概率,乘以A手跳动B的手的概率。这应该给您带来一只手与B的特定手和获胜的可能性。我认为所有这些对的迭代都应该给出所需的结果。

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

编辑:我应该注意,由于您指的是所有卡都已被交易的情况,因此getProbabilityadeFeatsb()函数将返回1或0。此外,getConditionalProbability()要么正好是0(因为手共享卡片)或者只是您的正常体重。如果手的特异性较低(如果handa是AA,那么手动可能是AA的一种不同的味道,但可能性较小)。

其他提示

我编写了一些通过蒙特卡洛(Monte Carlo)做到这一点的软件。这意味着我双手完成了两只手,有1000次,随机董事会可能会在情况下到达,并计算出胜利和损失。令人惊讶的是准确。

由于我是为德克萨斯·霍尔德姆(Texas Holdem)做的,因此(1)交易,(2)flop,3(转弯)会做同样的事情,以便玩家可以看到董事会的百分比如何变化。

我真的应该完成该软件。但是我停止在线玩扑克。

我认为安德鲁·普罗克(Andrew Prock)被认为是这里的专家。查看讨论 这里, 和其中的链接。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top