KeyTo9_Fans 发表于 2015-3-7 16:45:07

德州扑克各种打法的最佳策略

德州扑克有多种打法,其中最简单的就是荷官场打法,我们首先来研究一下这种打法。

=====

荷官场打法只有$2$个玩家:我、荷官。

游戏开始时,我和荷官各随机分得$2$张底牌。

我的底牌可以看,荷官的底牌不能看。

接下来我要根据我的底牌做决定:

$1$、弃牌:输掉$1$块钱,游戏结束。
$2$、下注:把$3$块钱放到桌上,游戏继续。

接下来会开出$3$张公共牌,然后我要继续做决定:

$1$、看牌:游戏继续。
$2$、加注:把$1$块钱放到桌上,游戏继续。

接下来会开出第$4$张公共牌,然后我要继续做决定:

$1$、看牌:游戏继续。
$2$、加注:把$1$块钱放到桌上,游戏继续。

此时记桌面上的钱数为$k$块。

接下来会开出第$5$张公共牌,然后跟荷官比牌【注】,有$4$种结果:

$1$、我的牌大,并且是顺子或以上牌型:桌面上的钱归我,荷官另赔$k$块钱给我。
$2$、我的牌大,但不是顺子或以上牌型:桌面上的钱归我,荷官另赔$(k-1)$块钱给我。
$3$、双方的牌一样大:桌面上的钱归我。
$4$、荷官的牌大:桌面上的钱归荷官。

=====

问:

$1$、我方的最佳策略是什么?
$2$、这个游戏哪方有优势?优势有多大?

注:比牌规则可以看这张贴子http://bbs.emath.ac.cn/thread-2246-1-1.html

KeyTo9_Fans 发表于 2015-3-9 17:14:14

下载这个附件:



解压后就可以玩这个游戏了。

我打了$600$局左右,结果我方略微盈利。

由于游戏次数还不够多,该盈利没有统计显著性。

所以要通过精确的计算才能知道我的真实盈亏。

wayne 发表于 2015-3-16 17:41:31

mark一下。

到时候再算算加大小王作为 wild card 的情况。。。

KeyTo9_Fans 发表于 2015-9-11 03:10:31

通过枚举所有可能的情况,该游戏的最佳策略已经求解出来了。

下载这个附件:



解压后运行Taxes.exe,然后按"Start",就可以看到【我方牌型的优劣程度】和【最佳策略】了。

其中:

【我方牌型的优劣程度】是一个实数,表示当前牌型如果选择"Bet",我方的期望盈亏是多少;

【最佳策略】是通过按钮下方的一个浅蓝色的单词标出,表示当前的最佳策略是选择哪个按钮。

#####

遗憾的是,通过精确的计算,结果是:

即使我方采取最佳策略,平均每局仍然要输给荷官$0.0203692434743...$块钱。

也就是说,我们费了这么大的劲去寻找这个游戏的最佳策略,

结果发现这是一个坑爹的游戏,连最佳策略都不管用:@

我们只会不断地把钱输给荷官,无法从荷官手里赢钱。

即使最初几百局侥幸赢了很多钱,但是只要玩的局数足够多,所赢的钱最终必会输光。

cn8888 发表于 2015-9-26 12:21:45

回复一下你

KeyTo9_Fans 发表于 2015-12-17 11:11:12

德州扑克第二简单的打法是All-in打法。

这种打法的规则就是要么弃牌,要么就把全部筹码压上。

我们接下来研究一下2个玩家的All-in打法的最佳策略。

以新手场为例,玩家最多带入400块钱。

游戏一开始,2个玩家都必须下注,一个玩家下注1块钱,另一个玩家下注2块钱。

然后下注1块钱的玩家先做决定。

如果他弃牌,那么这轮游戏就结束了,他只是输掉1块钱而已。

如果他不弃牌,就必须将400块钱全部压上,然后轮到下注2块钱的玩家做决定。

同样地,如果他弃牌,那么这轮游戏就结束了,他只是输掉2块钱而已。

如果他不弃牌,就必须将400块钱全部压上,然后大家摊牌比牌,

牌大的一方赢得全部筹码,牌小的一方输掉全部筹码。

如果打平,那么大家就平分筹码。

#####

这种打法的最佳策略已经通过程序求解出来了。

结论是:

=====
我方作为先手,如果拿到AA、KK、QQ、AK、同花AQ、同花AT、同花A5、同花A4,那么选择All-in;

如果拿到TT,以$20.0660%$的概率All-in;

如果拿到同花A3,以$2.7392%$的概率All-in;

其余情况选择放弃;

平均All-in概率为$3.8698%$。

我方作为后手,如果拿到AA、KK、同花AK,那么选择跟随;

如果拿到QQ,那么以$75.6939%$的概率跟随;

如果拿到异花AK,那么以$56.1953%$的概率跟随;

其余情况选择放弃;

平均跟随概率为$2.0577%$;

