利用蒙特卡洛法模拟竞技游戏玩家的天梯MMR分布

简介

当下我国社会工作竞争压力逐渐上升,生活节奏逐渐加快,压力与日俱增,休息的时间十分有限。因此,电脑或手机平台的电子竞技游戏作为一种既能成为社交手段,又能满足虚荣心的产物逐渐被更多人当作一种高效的解压方式。除开本身精良的制作和公平竞技带来的游戏体验,电子竞技游戏内的基于实力的天梯系统也是用户粘性的保障。由于游戏中公开的实力是玩家虚荣心的最大来源,因此,让玩家获得适当的成就感并对游戏保持持久粘性的匹配系统就成为了游戏公司内天梯设计者的目标。

对于获取不到底层数据的玩家来说,想要了解游戏天梯分布的状态,对衡量实力的隐藏分(Match Making Rating ,MMR)进行数值模拟是可行手段。然而不同竞技游戏的MMR计算方式完全不同,导致玩家的实力分布数学建模极其复杂且不具备通用性。

综上,考虑到问题的复杂性、有限的数学能力和笨拙的编程水平,本文选择使用蒙特卡洛法,通过在3种不同的游戏模型下进行的数万次模拟匹配,计算数值模拟结果并进行讨论。

本文安排如下:第 2 节将介绍蒙特卡洛法,并使用求圆周率的例子展示其特点。第 3、4 和 5 节将分别介绍 3 种游戏模型和对应的 MMR 分布结果。第 6 节将进行总结。

蒙特卡洛法简介

蒙特卡罗法于 20 世纪 40 年代由乌拉姆(Stanislaw Marein Ulam)和冯·诺伊曼(John von Neumann)正式提出,是以大量的随机事件让频率分布接近概率分布的数值模拟方法。冯·诺伊曼用摩纳哥(国土面积约为 2.02 平方公里)的赌城蒙特卡洛(Monte Carlo)来命名这种方法。(法国数学家布丰(Georges Louis Leclere de Buffon)早在 18 世纪提出用投针实验的方法求圆周率π被认为是蒙特卡罗法的思想起源。)(本段参考:百度百科)

对于在 1/4 圆内投点求圆周率 π 的数值实验(图1),我进行了随机投点数从 1000 到 100000 的 100 组实验,每个实验包含 50 次独立实验(代码见附录)。这 100×50 次实验的数值模拟结果与 π 的差距如图 2 分布。每组 50 次实验结果的标准差和平均值与方差的分布如图 3 所示。显然,投点数目越多,模拟的数值越稳定,且越可能接近 π 的真值。

图 1 蒙特卡洛法求圆周率π示意图。实验区域为第一象限的单位正方形和1/4单位圆。红色六角星表示落点。圆周率π满足:S1/S2 =π/4 = 扇形内点占比。

图 2 100×50次实验结果与π的差异

图 3 每组50次实验结果的标准差和平均值

随机数游戏模型与结果

游戏规则

参赛双方(对于同一场对阵,双方分别用甲和乙代称)分别生成一个 0 到 1 的随机数,点数大的一方获胜。

MMR计算规则

  1. 胜者的 MMR 增大,败者的 MMR 减小
  2. 若甲获胜,且甲赛前 MMR 高于乙(即从隐藏分看可以认为甲强于乙),则甲乙二人赛后隐藏分满足:
    • $MMR_{甲A} = MMR_甲 + ( MMR_{Basic} - MMR_{Bonus} )$
    • $MMR_{乙A} = MMR_乙 - ( MMR_{Basic} - MMR_{Bonus} )$
  1. 若甲战败,但甲赛前 MMR 高于乙,则甲乙二人赛后隐藏分MMRA满足:
    • $MMR_{甲A} = MMR_甲 - ( MMR_{Basic} + MMR_{Bonus} )$
    • $MMR_{乙A} = MMR_乙 + ( MMR_{Basic} + MMR_{Bonus} )$

其中,$MMR_{Basic}$ 为两人赛前 MMR 相同(即实力相同)时的 MMR 变化。$MMR_{Bonus}$ 为考虑到两人隐藏分差距带来的附加 MMR 变化,满足:

