ACGO排位分机制大揭秘|elo算法
2024-06-04 10:13:10
发布于:浙江
ACGO排位分机制大揭秘
1、原理解释
积分机制是基于ELO积分(埃洛积分),该积分最早应用于国际象棋,理论核心是胜率差。ELO在解释选手对战的情况分为三个部分:
- 根据战力差来计算对战胜率情况:多少分差对应多少胜率。
- 选手根据对手情况和战斗结果所表现出来的水平分。
- 选手完成对局后实际获得的积分增长。
1.1 预期胜率计算公式
公式中 ( P_{i,j} ) 代表选手 ( i ) 战胜选手 ( j ) 的概率,( r_i ) 代表选手 ( i ) 的当前积分值,( r_j ) 代表选手 ( j ) 的当前积分值。可以观察到:
- 当 ( r_j = r_i ) 时,( P_{i,j} = \frac{1}{2} ),即对手实力与自己相当,我方胜率恰好一半。
- 当 ( r_j > r_i ) 时,( P_{i,j} < \frac{1}{2} ),即对手实力强于自己时,我方胜率不足一半。
- 当 ( r_j < r_i ) 时,( P_{i,j} > \frac{1}{2} ),即对手实力弱于自己时,我方胜率高于一半。
并且 ( P_{i,j} + P_{j,i} = 1 ),即我方胜率加对方胜率等于1,均符合“常识认知”。
1.2 背后原理
该公式的背后原理(涉及概率论,此处笼统介绍)为:任何一名选手的即时表现都应该是符合正态分布的(围绕某一个水平上下波动),如下图:
实际上,可以依据上图,使用微积分来计算出两位玩家相互之间的胜率,其所对应的图像,与采用最小二乘法优化后得到的式子 ( P_{i,j} = \frac{1}{1+10^{\frac{r_j-r_i}{400}}} ) 拟合度较高,因此使用该式作为胜率计算的公式。
通俗地来说,这个公式与通过概率论计算的胜率情况非常接近,且计算相对简便,因此使用了该式作为概率公式。
1.3 预期排名公式
即将每个人打败选手 ( i ) 的概率累加起来,再加一作为选手 ( i ) 比赛的预期排名。
我们可以得到:
由于 ( P_{j,i} + P_{i,j} = 1 ),故上式为:
注意到最后的实际排名是 ([1,n]) 的一个排列,排名总和为 (\frac{(n+1) \cdot n}{2})。
会发现使用该预期排名公式后,预期排名能够显示出所有人之间实力对获胜概率的影响,并且所有人的预期排名总和与实际排名总和相等。
1.4 依据真实排名所计算出的表现分
比赛结束后第 ( i ) 名选手的真实排名记作 ( rank_i )。令 ( m_i = \sqrt{seed_i \cdot rank_i} ),即期望排名与真实排名的几何平均数。
之后我们使用二分算法来找到一个分数 ( R_i ) 作为选手 ( i ) 在这场比赛的表现分。( R_i ) 需要满足在该场比赛的预期排名计算时,如果把 ( r_i ) 替换为 ( R_i ),其他人的分数不变的情况下,计算出的 ( seed_i = m_i )。
实际上非常容易可以定性分析出,分数(实力)更强的人在同一场比赛中的预期排名应该更低(指的是数值)。这样就建立了一个分数-排名之间的单调关系,使得我们可以使用二分算法来找到 ( R_i )。
依此来计算表现分,既考虑到了真实排名的情况下,又能够依靠原始分计算出的预期排名来做一个对原始分的“锚定”效果,使得表现分有一个与原始分相接近的趋势。同时由于表现分的二分计算过程也是与预期排名公式中的原理相同,因此该分数也考虑到整场比赛所有人参与人的水平。
1.5 分数变化值
取表现分 ( R_i ) 与原分值 ( r_i ) 差值的一半作为选手 ( i ) 赛后的分数变化值。
即选手 ( i ) 的分数变化值 ( change_i = \frac{R_i - r_i}{2} )。
综合上述所有计算过程,会发现计算结果满足以下两个性质:
- 若赛前 ( r_A < r_B ),比赛结果 ( A ) 依然比 ( B ) 差,那么更新后 ( r_A \leq r_B )。
- 若赛前 ( r_A < r_B ),比赛结果 ( A ) 比 ( B ) 好,那么 ( rating ) 改变量 ( change_A \geq change_B )。
2、排位分是否上涨的因素
在上述算法的影响下,比赛排位分是否上涨,主要由对手的能力决定:
如果当前选手水平很牛逼,但是赛事的其他选手水平很菜,本场赛事结果中,即便当前选手获得了不错的成绩,也不会加很多排位分,因为elo算法认为这应该是理所当然的,因此用户没法通过大量战胜低等级的对手来提升排位分。
反之,一个菜鸡在满是牛逼用户的竞争中取胜,则会获得特别高的排位分。该算法能让用户的竞赛分值更趋向于其真实水平,从而使我们的排位分更具公信力。
全部评论 15
顶顶顶顶顶
2024-05-22 来自 浙江
3出一个让我们看见这次排位赛能得多少分的功能,比赛时实时更新(
2024-06-16 来自 广东
2看不懂 思密达._.
2024-05-24 来自 浙江
2“牛逼”
2024-05-23 来自 山东
2这不得搞个算法求出我怎么才能拿到最高分(bushi)
2024-05-22 来自 浙江
2我理解下来只有一种方法:这场比赛的参赛选手都非常厉害,每个人的排位分都比你高出一大截。这个时候你的排名预期就会特别低。如果你在这场比赛中拿到了非常好的名次,那么你的真实名次跟排名预期的差值就非常大,从而让你的排位分迅速地上涨。
2024-05-23 来自 新加坡
4说白了,没有什么特别好的方法,只能认认真真打比赛。
2024-05-23 来自 新加坡
1同理,如果你的排位分特别的高,你参加了排位赛后只做了一题,后面的题都不想做了。那么你的分数也会掉的特别快,因为你的预期排名和真实排名差太多了。(所以,没空千万不要打排位赛,损己利人。哈哈哈哈哈哈
2024-05-23 来自 新加坡
2
没有问题,只是单纯看起来不在指数位置上而已。
2024-05-25 来自 新加坡
0
半夜无聊,我认认真真看完了这篇文章。不得不说这个公式的思想真领先。
2024-05-23 来自 新加坡
1新加坡?
2024-05-27 来自 广东
0这个ip怎么了
2024-05-27 来自 新加坡
0怎么搞的?教教我
2024-05-28 来自 广东
0
好好好,我的脑子要炸了
2024-05-22 来自 浙江
1现在改加分制了,是不是能飙分??
2024-10-30 来自 上海
0是的,从这次巅峰赛开始,加分就改了
2024-10-31 来自 浙江
0
出一个目前分数和排名能得到
多少分的东西吧2024-09-07 来自 上海
0有幸(病)来翻,完全看不懂
2024-09-04 来自 江苏
0脑袋好痒,脑子要长出来了(
2024-08-02 来自 湖南
0部分latex渲染好像有问题
2024-06-15 来自 浙江
0AC君看看我的帖
https://www.acgo.cn/discuss/186862024-06-06 来自 浙江
06
2024-06-04 来自 浙江
0
有帮助,赞一个