转自:http://www.gameres.com/thread_228018_1_1.html
ELO是什么?能吃么?
是指由匈牙利裔美国物理学家阿帕德·埃洛创建的一个衡量各类对弈活动水平的评价方法,是当今对弈水平评估的公认的权威方法。被广泛用于国际象棋、围棋、足球、篮球等运动。
埃洛排名系统是基于统计学的一个评估棋手水平的方法。美国国际象棋协会在1960年首先使用这种计分方法。由于它比先前的方法更公平客观,这种方法很快流行开来。1970年国际棋联正式开始使用这个系统。
换言之,就是一个叫ELO学霸,做了一个算法取名叫ELO,大家玩LOL和DOTA的时候匹配就是通过这个算法做的。
ELO不是孙悟空。
As we all know,一个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’s RankScore):表示队伍A当前的Rank分
Rb(B’s RankScore):表示队伍B当前的Rank分
D=Ra-Rb:就是A和B的Rank分差
Ea:表示A在这场比赛中的期望胜率
Eb:表示B在这场比赛中的期望胜率
则有Ea+Eb=1,上式中P(D)=Ea
出题的时间到了,各位同志们注意看!
狗蛋LOL2000分,铁锤LOL1950分,父子局SOLO,那么狗蛋成为爸爸的概率多大?
由上式推得,狗蛋Ra=2000,铁锤Rb=1950,那么D=Ra-Rb=50,那么:
也就是说,狗蛋能成为爸爸的概率是57.1%,同时狗蛋也会有42.9%的概率成为儿子。
继续大图杀猫:
下图是对D所有取值的胜率期望表
守关Boss就在眼前,各位同学,切勿掉以轻心!
如果在多次比赛中,实际上我们真正要通过P(D)计算的是另一个变量,暂且将其称之为W(win),不过由于P(D)实际上是计算的期望胜率,因此必须让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中体现。这个常数的引入有什么好处就一并留作课后思考吧。
1. K取1和100时会出现什么样的情况?
2. K的取值大小会对Rank分造成什么影响?
3. K的取值大小在游戏中实际对玩家造成了什么影响?
4.我们应该如何为K赋值?