$$
MMR_{Bonus} = ( MMR_甲 - MMR_乙 ) × MMR_{UnitBonus }
$$

$MMR_{UnitBonus}$ 是双方 MMR 每差距 1 点会引起的赛后 MMR 变化。$MMR_{Bonus}$ 的存在是对实力较弱一方 MMR 的保护,让其不至于因为遇到太强的对手带来的失败而受到和输给实力相近的对手一样的惩罚,而是减少较少的 MMR。同理,实力较强的选手输给实力较弱的选手理应扣更多的分数。注意,当 $MMR_{BONUS}$ 使得最终的 MMR 变化量( $MMR_{Basic} + MMR_{Bonus}$ )为负时,令其为零(否则将出现赢了反而扣 MMR 或者输了反而加 MMR 的情况)。

数值模拟结果

我设置了 30000 名模拟选手组成的序列,每一轮让他们与随机打乱排列后的选手序列进行对抗(这样每一轮理论上会有 30000 次对抗,但若遇到自己,则不进行比赛),随机数游戏规则及比赛匹配示意图如图 4 所示。

图 4 随机数游戏规则及匹配示意图。熊猫人的数字表示选手编号。

为了让隐藏分分布更科学,我采用自己上万场《星际争霸2》的天梯1对1比赛的 MMR 变化经验对$MMR_{Basic}$ 和 $MMR_{Bonus}$ 进行粗略估计:$MMR_{Basic}=22$(在《星际争霸2》天梯战胜或输给 MMR 十分接近的对手,MMR 变化量为 22);$MMR_{Bonus}=40/1000=0.04$(即双方每相差 100MMR 带来的额外 MMR 变化量为 4,这是我基于数月前在韩国服务器天梯上使用5100MMR的账号偶然匹配到并击败当时使用 6100MMR 账号的中国IG战队的职业选手并获得 62MMR(22+40)估计的);同时,我设每位选手的初始 MMR 为 4500(这个初值并没有任何参考)。

在进行10000 轮,每轮 30000 场的比赛后,选手的 MMR 分布如图5所示。30000 名选手的 MMR 分布符合正态分布,且平均值仍为 4500。虽然存在 $MMR_{Bonus}$ 这一基于实力的额外 MMR 变化机制,随机数游戏是一个完全凭借运气的游戏。然而少数 MMR≈4800 的“大神”和M MR≈4200 的“菜鸡”仍会产生,这说明在随机数游戏中,MMR 不等于真实实力,因为无论双方 MMR 差距如何,胜率都会是50%。但游戏设计者若对玩家宣称 MMR 是实力的反映并给出“大神”和“菜鸡”确实存在的例子,没有全局数据的玩家就有更大可能将低 MMR 归咎于自己(或队友)的水平。

图 5 10000轮随机数游戏后,30000名选手的MMR分布

实力天秤游戏1

游戏规则

  1. 对于实力处于同一水平的甲乙二人,天秤上刻有自然数 1 到 10000,决定胜负的位置——命运支点初始位于 5000.5 的位置。甲和乙站在左右悬臂([1,5000] 和 [5001,10000])两端。系统随机生成一个属于 [1,10000] 的自然数,若落在左悬臂上,则甲获胜;若落在右悬臂上,则乙获胜;若恰好落在命运支点上,则游戏平局。

  2. MMR 高的强者在对抗 MMR 低的弱者时应具有更高胜率,将命运支点推向 MMR 低的弱者一侧,增长己方悬臂,减短对方悬臂,使弱者获胜概率降低。命运支点的位置 Fate 计算满足:

$$
Fate = Fate_{Basic} + Fate_{Bonus} = 5000.5 + Fate_{Bonus}
$$

其中,$Fate_{Basic} = 5000.5$ 为双方实力相同时的命运支点位置。$Fate_{Bonus}$ 为双方存在实力差距时,引起的命运支点位置的变化量,满足:
$$
Fate_{Bonus} = ( MMR_甲 - MMR_乙 ) × Fate_{UnitBonus} × Factor_{power}
$$

