很多同学在516抱怨过ELO,声称如果没ELO他们的游戏体验会更好。这是一个很大的误解。因为他们根本不知道所谓的ELO到底是啥。
那么,作为一个985的工科学子,虽然没清北科学家厉害,但是我还是想和大家解释下什么是ELO,以及为什么你们是错的。
这是电影《社交网络》的截图,窗户上写着的就是Facebook最早的ELO算法公式。
是的,你没看错,ELO并不是清北科学家搞出来的让我们难过的东西,而是一个在体育比赛,游戏,社交网站中广泛适用的预期和评级系统。
其发明者美国物理学教授Arpad Elo真的要比真武大弟子们厉害多了…
为了让我的解释通俗易懂,我们先把王者荣耀所有的对战模式删除,仅留下1V1
现在,有四个玩家:
爱鹿,笔神,多尼,老亚瑟
最后的结果是 爱鹿和老亚瑟连胜,分数涨到1238和1237,多尼连跪到1145,笔神输了一场愤怒地关掉了游戏,分数1180.
反馈到星星上,爱鹿和老亚瑟各打了两盘,上了两颗星。多尼掉了三颗,笔神掉了一颗。
你可以看到,经过两场随机匹配后,多尼成为受害者,每一盘他的对手和他都有巨大的差距,尽管星星差不多,但是这对他是不公平的比赛。
ELO机制,最重要的一个概念就是“从你身上拿走ELO分”
1.每个参与者都有一个ELO评分,这是一个代表他们相对于其他参与者的技术水平的总分。
2.新玩家自动获得初始评级1200分。
3.当两名参与者之间完成比赛时,比较他们的ELO分数。 比赛的胜者将从输家那里“获取”一定数量的ELO积分。
4.拥有较高ELO的玩家倾向于获胜,因此获胜将为他们赢得几分。 相反,当分数更低的玩家获胜时,他们会从获胜者那里获得很多积分。
实际的ELO算法由5部分组成:
Rn – 玩家的新评级(比赛结束后)
Ro – 玩家的旧评级(比赛前)
S – 比赛的实际得分/结果
E – 比赛的预期得分/结果
K – K因子
Rn = Ro + K * (S – E)
Rn和Ro不用我解释吧,关键就在于S,E和K.
S(实际分数)
这是比赛的实际得分。 它始终为0 <= x <= 1。
胜利计为1,
输了计为0。(先做简单化考虑)
在我们上面的例子中,爱鹿击败笔神,爱鹿在此计算中得分为1,而笔神则得分为0。
E(预期成果)
这是算法的核心。 它需要两个因数:Ra和Rb(玩家A和玩家B的旧评级),然后返回玩家A的预期胜率。它使用累积分布函数(CDF)进行分数估计。
CDF中如果能假设更多可能的扰乱,就有助于解决玩家能力的不一致性。这也就是传说中的Logistic CDF implementation。
这里有几个部分:
Ra – 玩家A的旧elo
Rb – 玩家B的旧elo
x – Ra和Rb的差异
e – 欧拉数(一个数学常数)
scale – 评分系统的预选标准差
scale影响分布的“宽度”。 较大的比例将拉伸分布,增加最佳玩家的ELO,同时减少最差玩家的ELO。相反,较小的比例将压缩分布。
但是,比例参数本身很难推理。 如果对比例参数进行一些替换,以便系统更好地推断其与玩家水准的关系。
一般来说,scale值是400,欧拉数为10. 即s –> n/ln(10)
这意味着,如果玩家A的ELO分比玩家B多n分,A就比B厉害10倍!这意味着,ELO为1400的玩家比1000 ELO玩家好10倍。
当A匹配到B的时候,A有90.1%的概率会赢!
那么,如果要预测匹配结果,我们只需要计算出计算匹配后ELO所需的K系数。
K因子
有效的K因子是任何ELO中极其重要的一部分。
K因子决定了胜利和失败对ELO影响的敏感性。
假设我们使用以下模型:
–每个人都以1200的ELO开头
–我们使用分数估计函数,其中n = 400。
如果K很大(例如70),那么意外的胜利(或失败)会对玩家的ELO产生巨大影响,并导致排名波动。
现有玩家A的ELO分是1000,玩家B的ELO分是1300
预计A对阵B的胜率是:1/(1+10^-(-300/400)) = 0.150979557
A拿出后裔神奇地蒸发了六神B,1000 + 70 * (1 – 0.150979557)
赛后他们的ELO分数变为:A = 1059.43143 B = 1240.56857
这是ELO值的巨大变化 – 尽管玩家B的预期比玩家A高出5.6(0.849 / 0.151)倍,玩家A神勇发挥掏出后裔或者B心不在焉拿出花木兰就可以轻松缩小他们的ELO之间的差距排名。哈哈,开个玩笑。
实际的排位中,玩家A可能需要数百场游戏来赶上玩家B的ELO值,即使CH在某个平行宇宙里再加强十倍后裔的输出。
你们最关心和诟病的来了
坑队友和反复摩擦的原理,以及为什么有的人好上分。
K因子应该适合n的当前值以用于评分。K因子基本上代表玩家在比赛中可以获得的“最大”点数,如果玩家具有相同的技能等级,他们将获得k / 2个ELO点。
如果玩家总是与ELO一样的玩家对战,他们必须赢得n /(k / 2)场游戏,才能上到1400分的真实段位。
这通常是400 /(15/2)= 53.33盘游戏,或K = 800 / 53.33。
包括象棋和大部分的MOBA游戏都是采用分层K因子系统,这意味着玩家必然有不同的K因子(n=400):
对于新玩家来说,K = 40,直到他们玩30场比赛
对于游戏> 30场且从未有过ELO> 1200的玩家,K = 20
对于游戏> 30场并且ELO> 1200的玩家,K = 10
(假设非真实)
如果我们假设新玩家的评级存在一定程度的不确定性,依据以上算法,他们反而更容易快速达到更好的成绩。 它也使得非常肝/熟练的玩家更难以上分/掉分(例如,由于拿出了花木兰)。
请注意,当玩家有不同的ELO时:
玩家A获得/失去Rn = Ro + K_a *(S-E)
玩家B获得/失去Rn = Ro + K_b *(S-E)
你可以看到,这与我开头所说的从其他玩家“获取”分数的实际是不同的,因为每个玩家将获得/失去不同的数量。
这是对大部分玩家都友好并且是故意的。
同理,在小晋级赛和大晋级赛的时候,也可以通过控制K值来决定比赛质量,因为不同的比赛玩家心态是不同的!
K=60 上王者
K=40 上星耀
K=30 小段位
K=20 出现连胜连跪
(假设非真实)
如果玩家玩的少,那么排名应该更加不稳定。 较高的K因子[相对于n]会更好,因此从K =(2 * n)/ 20到K =(2 * n)/ 25的K因子更合适。
如果玩家很肝,那么排名应该不那么不稳定。 较低的K因子[相对于n]会更好,因此从K =(2 * n)/ 30到K =(2 * n)/ 45的K因子更合适。
所以,你打得越多,越会影响你对局的质量!
那么,你可以清晰地看到,尽管系统是能通过很多种手段来控制你对局的质量的。
但是最终决定你分数和段位的是你的实际水平,你在上十局和长期的表现才是核心因素
ELO算法对大多数玩家来说都是友好的,随机匹配并不会让你变得舒服。
提示:支持键盘“← →”键翻页