龙空技术网

《王者荣耀》用理论说话,解析ELO部分匹配机制数学原理

NGA玩家社区 895

前言:

眼前咱们对“算法ln”都比较关注,姐妹们都需要了解一些“算法ln”的相关文章。那么小编也在网上搜集了一些关于“算法ln””的相关资讯,希望咱们能喜欢,咱们快快来了解一下吧!

作者:NGA-平A攻速流关羽

很多同学在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算法对大多数玩家来说都是友好的,随机匹配并不会让你变得舒服。

真的不要抱怨了,NGA需要干货

欢迎大家指正!抱怨回复/歪楼举报!

*部分数据/公式参考自Scott Mackie的文献

*整体思路来自Fandom

标签: #算法ln