如何以编程方式计算扑克赔率?

Posted

技术标签:

【中文标题】如何以编程方式计算扑克赔率?【英文标题】:How do I programmatically calculate Poker Odds? 【发布时间】:2010-09-16 16:09:39 【问题描述】:

我正在尝试编写一个简单的游戏/实用程序来计算扑克赔率。我知道有很多 resources 谈论这样做的公式,但我想我在将其转换为代码时遇到了麻烦。特别是,我对德州扑克很感兴趣......

我知道有几种不同的方法,一种是您可以根据您看到的牌来计算您抽到手牌的几率。另一种方法是计算你赢得某手牌的几率。第二种方法似乎要复杂得多,因为您必须输入更多数据(有多少玩家等)

我不是要求你为我写它,但在正确的方向上进行一些轻推会有所帮助:-)

【问题讨论】:

一旦你得到它,你会加入计算底池赔率,因此它归结为跟注/弃牌情况的二元决定吗? 不是一个答案,让它成为评论/推动 - 可以在此处找到 Objective-C(主要是 C)和 Java 中的开源评估器:specialk-coding.blogspot.com/2010/04/…(文章末尾的链接到谷歌项目)。 【参考方案1】:

这里有一些文章链接,可以作为起点:Poker Logic in C# 和 Fast, Texas Holdem Hand Evaluation and Analysis

“这段代码 sn-p 将让您使用 C# 和 .NET 以困难的方式计算扑克概率。”

这个Wikipedia article about Poker Probabilities 和这个优秀的statistical tutorial 给出了理论基础。

使用 Objective-C、Java、C/C++ 或 Python 编写的完整项目示例可在 SpecialKEval 找到。进一步的链接和阅读可以在其中找到。

【讨论】:

【参考方案2】:

蒙特卡洛模拟是计算扑克牌赔率的常用方法。网络上实现这种模拟德州扑克的例子很多。

http://www.codeproject.com/KB/game/MoreTexasHoldemAnalysis1.aspx

【讨论】:

我已经构建了一个手牌评估器和扑克模拟器,并且我也使用了 montecarlo 进行模拟。我没有尝试用数学方法计算每种不同底牌组合的获胜几率,但我想这将是一项非常困难的任务。【参考方案3】:

看看pokersource 如果你有相当强的 C 能力。恐怕这并不简单,但是您正在寻找的某些东西很复杂。如果输入格式正确(也不容易),使用该库的 poker-eval 程序可能会做很多你想做的事情。 this one 或 this 等网站也使用此库 AFAIK。

不过,情况可能更糟,您可能想要计算一些棘手的东西,例如 Omaha Hi-lo...

【讨论】:

【参考方案4】:

Pokersource 和统计文章是不错的建议。但这确实最好通过蒙特卡洛模拟来完成,这是一种解决此类难题的有用、简单且强大的方法。

Omaha Hi-lo 和德州扑克一样好用

【讨论】:

【参考方案5】:

德州扑克游戏评估器的完整源代码可在此处找到:

http://www.advancedmcode.org/poker-predictor.html

它是为 matlab 构建的,GUI id m 编码但计算引擎是 c++。

它允许计算赔率和概率。在我的 2.4Ghz 笔记本电脑上,它可以在 0.3 秒内处理 100000 个 10 名玩家的游戏计算。

精确的实时计算机:-)

【讨论】:

这相当快,但不是那么快 - 公共领域中有评估员可以给出准确的答案(即没有抽样),至少快 10 倍。【参考方案6】:

也请看这里:

http://specialk-coding.blogspot.com/2010/04/texas-holdem-7-card-evaluator_23.html

蒙特卡洛模拟通常比好的精确评估器慢。

【讨论】:

以上是关于如何以编程方式计算扑克赔率?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SwiftUI 中以编程方式计算 MKMapCamera centerCoordinateDistance

如何以编程方式停止/启动远程计算机上的计划任务?

如何以编程方式阻止应用程序读取计算机文件?

[世界杯]根据赔率计算各种组合可能性与赔率

如何以编程方式计算图像的(相对)复杂度?

如何使用 python 以编程方式计算存档中的文件数