大家最终会摊牌比牌的概率为$0.079629%$,不到万分之八。
=====

求解过程如下:

KeyTo9_Fans 发表于 2015-12-17 14:55:48

下载这个附件,解压后就可以玩这个游戏了:



运行Taxes.exe,然后点击“Start”或“Auto Start”之后,牌局是自动进行的。

“Start”是自动进行$1$局,“Auto Start”是自动进行$1000000$局。

“Auto Start”自动进行的局数可以在auto_start.txt里设置。

在自动对局中,我方要All-in的牌在all_in.txt里设置,我方要弃的牌在fold.txt里设置。

手牌是用一个$0$到$337$的数字来表示的,每个数字表示什么手牌,可以在hands_interpretation.txt里查到。

records.txt会记录你的成绩和进行的局数。

KeyTo9_Fans'_records.txt则是本人亲测$1.6*10^11$局之后的记录。

如果要取消自动对局,就把all_in.txt和fold.txt重命名成别的文件即可,需要时再重命名回来。

取消自动对局后,对于特定的手牌,你可以选择一次性全下(All-in once)、一次性弃牌(Fold once)、总是全下(All-in always)、或者总是弃牌(Fold always)。

选择总是弃牌时,还可以选择是弃掉这一手牌,还是同时弃掉所有比这手牌小的牌。

手牌大小参见hands_interpretation.txt,编号为$0$(先手)或$169$(后手)的牌是最大手牌,然后编号越大,该手牌越小。

此时系统会根据你的选项重新生成all_in.txt和fold.txt,再次自动进行游戏。

KeyTo9_Fans 发表于 2015-12-29 18:39:37

之前讨论的都是$2$个玩家进行的游戏。

而德州扑克是支持多人参与的,人数的上限一般是$9$人。

我们接下来研究一下多人参与的德州扑克游戏。

我们仍然从最简单的荷官场打法开始。

$4$楼提到,$1$个玩家与荷官单挑,即使玩家采取最佳策略,平均每局仍然要输给荷官$0.0203692434743...$块钱。

而多个玩家群殴荷官,是有可能扭转败局的,

因为在荷官场,玩家之间可以互相看手牌。

跟$1$个玩家与荷官单挑比起来,多个玩家通过互相看手牌,可以多获得一些额外的信息。

我们接下来从$2$个玩家群殴荷官开始,进行精确的计算,

然后不断增加人数,继续进行精确的计算,

看看至少需要多少个玩家群殴荷官,玩家每局的期望收益才不小于$0$。

KeyTo9_Fans 发表于 2016-4-28 18:11:49

由于牌局数目随人数呈指数级增长,$3$人以上的牌局无法列举所有的情况,因而无法进行精确的计算。

我们只好采用随机抽样的方法进行近似的计算。

我们同时开启了$7$个线程,每个线程都运行了$1$个月,得到了如下的结果。

$2$个玩家群殴荷官,平均每局每玩家要输给荷官$0.0173\pm0.0006$块钱;

$3$个玩家群殴荷官,平均每局每玩家要输给荷官$0.0144\pm0.0008$块钱;

$4$个玩家群殴荷官,平均每局每玩家要输给荷官$0.0115\pm0.0010$块钱;

$5$个玩家群殴荷官,平均每局每玩家要输给荷官$0.0088\pm0.0012$块钱;

$6$个玩家群殴荷官,平均每局每玩家要输给荷官$0.0046\pm0.0014$块钱;

$7$个玩家群殴荷官,平均每局每玩家要输给荷官$0.0020\pm0.0016$块钱;

$8$个玩家群殴荷官才能盈利,平均每局每玩家赢$0.0022\pm0.0018$块钱。

从上面的数据我们可以看到,玩家互看手牌可以作出更有利的决策:平均每增加$1$个玩家,平均每局每玩家就少输$0.003$块钱,$8$个玩家群殴荷官就不亏了。

而真实的游戏设定里面,荷官场只有$5$个玩家座位,玩家还是要吃亏:@ 。

KeyTo9_Fans 发表于 2016-9-20 14:01:55

由于在荷官场里捞不到油水,荷官场打法的研究到此为止。

我们接下来研究一下多个玩家的All-in打法。

在真实的游戏设定里面,是有这样的游戏场的,规则如下:

$9$个玩家依次下注$100$、$100$、$100$、$100$、$100$、$100$、$100$、$105$、$110$筹码,

然后从第$1$个玩家开始,每个玩家按顺序依次选择$1897$筹码全下,或者弃牌。

如果前$8$个玩家都弃牌,那么第$9$个玩家无需行动,桌上所有的筹码由第$9$个玩家拿走;

如果只有$1$个玩家全下,其余弃牌,那么桌上所有的筹码由全下的玩家拿走;

如果有$2$个或以上的玩家全下,那么全下的玩家摊牌比牌,桌上所有的筹码由牌型最大的玩家拿走;

