huanle斗地主蒙特卡洛方法模拟

huanle斗地主蒙特卡洛方法模拟

前言

2020年3月份,玩了很久的欢乐斗地主,无论起始如何最终总会输光。于是决定采用蒙特卡洛(MC)方法模拟欢乐斗地主的输赢过程。简单总结如下

斗地主规则简化

  1. 场次等级

    场次等级 1 2 3 4
    入场桌费 330 540 1300 3000
    最低豆 1000 2000 8000 5W
    最高豆 10w 30w $\infty $ $\infty $
    底分 8 20 48 120
    输赢封顶 2w 8w 20w 48w

    ​ 设置四种场次等级。

    玩家心态:假设玩家符合条件下,默认选择最低级场进行对局。

  2. 加倍方式

    加倍倍数

    \[\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确定

  3. 对局方式

    每一次对局随机生成玩家A和B,玩家AB的豆数通过均匀随机函数确定。随机三位确定地主和农民身份。

  4. 结算方式

    输赢按照随机数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)    收藏  举报

导航