2017-04-18 67 views
0

我想找到一种方法来计算手的强度,具体来说有多少独特的手牌(169个起手牌)在摊牌时获得完全或不完整董事会(holdem)。在扑克中给予手牌力的算法

我试着做到这一点,并取得了一定的成功,但我的程序运行需要花费大量的时间,因为我本质上是为每一个可能的手组合分支,并比较聚合结果对于每种情况来说,找到多少手比英雄好。 TLDR的效率非常低,需要不切实际的时间来运行。

但是有像这样的工具http://www.cardplayer.com/poker-tools/odds-calculator/texas-holdem这样的工具看起来更快地进行计算。上面的程序似乎对所有未来的棋盘组合进行了计算,因此它可以为未完成的棋盘提供更好的手势。虽然,对于我的特定程序,我希望在任何给定点上找到英雄之前的手数,这需要我为52 * 51个非独特的起始手中的每一个运行上述程序,并查找我的手其余的地方,一旦有更好的手的数量已经得到,我将不得不减少到不一致的起手(即8c7h和8h7c将减少到87o)

所以我的问题是,是否有任何工具/框架/参考文献(最好用Java语言编写)用于计算英雄的手与一个匿名的手的强度,因为任何完整或不完整的棋盘也不需要花一天时间运行?

+0

使用蒙特卡洛模拟技术,只需要随机播放数以千计的游戏对抗随机双手和电路板,这将花费不到一秒的时间。 – maraca

回答

0

这个讨论有很多信息在Code Projecta tutorial on an algorithm和Java源Stack Overflow Evaluation Algorithms

另外:at Github和不同语言at rosettacode

+0

我有代码能够很快地告诉我手的强度。这不是瓶颈。我遇到的问题是计算英雄前面的独特手的数量,我必须比较所有可能的棋盘组合的所有手牌。然后比较这些结果,然后减少为独特的手。 –

+0

因此,这个问题是寻找各种手的概率,即52选择任何一手牌5,4选择1皇家同花顺,但可能给所有已经看到的牌? –

+0

现在的问题是,有多少独特的手牌在特定的棋盘上处于英雄的前方。有169个独特的起手牌,所以该函数本质上应该是int(返回0-168)getHandsAhead(手牌heroHand,Board currBoard) –

1

我没有太大的扑克样的家伙,但你会发现ThePokerBank网站有趣,约全程专注于poker theory来自麻省理工学院,奖金infographic什么来帮助你了。

你可以采取不同的策略来解决这个问题,所有这些策略都涉及Statiscal分析方面的一些知识,我想说其他扑克算法工作起来更好一点的原因是他们正在使用矢量化数学的一种形式,而不是一系列for循环。我知道像octave/MatLab/R这样的语言采取这种策略来进行批量操作。

祝你好运,玩得开心!