概述
新版 Acgo\tt{Acgo}Acgo 竞赛分系统参考了 AtCoder\tt{AtCoder}AtCoder 平台的 AtCoder Rating System ver.1.00\tt{AtCoder\ Rating\ System\ ver. 1.00}AtCoder Rating System ver.1.00[1]。
该积分系统基于 Logistic Distribution\tt{Logistic\ Distribution}Logistic Distribution(或 Sigmoid Function\tt{Sigmoid\ Function}Sigmoid Function),类似于 Elo\tt{Elo}Elo 评分系统,但进行了许多修改。
新版竞赛分系统上线后,用户参加 Acgo\tt{Acgo}Acgo 的所有比赛将会有 Rated\tt{Rated}Rated 和 Unrated\tt{Unrated}Unrated(即「评分」与「不评分」)两种状态。
正常情况下参加比赛的选手状态为 Rated\tt{Rated}Rated,状态被评为 Unrated\tt{Unrated}Unrated 包含但不仅限于以下情况:
1. 参加本场比赛前竞赛分超过本场比赛的 Rated\tt{Rated}Rated 分数线限制(RATEDBOUNDRATEDBOUNDRATEDBOUND);
2. 比赛中作弊,被取消比赛成绩;
3. 本场比赛因不可抗力因素导致无法正常进行的将参与本场比赛的所有用户设置为 Unrated\tt{Unrated}Unrated。
对于 Rated\tt{Rated}Rated 的选手,在每场比赛中,会获得一个「表现分」。这个值代表了你在比赛中的表现如何。
粗略地说,你的每场比赛后的竞赛分为「表现分」的加权平均值(最近的比赛权重更高)减去 f(x)f(x)f(x)(xxx 为 Rated\tt{Rated}Rated 比赛的参与次数),其中 f(1)=1200f(1) = 1200f(1)=1200,且 fff 随参加的 Rated\tt{Rated}Rated 比赛的次数增加而逐渐减小并趋于零。
这意味着如果你持续获得 XXX 的表现分,你的竞赛分将从 X−1200X−1200X−1200 开始,并逐渐趋近于 XXX。
请不要担心在第一场比赛中获得很低的竞赛分,如果你参加更多比赛,分数很可能会迅速上升。当参加 101010 场比赛后,你的竞赛分将会非常接近于你的真实实力。
计算表现分
在系统内部有两种类型的「表现分」:PerfPerfPerf 和 RPerfRPerfRPerf(修正后的 PerfPerfPerf) 。
首先,对于每个参赛选手,我们计算出他们的 APerfAPerfAPerf(平均表现分)。
令 Perf1,Perf2,⋯ ,PerfkPerf_1, Perf_2, \cdots, Perf_kPerf1 ,Perf2 ,⋯,Perfk 为一位参赛选手的历史 PerfPerfPerf。其中 Perf1Perf_1Perf1 是最近参加的一场比赛,PerfkPerf_kPerfk 是最早参加的一场比赛,这位选手的 APerfAPerfAPerf 被定义为:
APerf=∑i=1kPerfi×0.9i∑i=1k0.9i\begin{equation} APerf = \frac{\sum_{i=1}^{k}Perf_i \times 0.9^i}{\sum_{i=1}^{k}0.9^i} \end{equation} APerf=∑i=1k 0.9i∑i=1k Perfi ×0.9i
所有第一次参与 Acgo\tt{Acgo}Acgo 的 Rated\tt{Rated}Rated 比赛的选手的 APerfAPerfAPerf 将会被设置为 CenterCenterCenter。
CenterCenterCenter 和每一场 Rated\tt{Rated}Rated 比赛的 RATEDBOUNDRATEDBOUNDRATEDBOUND(即 Rated\tt{Rated}Rated 上限)有关。
Center=RATEDBOUND×0.4Center = RATEDBOUND \times 0.4Center=RATEDBOUND×0.4。
令 nnn 为一场比赛中所有的 Rated\tt{Rated}Rated 的参赛选手的数量,令 APerfiAPerf_iAPerfi 为第 iii 个选手的 APerfAPerfAPerf。那么比赛的 Rated\tt{Rated}Rated 榜单中,排行第 rrr 名选手的 PerfPerfPerf 被定义为满足以下公式的唯一的 XXX:
∑11+6.0(X−APerfi)/400.0=r−0.5\begin{equation} \sum\frac{1}{1 + 6.0^{(X - APerf_i) / 400.0}} = r - 0.5 \end{equation} ∑1+6.0(X−APerfi )/400.01 =r−0.5
这个 XXX 可以使用二分来计算得出。
请注意,以上的排名是所有并列名次的平均值。例如,如果有四个人并列第 333 名至第 666 名,那么这些人的排名为 4.54.54.5。
除此之外,为了避免在第一场比赛中的「表现分」方差过小,Acgo\tt{Acgo}Acgo 使用新竞赛分系统的第一场比赛(这里指 排位赛#4)的表现值会被放大处理,具体如下:
Perf=(Perf−Center)×1.5+Center\begin{equation} Perf = (Perf - Center) \times 1.5 + Center \end{equation} Perf=(Perf−Center)×1.5+Center
最终,对于每个用户其 RPerfRPerfRPerf 使用以下方式计算:
RPerf=min{Perf,RATEDBOUND+100}\begin{equation} RPerf = \min{\{Perf, RATEDBOUND + 100\}} \end{equation} RPerf=min{Perf,RATEDBOUND+100}
其中 RATEDBOUNDRATEDBOUNDRATEDBOUND 对于不同的比赛是不一样的,每场比赛的 RATEDBOUNDRATEDBOUNDRATEDBOUND 会在竞赛说明中给出。
计算竞赛分
定义 FFF 为:
F(n)=∑i=1n0.81i∑i=1n0.9i\begin{equation} F(n) = \frac{\sqrt{\sum_{i=1}^{n} 0.81^i}}{\sum_{i=1}^n 0.9^i} \end{equation} F(n)=∑i=1n 0.9i∑i=1n 0.81i
定义 fff 为:
f(n)=F(n)−F(∞)F(1)−F(∞)×1200\begin{equation} f(n) = \frac{F(n) - F(\infin)}{F(1) - F(\infin)} \times 1200 \end{equation} f(n)=F(1)−F(∞)F(n)−F(∞) ×1200
定义 ggg 为:
g(X)=2.0X800\begin{equation} g(X) = 2.0^{\frac{X}{800}} \end{equation} g(X)=2.0800X
该函数可以给更好的表现赋予更多的权重。因此,极好表现与较好表现之间的差异会非常大,而重大失误与一般失误之间的差异则不会那么大。
这样可以使得当参赛者在比赛中打出了超出水平的发挥时,会增加更多的竞赛分;当参赛者在比赛中打出了远低于自己水平的表现分时,不会减少太多的竞赛分;
令 RPerf1,RPerf2,⋯ ,RPerfkRPerf_1, RPerf_2, \cdots, RPerf_kRPerf1 ,RPerf2 ,⋯,RPerfk 为一位参赛选手的历史 RPerfRPerfRPerf,其中 RPerf1RPerf_1RPerf1 为当场比赛的 RPerfRPerfRPerf。那么本场比赛结束后,其竞赛分为:
Rating=g−1(∑1kg(RPerfi)×0.9i∑1k0.9i)\begin{equation} Rating = g^{-1}(\frac{\sum_1^k g(RPerf_i) \times 0.9^i}{\sum_1^k 0.9^i}) \end{equation} Rating=g−1(∑1k 0.9i∑1k g(RPerfi )×0.9i )
然后考虑公式 (6)(6)(6) 的 fff 函数对竞赛分的影响,定义以下函数[2]:
mapRating(r)={400exp(400−r400)r≤400rr>400\begin{equation} mapRating(r) = \begin{cases} \frac{400}{\exp{(\frac{400 - r}{400})}} &{r \le 400}\\ r & {r \gt 400}\\ \end{cases} \end{equation} mapRating(r)={exp(400400−r )400 r r≤400r>400
最终 RatingRatingRating 计算出来为:
TrueRating=mapRaing(Rating−f(n))\begin{equation} TrueRating = mapRaing(Rating - f(n)) \end{equation} TrueRating=mapRaing(Rating−f(n))
其中 nnn 为已经参加的 Rated\tt{Rated}Rated 的比赛场次(包括本场)。
本文档的版本记录
* 10/29/2024 Ver. 1.00: 第一版。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1. AtCoder Rating System ver.1.00\tt{AtCoder\ Rating\ System\ ver. 1.00}AtCoder Rating System ver.1.00 ↩︎
2. AtCoderのレート計算式\tt{AtCoderのレート計算式}AtCoderのレート計算式 ↩︎