Loading...

扑克数学之胜率计算

在德州扑克比赛的直播过程中,因为有感应牌或者是牌桌摄像头,我们可以在屏幕上看到玩家的手牌,同时还会注意到转播方往往会把玩家在当前情况下的胜率百分比直接显示在手牌旁。平时的游戏或者学习过程中,大家可能也多次会需要(摊牌)胜率的信息。

大家是否好奇过胜率的数学原理?这一切其实很简单。其计算方法主要有两个部分。

1. 牌力分析(hand-evaluate)

首先我们需要一个牌力分析函数来帮助我们判断摊牌后的绝对牌力。

从大家最熟悉的德州扑克的牌力列表开始,从皇家同花顺,到高牌结束,相同牌力的5张牌的排列组合一共有7462种(并不重复计算相同牌力但不同花色的组合):

同花顺(包含皇家同花顺)

未命名7.jpg

四条

未命名2.jpg

葫芦

未命名3.jpg

同花(除去同花顺)

未命名4.jpg

顺子(除去同花顺)

未命名7.jpg

三条

未命名8.jpg

两对

未命名9.jpg

一对

未命名10.jpg

高牌

未命名11.jpg

总数 10+156+156+1277+10+858+858+2860+1277 = 7462

需要再次注意的是这里我们计算的是绝对牌力的总数而不是排列组合的总数。

我们可以用最简单的方法写出所有7462种不同情况下的组合,给每个情况按实际大小降序赋值,用字符串查找(正则表达式)的方式做对比,将2张手牌和5张公共牌拼接之后,在75的情况下得出最强牌所代表的牌力值。

2. 所有情况的遍历

以单挑为例,在已知双方手牌的情况下,场上5张公共牌的可能性一共有(548=1712304种,每种情况我们分别用牌力分析函数计算两位玩家的绝对牌力,并记录胜负平。在遍历完所有情况之后,便可知道双方的精确胜率。


代码参考:

我们提供了以上相关代码在GitHub供大家参考学习。


胜率计算器工具发布版:

基于此算法,在经过了性能优化之后,我们制作了一个小胜率计算工具,并经过了严格的测验,在此发布给大家:

PokerLogic胜率计算器:http://thepokerlogic.com/odds-calculator/


欢迎对德州扑克与编程感兴趣的朋友就此话题联系我们加入程序员与扑克讨论群。

支付方式

购买项目

XXXXX

应付金额

00.00元

(其中推荐奖励金抵扣100元)
确定
优惠码

使用优惠码

使用微信扫码付款

独立课程包

购买项目

XXXXX

应付金额

00.00元

(其中推荐奖励金抵扣100元)
确定
优惠码

使用优惠码

支付金额:998.0

微信支付
购买完整课程包 ¥1000.00
购买本节课程 ¥130.00
取消

为了保障您的账号安全和权益,请绑定手机号

手机号
验证码
提示