其中,$Factor_{UnitBonus}$ 表示单位 MMR 差距引起的命运支点向弱者一侧的移动量;$Factor_{power}$ 表示 $Fate_{Bonus}$ 因为所在分段不同引起的变化(即不同分段,MMR 差距对胜率的影响不同)。对于 MMR 初值为 4500 的模型,$Factor_{power}$ 满足:
$$
Factor_{power} = ( MMR_甲 - MMR_乙 ) / (2 × 4500)
$$

因此,对于平均 MMR 为 4500 的对抗双方,若设 $Factor_{UnitBonus}=5$,对于比弱者高 200MMR 的强者在与弱者对抗时,命运支点的位置将是 6000.5,因此强者将具有 60% 的胜率;而比弱者高 1000 分的强者将使得命运支点的位置移动到 10000.5,即理论上具有100%的胜率。实力天秤游戏1的游戏规则示意图如图6所示。

图 6 实力天秤游戏1的游戏规则示意图。黄色的六边形表示系统随机生成的落点。黑色的箭头及上方的数字表示命运支点的位置。左右两个熊猫人是两位选手,下方为他们的MMR。对于4600MMR Vs. 4400MMR的比赛,甲将具有60%的胜率。

MMR计算规则

同第3节中的随机数游戏。

数值模拟结果

实力天秤游戏1中,MMR 差距将产生胜率差距,因此 MMR 差异能够反映选手间的实力差距,$MMR_{Bonus}$ 这一基于实力的额外 MMR 变化机制也就真正起到了预期作用,因此实力天秤游戏1是一个运气和实力都起作用的游戏,比较符合真实竞技游戏的情况。在进行 1500 轮,每轮 30000 场的比赛后,选手的 MMR 分布如图7所示。30000 名选手的 MMR 分布十分类似正态分布(但绝不是正态分布,因为 $Factor_{power}$ 与不仅与双方 MMR 差距有关,与双方平均 MMR 也有关),这说明玩家水平集中的位置是中间段位(《星际争霸2》的“黄金”、“白金”和“钻石”段位集中了较多的选手),但平均 MMR 下降至约 4400。

同时,相比于上一节中进行了 10000 轮的随机数游戏,实力天秤游戏1仅用了不到 1500 轮对抗就产生了高于平均水平 300MMR(MMR > 4700)的“大神”和低于平均水平 300MMR(MMR < 4100)的“菜鸡”,说明该模型在区分玩家水平的速度上较随机数游戏模型快得多。

MMR 下降的情况在多组重复实验均有出现,我对此暂时没有合理的解释。但实力天秤游戏1的游戏模型与《星际争霸2》的天梯十分相似(大部分数据就是来自我基于上万盘《星际争霸2》的天梯比赛总结的估计)。而平均 MMR 下降的情况在《星际争霸2》的天梯中确实存在,在中国服务器上尤为明显(比较间隔2个赛季的大师组 MMR 将很容易看出来)。因此,在实力天秤游戏1的游戏模型中,MMR 反映的是同时期选手间的实力差距和选手实力在总体分布中的位置(即当前水平),而不同时期选手自身 MMR 的变化未必反映选手自身实力的强弱变化。

图 7 1500轮实力天秤游戏1的比赛后,30000名选手的MMR分布。

实力天秤游戏2

游戏规则

同第4节中的实力天秤游戏1。

MMR计算

