Lol中使用了一种被称为ELO的配对机制,玩家在进行标准赛(NormalGame)和排名赛(RankedGame)时,游戏会使用这套机制为玩家们寻找水平相近的对手。
概览
系统会根据你赢了谁和输给谁来评估你的游戏水平。根据这个水平来给你安排合适的对手,让你大概有50%的几率胜出比赛。
同时系统也知道预编队伍是一项优势,所以它会在你在一个预编队伍时给你安排更强一点的对手。我们做了很复杂的数学题来解决预编队伍游戏和自由组队游戏之间的公平性。我甚至给2个数学博士演示了这一系统,而且他们也认为这个东西很靠谱!
细节
有很多人曾问过我们配对机制如何运作,而我们也看过一大堆帖子包含了对它如何选择比赛的误解。
最基本的概念就是,系统逐渐来评估出你是一个水平多强的玩家,然后试图配对一个水平和你一样的玩家来让你和他比赛。系统尽量让相同水平玩家之间的竞赛变得如同抛掷硬币一样公平。
系统会着重考虑以下细节,按照顺序排列:
保护新手,防止他们被高手欺负。
保证公平,并开展有竞技性的比赛。
最后才是寻找可用的比赛。你等的时间越长,前两点的重要性就越小。
比赛是如何配对的?
首先,系统会把你放在合适人选集合(pool)——那只是简单地按照游戏类型区分。(一般的普通游戏,排名单人/双人游戏,排名5人战队游戏等等)
当你进入集合时,系统就会开始尝试为你寻找比赛,最终目标是为你配对一个让你有50%几率胜出的比赛。
第一步:判断你的实力
如果你是进入自由组队,只按照你个人等级判断(就是说排名队伍按照排名队伍等级,普通游戏按照普通游戏等级)
如果你进入一个预编队伍,你的等级将取你和你队友之间的平均数,并在这基础上你会被分配到一些更强的对手(等级提高某个数值),这是因为预编队伍本身就是一项优势。我们根据几千几百次比赛的结果做了一大堆研究才得出这个数值——参与预编队伍到底有多大的优势。我们同时也做了一些幕后调整例如高手搭配新手的组合等等。
第二步:为你选择合适的对手
首先系统只会基于你的等级来给你安排与你水平非常相近的对手。否则系统就会给你安排相对前者而言差别较大的对手,因为它不会让你永远处于排队状态。
新手会获得一些特殊保护,通常只会和其他新手配对。
第三步:寻找比赛
最后,系统会寻找一场对队伍中所有玩家都公平的比赛,然后开展比赛。
系统会试图平衡两队的实力,把任意一方的胜率控制在50%。在beta中期,对比正式发行时玩家少了很多,系统所创建的大部分比赛都极度公平(没有队伍的胜率高于55%)。我们希望正式发行时,98%的队伍都不会有高于55%的胜率。因为就算增加少量的玩家,都会使系统的配对质量产生大幅度的提高,我们也希望到时候的玩家人数比beta测试时多。
ELO是什么?能吃么?
是指由匈牙利裔美国物理学家阿帕德·埃洛创建的一个衡量各类对弈活动水平的评价方法,是当今对弈水平评估的公认的权威方法。被广泛用于国际象棋、围棋、足球、篮球等运动。
埃洛排名系统是基于统计学的一个评估棋手水平的方法。美国国际象棋协会在1960年首先使用这种计分方法。由于它比先前的方法更公平客观,这种方法很快流行开来。1970年国际棋联正式开始使用这个系统。
换言之,就是一个叫ELO学霸,做了一个算法取名叫ELO,大家玩LOL和DOTA的时候匹配就是通过这个算法做的。
ELO不是孙。
Asweallknow,一个LOL玩家,或者象棋大师,在职业身涯中会因为各种情况导致自身的实力波动,且主观难以控制。比如说,二狗在打LOL的时候突然腹泻,导致无法操作,最后满盘皆输。再比如说,某象棋大师老来得子,春风得意马蹄疾,气势如龙,以摧枯拉朽之势虐爆各种强敌。
我们认为,在某一个人的身上,其生涯实力总体在某一特定水平波动。虽然有可能会出现大波动,但通常情况下出现大波动的可能性较低。
说道这里,我们需要对ELO算法进行假设:
l某个选手,在某一分段区间内的波动属于正常现象。
l在某一分段区间内的选手,水平大致相同,胜出的期望也大致相同。
那么在样本量足够大的情况下,我们可以认为,出现异常情况(期望胜率大于50%时失败)是可以被允许的。
上图杀猫!
这是国际棋联FIDE所用200为一分段的Rank区间。弄一个称号显得高大上,信达雅。
不是学霸不要紧,看到公式不要怕!
*这一章的公式比较多,看起来很复杂,但是跟着楼主的思路慢慢走,你会发现其实很简单,千万别着急。
想必大家都知道,其实高手不一定总能赢比他弱一些的选手,就比如LOL钻石1的选手不一定每次都能赢钻石5的选手,因此ELO先是采用了统计学的正态分布函数来表示一名选手在比赛时的波动表现。在这个奇妙的函数中,隐藏着另一个叫做“正态概率密度”函数,虽说长得有点难看,各位就将就一下:
但是经过多次的模拟和分析,学霸ELO发现其实选手在比赛中的表现更接近于逻辑斯谛分布,因此有了下面这个看上去好看一点的推导公式:
A对B的期望胜率:
反之,得到B对A的期望胜率:
最终,我们得到这样一个最简化公式:(后面和有一个附加值公式,我们先分析这个)
Sa表示队伍A的比赛结果,胜利S值为1,平局S值为0.5,失败S值为0
Ra(A’sRankScore):表示队伍A当前的Rank分
Rb(B’sRankScore):表示队伍B当前的Rank分
D=Ra-Rb:就是A和B的Rank分差
Ea:表示A在这场比赛中的期望胜率
Eb:表示B在这场比赛中的期望胜率
则有Ea+Eb=1,上式中P=Ea
出题的时间到了,各位同志们注意看!
狗蛋LOL2000分,铁锤LOL1950分,父子局SOLO,那么狗蛋成为爸爸的概率多大?
由上式推得,狗蛋Ra=2000,铁锤Rb=1950,那么D=Ra-Rb=50,那么:
也就是说,狗蛋能成为爸爸的概率是57.1%,同时狗蛋也会有42.9%的概率成为儿子。
继续大图杀猫:
下图是对D所有取值的胜率期望表
守关Boss就在眼前,各位同学,切勿掉以轻心!
如果在多次比赛中,实际上我们真正要通过P计算的是另一个变量,暂且将其称之为W(win),不过由于P实际上是计算的期望胜率,因此必须让W带上e变成我们需要的We(预期胜率和)
多场比赛后,一般为
我们为什么不用W?因为W是实际得分率,下面会用到。
W作为实际得分率,有且只有三个取值
胜利:100%=1
打平:50%=0.5
失败:0%=0
此时还不够,因为我们必须要为不同分段的选手们引入一个常数K,这个常数的作用暂时不表,留作课后习题。
天空一阵巨响,公式闪亮登场
Rn:赛事后的新Rank分
Ro:赛事前的原Rank分
出题时间又到了,同志们别开小差!
狗蛋和自己的小伙伴们参加了街道举办的小学生杯LOL锦标赛,他们的队伍Rank分是2000分,比赛中遇到了土蛋(2150分),野蛋(1870分)和铁蛋(1920分)队。最终,狗蛋队凭借超人的意志力和娴熟的操作,战胜了野蛋和铁蛋队,但是遗憾地输给了土蛋队。那么经过这次举世瞩目的比赛,狗蛋队最终的得分是多少呢?(此处,赋值K=20)
通过读题我们发现,W=0+1+1=2(负1胜2)
那么最核心的一步就是计算We了:
然后我们再带入公式:
Rn=2000+20×(2-1.589)≈2008
狗蛋队最终得分是2008分。
有关ELO算法的讲解到此结束了,在课后,我会留几道题目给大家。再此之前呢,我还要把最后一点东西讲完,希望大家不要厌烦。
为了防止某一个玩家连胜,或者连败,为游戏和用户体验带来消极的影响,我们会在Rank分中加入一个临时常数Ri,该常数在匹配时会使玩家匹配到更低或者更高的分段,并且在Rank分差D=Ra-Rb-Ri中体现。