如果有多个全下的玩家的牌型并列最大,桌上的筹码由牌型并列最大的玩家平分。

一局结束后,原来的第$9$个玩家变成第$8$个玩家,……,第$2$个玩家变成第$1$个玩家,第$1$个玩家变成第$9$个玩家。

以上为游戏规则。

#####

接下来讨论策略。

由于所有人在$9$局游戏里都要依次充当第$1$个玩家,……,第$9$个玩家,

所以每个人都是平等的,策略可以用这样的一个函数来描述:

【局面】×【手牌】→【行动】

简单起见,我们首先讨论确定的函数(也就是固定的策略),稍后再讨论不确定的函数(也就是随机的策略)。

一个固定的策略需要多少个参数来描述呢?

我们算了一下,【局面】有$510$种,【手牌】有$169$种,一共需要$510\times 169=86190$个参数。

关于“【手牌】有$169$种”,在$2$人All-in打法里的“taxes.doc”里已经解释过了。

这里只解释一下为什么有$510$种局面。

首先看第$1$个玩家,他只面临$1$种局面。

然后看第$2$个玩家,他会面临$2$种局面:第$1$个玩家弃牌,第$1$个玩家全下;

然后看第$3$个玩家,他会面临$4$种局面:弃牌弃牌、弃牌全下、全下弃牌,全下全下;

……

最后看第$9$个玩家,他会面临$2^8-1=255$种局面:弃牌弃牌弃牌弃牌弃牌弃牌弃牌全下、……、全下全下全下全下全下全下全下全下。

所以一共有$1+2+4+8+16+32+64+128+255=510$种局面。

每种局面有$169$种手牌,一共需要$510\times 169=86190$个参数来描述一个固定的策略。

当局面和手牌都确定了,我们应该弃牌还是全下呢?

由于弃牌要损失$100$到$110$个筹码不等,所以只要全下后的期望亏损小于弃牌损失,就该全下,否则弃牌。

那如何计算全下后的期望亏损呢?

编程模拟!

我们接下来将“【局面】×【手牌】”称为【状态】,一共有$510\times 169=86190$种状态。

首先假设所有玩家在所有状态下都是全下,然后统计每种状态的全下次数和每次全下后的平均亏损,

当平均亏损以$3$个标准差显著大于弃牌损失时,以后再遇到这种状态就不全下了,直接弃牌。

一种状态的策略改变,会直接影响到其余状态全下后的平均亏损,

有些状态原来全下是盈利的,但可能由于其它状态的策略改变,后来就不盈利了。

如果这些状态后来显著亏损了,这些状态也会弃牌。

那有没有一些状态原来是显著亏损的,后来由于其它状态的策略改变,反而就显著盈利了呢?

有的。

为了找出这些状态,我们把模拟方法稍作修改。

当某种状态全下后显著亏损时,以后再遇到这种状态,还会试探性地以$1%$的概率全下,以$99%$的概率弃牌。

由于一直保持试探,以后这些状态变成显著盈利的时候,又会全下了。

现在程序已运行$4$天,策略仍在不断调整,未见稳定迹象。

$86190$种状态下的策略最终是否会稳定下来,我们拭目以待。

#####

目前大部分状态下的策略都已经稳定了,还有小部分状态下的策略仍在调整。

我们接下来根据程序目前的运行结果,总结一下每一手牌该怎么打。

这是假设其余$8$个玩家都采取最佳策略时,我方应采取的策略。

$77$以上的大对子:总是全下,显著盈利;
$66$:小于$4$个全下就全下,显著盈利,遇到$4$个以上全下仍可试探性全下,未见显著亏损;
$55$、$44$:小于$2$个全下就全下,遇到$3$个以上全下要弃牌,否则显著亏损,遇到$2$个全下看位置,有前位全下或者$2$个中位全下就弃牌,否则可全下,未见显著亏损;
$33$、$22$:没有遇到全下就全下,显著盈利,遇到$2$个以上全下要弃牌,遇到$1$个前位全下也要弃牌,否则显著亏损,遇到$1$个中后位全下可试探性全下,未见显著亏损;
$AKs$:总是全下,显著盈利;
$AKo$、$AQs$:小于$7$个全下就全下,显著盈利,遇到$7$个以上全下仍可试探性全下,未见显著亏损;
$AQo$:遇到$5$个以上全下要弃牌,否则显著亏损,遇到$4$个全下看位置,有前位全下要弃牌,否则显著亏损,其余情况可全下,显著盈利;
未完待续……

#####

按照上面的策略去游戏场打了,发现很多玩家都不按上面的策略去打,导致我方赢多输少,捞了不少油水。

据说游戏币可以在黑市上卖钱,我以后就靠这个吃饭了:lol

所以上面的策略就只能公布这么多了,否则我的饭碗不保:P
页: [1] 2
查看完整版本: 德州扑克各种打法的最佳策略