在与电脑中的《星际争霸2》不同的,近期兴起的手机竞技游戏《王者荣耀》和卡牌游戏《炉石传说》为代表的天梯排名的 MMR 是不公开的,玩家看到的是自己的段位晋级进度(晋级星数)而玩家间衡量实力和获取虚荣心的方式也是段位和晋级星数。同时,匹配制度也是基于段位和晋级星数而非 MMR(玩家匹配到的是与自己所处段位相同的玩家,即在玩家看来与自身势均力敌的玩家,而不一定是真正与自己势均力敌的玩家,这样有利于稳定玩家的游戏心态)。因此在本章中,为了简化编程和计算,我采用了之前的 MMR 作为变量,但注意,这里的 MMR 和第 3 和第 4 节中 MMR 在概念上存在差异。为了与段位和晋级星数具有相同性质,MMR 的计算方式修改为:

  1. 胜者的 MMR 增大,败者的 MMR 减小

  2. 若甲获胜,且甲赛前 MMR 高于乙(即从隐藏分看可以认为甲强于乙),则甲乙二人赛后隐藏分满足:

    • $MMR_{甲A} = MMR_甲 + ( MMR_{Basic} - MMR_{Bonus} )$
    • $MMR_{乙A} = MMR_乙 - ( MMR_{Basic} - MMR_{Bonus} )$
  3. 若甲战败,但甲赛前MMR高于乙,则甲乙二人赛后隐藏分 MMRA 满足:

    • $MMR_{甲A} = MMR_甲 - ( MMR_{Basic} + MMR_{Bonus} )$
    • $MMR_{乙A} = MMR_乙 + ( MMR_{Basic} + MMR_{Bonus} )$

其中,$MMR_{Basic}$ 为两人赛前 MMR 相同(即实力相同)时的 MMR 变化。但是注意 $MMR_{Bonus}$ 不再起作用,即无论你与你的队友或对手的段位存在何种差距,MMR 的变化量不会改变(例如,《王者荣耀》中,若不考虑段位保护和奖励机制,无论匹配到什么对手,无论队友段位如何,获胜或失败导致晋级星数的变化量均为1),因此,$MMR_{Bonus}$ 满足:
$$
MMR_{Bonus} ≡ 0
$$

数值模拟结果

在模拟了 2000 轮,每轮 30000 次的实力天秤游戏2的比赛后,并令差距在 1000MMR 的比赛无效(1000/22 ≈ 45.5个晋级星数,属于十分显著的段位差距)。选手 MMR 分布如图8所示,根据实力分层将他们分为9种段位。可以发现,实力天秤游戏2的数值模拟结果具有如下特点:

  1. 选手出现了明显的分层,且实力差距相比于随机数游戏和实力天秤游戏1更为显著(达到 10000MMR)
  2. MMR 越高,层中的选手数目越少;最底层中的选手数量最多;即高水平玩家的数量比“青铜”段位玩家的数量稀少得多
  3. 实力相近的选手MMR会在段位内集中分布,且高段位中的 MMR 更集中,即更难拉开差距。但是,在具有最强实力的“职业”水平,选手没有形成集中的分层,个体实力差异明显。这与电子竞技游戏职业玩家中存在超越平均职业选手水平的具有统治力的选手的现象相符。
  4. 初始 MMR 的作用被弱化。对于普通玩家来说,难以准确了解自己在定级前的初始 MMR 或初始段位。

图 8 2000轮实力天秤游戏2的比赛后,30000名选手的MMR分布。可以看到明显的MMR分层,这里依据分布给他们划分段位:青铜、白银、黄金、白金、钻石、大师、宗师、业余顶尖和职业。段位越高,选手的数量越稀少。

在实力天秤游戏2的模型下,由于玩家依据 MMR 分布趋于集中,因此匹配到相同段位选手的可能性越高。由于低段位层(例如“青铜”和“白银”)中玩家数量更多,这一现象在低段位会更加显著。综上,除非玩家水平显著超过当前段位,否则进行对实力进步没有帮助的大量而盲目游戏将使玩家越发深陷当前段位,无法晋级,这与大量玩家日夜游戏但仍是青铜的现象相符。同时,这也是高水平玩家的水平存在“瓶颈”,难以获得提升的原因之一。

同时,图8展示的 MMR 分层中的每一层与系统赋予所有选手相同的初始 MMR 的情况是类似的,因此可以预见,若匹配的轮数增加,现有的段位分层中将再出现次级分层,导致当前段位划分将不足以区当前分段位中产生的次级分层的选手,因此必然会引入次级段位来区分这些玩家(例如,引入“大师3”,”大师2”,”大师1”三个次级段位来区分曾经的”大师”水平的玩家)。

