huanle斗地主蒙特卡洛方法模拟
huanle斗地主蒙特卡洛方法模拟
前言
2020年3月份,玩了很久的欢乐斗地主,无论起始如何最终总会输光。于是决定采用蒙特卡洛(MC)方法模拟欢乐斗地主的输赢过程。简单总结如下
斗地主规则简化
-
场次等级
场次等级 1 2 3 4 入场桌费 330 540 1300 3000 最低豆 1000 2000 8000 5W 最高豆 10w 30w $\infty $ $\infty $ 底分 8 20 48 120 输赢封顶 2w 8w 20w 48w 设置四种场次等级。
玩家心态:假设玩家符合条件下,默认选择最低级场进行对局。
-
加倍方式
加倍倍数
\[\eqalign{ & k = 15 \cdot {2^m} \cdot {3^n} \cr & m \in (0,1,2,3,4,5) \cr & n \in (0,1) \cr} \]m,n通过随机函数rand确定
-
对局方式
每一次对局随机生成玩家A和B,玩家AB的豆数通过均匀随机函数确定。随机三位确定地主和农民身份。
-
结算方式
输赢按照随机数p与玩家赢的概率prob_win相比确定。先假设玩家赢的概率为0.5。
玩家和AB玩家的豆数需扣除入场桌费。
玩家最多输赢豆数不超过本局入场携带豆数,不超过AB玩家入场携带豆数。
玩家输赢不超过场次封顶值
蒙特卡洛模拟
模拟过程通过matlab编程实现。
结果与讨论
主要分析初始豆数、入场桌费、玩家心态、玩家赢的概率对对局数和对局过程的影响。
计算结果
-
prob_win=0.5
-
默认选择最低级场
-
初始豆数3W
计算得到相关参数的变化值

对局过程描述
我的初始钱数:30000
我的钱数:29670,A的钱数:49540,B的钱数:12040
第1局斗地主,我是地主,场型:新手场,我的钱数29670
这局prob:0.738906,赢了,输赢数:1440,最终结果:
我的钱数:31110,A的钱数:49540,B的钱数:12040我的钱数:30780,A的钱数:42110,B的钱数:6210
第2局斗地主,我是地主,场型:新手场,我的钱数30780
这局prob:0.666829,赢了,输赢数:1440,最终结果:
我的钱数:32220,A的钱数:42110,B的钱数:6210我的钱数:31890,A的钱数:31920,B的钱数:15260
第3局斗地主,我是地主,场型:新手场,我的钱数31890
这局prob:0.298828,输了,输赢数:1440,最终结果:
我的钱数:30450,A的钱数:31920,B的钱数:15260我的钱数:30120,A的钱数:91990,B的钱数:37610
第4局斗地主,我是地主,场型:新手场,我的钱数30120
这局prob:0.107493,输了,输赢数:480,最终结果:
我的钱数:29640,A的钱数:91990,B的钱数:37610... ...
由于模拟具有随机性,每次结果会有些区别。于是进行了1000次重复试验

大量试验表明,多数人情况下3W豆入场超不过100局就退场。能玩100局以上的朋友只占0.298。
初始豆数
初始豆数数量越多可玩局数相对越多,以30w为例。

模拟1000到100W的玩家初始豆数,能玩的游戏局数

一般而言初始豆数较多,能玩的局数也较多,存在波动。
30w豆入场,重复模拟1000次,0.442的朋友能坚持500局游戏。

入场桌费
初始3W豆,不收桌子费用时

玩家能玩的对局数明显多于收入场桌费情况,但最终还是可能输光。
玩家心态
玩家满足条件情况时,默认选择高倍场次时,入场豆30W,

可能会早点结束退场。
玩家技术
假设玩家技术很好,能赢的概率为0.6
可玩局数会大大增多。
实际对局玩家能赢的概率会是多少?
后续
实际对局过程中,遇到玩家好牌还会超级加倍、加倍,会产生什么影响?系统会设置连赢之后的对手么?需要什么样的技术才能一直玩下去?
模拟仅供参考,对于蒙特卡洛模拟需要多次重复试验。
posted on 2021-01-14 17:35 MultiSimOpt 阅读(259) 评论(0) 收藏 举报
浙公网安备 33010602011771号