4

抱歉,我刚刚开始这个项目,没有任何想法或代码,我问的更多是理论问题而不是编程问题。

似乎每个谷歌搜索都提供相同的响应,并且很难找到这个问题的答案:

有没有一种方法可以在不使用蒙特卡洛/详尽枚举方法的情况下计算德州扑克的获胜百分比(就像他们在黑暗或其他电视扑克赛事之后的扑克中所做的那样)。假设所有牌面朝上,并且我们知道牌组中的每张牌。

其他论坛上的每个回复似乎都是“使用 pokerstove”或类似的东西,我正在寻找编写代码的理论。

谢谢。

4

2 回答 2

0

有没有一种方法可以在不使用蒙特卡洛/穷举枚举方法的情况下计算德州扑克的获胜百分比(就像他们在黑暗或其他电视扑克赛事之后的扑克中所做的那样)。

在特定情况下,可能...

您可以在翻牌前对两名玩家进行单挑对决时使用完美的翻牌前查找表:请注意,“典型的”169 vs 169 近似值不够好(比如 Jh Th vs 9h 8h 并不是真正的“JTs vs 98s”:我意思是,这将是一个相当粗略的近似)。

除此之外,如果你有很多内存并且你可以忍受巨大的缓存未命中,从技术上讲,你可以预先计算巨大的查找表(比如在服务器端)并为其他情况进行查找(例如,对于每可能的三名玩家全押比赛) preflop),但你真的需要很多内存:)

请注意,翻牌和转牌的“完整枚举”不是问题:翻牌时只有 2 张牌要来,所以通常只有 C(45,2) [两名玩家在翻牌全押,我们知道 2* 2 张底牌 + 3 张公共牌——因此留下 990 种可能性] 或 C(43,2) [三名玩家在翻牌时全压,我们知道 3*2 底牌 + 3 张公共牌]。

因此,实际的评估者不会使用一种方法,而是使用几种方法。例如:

  • 两位玩家翻牌前全压的查找表(最快)
  • 任何数量的玩家在翻牌或转牌全押的完整枚举,因为它很小(最多 990 种可能性)——非常快
  • 三名或更多玩家翻牌前全压的蒙特卡洛或完整枚举——慢得令人难以置信

有趣的是,在最典型的情况下,您会非常非常快地得到结果:大多数实际全押涉及两名玩家,而不是三名或更多。

因此,您要么在“翻牌前 1 对 1”查找表中查找,要么进行完整的 C(45,2) 或 C(46,1) 完整枚举(在这两种情况下,速度都非常快)。

实际上只有“三名玩家或更多玩家翻牌前全压”的情况才需要时间。

于 2012-06-03T15:25:56.073 回答
0

The answer is no.

There is no closed form computation that you can do to compute poker equities. Using combinatorics, you can identify and solve many subproblems, which speeds up computation.

For example, if you are considering all five card hands, there are 52 choose 5 = 2,598,960 different hands. But knowing that suits are equivalent and using combinatorial methods (either analytic or computational), you can reduce the space of all hands to 134,459 classes each weighted according to the number of different hands in each equivalent class.

There are also various ways of using exhaustive evaluations tailored to your application. If you need to perform some subset of evaluations repeatedly, you can use caches or precomputed lookup tables targeted to your specific needs.

于 2012-06-02T02:15:53.217 回答