结论

本文采用蒙特卡洛方法,建立了随机数游戏,实力天秤游戏1 和 实力天秤游戏2 三种游戏模型和对应的 MMR 计算模型,分别计算了进行 10000、1500、2000 轮,每轮 30000 场比赛的模拟结果。

对于完全依靠运气的随机数游戏,MMR 机制依然能导致“大神”和“菜鸡”的产生,因此玩家应该仔细甄别游戏机制,理性对待游戏内对玩家水平的划分方式,才能对自己的真实水平有准确的了解。

与《星际争霸2》较为接近的实力天秤游戏游戏1的游戏模型中,MMR 反映同时期玩家相对水平。在具有合理的对抗 MMR 实力补偿方式:$MMR_{Bonus}$ 的情况下,玩家因对匹配到强大对手而战败带来的“掉分”等负面结果将被缩小。然而,实力游戏天秤1的游戏模型将使玩家主要集中与平均水平附近。数值模拟结果中出现了平均 MMR 下降这一现象是缺乏全局信息的普通玩家无法预见的,这将导致看到 MMR 下降这一表面现象的玩家错误地将此完全归咎于实力的降低(例如老玩家产生“为什么我越打越菜”的错误判断),这不利于满足玩家的虚荣心。

与《王者荣耀》和《炉石传说》较为接近的实力天秤游戏2的游戏模型中,MMR 与《王者荣耀》和《炉石传说》的段位晋级星数类似,分层则与它们的段位类似。这样的游戏模型能更快更显著地区分玩家间的实力,并且产生次级段位。同时让广大玩家集中于底层段位,而不是中间段位。然而,导致玩家难以逾越目前段位的情况虽然有利于增加玩家粘性,但若在团队游戏中使用这样的晋级计算方式,必然导致玩家因为长期不达目而出现不健康的游戏心态,将无法晋级全部归咎于类似“队友太菜”的外部因素。《炉石传说》也具有类似的段位计算和晋级方式,但作为一个1对1的卡牌游戏,玩家更多将无法晋级归咎于“卡组克制”、“打牌细节粗糙”和“右手第一张神抽”等原因,前二者有助于促进玩家间的交流,而最后则是运气成分,有助于玩家接受自己难以晋级的事实。

综上所述,基于实力天秤游戏2的游戏模型进行1对1的竞技游戏天梯的设计将有助于游戏段位和玩家实力的区分,并引导玩家产生正确的游戏心态

实力天秤游戏2的 MMR 计算方式还有如下改进余地。既然 MMR 与晋级星数类似,考虑到晋级星数不能为负的事实,令负 MMR 恒等于 0 将与“青铜3”段位且没有晋级星数的窘境等价。若再将初始 MMR 设为较低的值(例如 1000),就可以使更大量的玩家更快集中于底层的“青铜”组,同时也使高段位玩家更加稀有。

蒙特卡洛方法在处理这种无法知道本身原理且需要大量数据作为支撑的实际问题的数值模拟十分有效。但是,它会消耗大量的计算资源,且虽然能揭示现实问题中的现象,却完全无法直接给出其本质原因。因此,对于具有成熟而清晰的理论依据的问题,不建议使用蒙特卡洛算法。

附录

第 2 节中的计算圆周率实验的matlab代码:

Num_repeat=50;

Num_spot=1000:1000:100000;

for n2=1:length(Num_spot)

    for n1=1:Num_repeat

        fprintf([‘正在模拟随机放置’,num2str(Num_spot(n2)),‘个点第’,num2str(n1),‘次实验。稍安勿躁!\n']);

        N_in=0;

        for m=1:Num_spot(n2)

            x(m)=rand(1);

            y(m)=rand(1);

            if (x(m)^2+y(m)^2)<1

                N_in=N_in+1;

            elseif (x(m)^2+y(m)^2)==1

                N_in=N_in+0.5;

            end

        end

        Pi(n2,n1)=N_in/Num_spot(n2)*4;

    end

end