系统主要参考了AtCoder平台的AtCoder Rating System ver.1.00,
基于Logistic Distribution(或Sigmoid Function)构建。
(一)比赛状态:
Rated状态:
正常参加比赛的选手为Rated状态,在每场Rated比赛中会获得一个“表现分”,这个“表现分”代表选手在比赛中的表现情况。竞赛分是“表现分”加权平均值(近期比赛权重更高)减去f(x)f(x)f(x)(xxx为Rated比赛参与次数)。其中f(1)=1200f(1) = 1200f(1)=1200,且fff随参加Rated比赛次数增加逐渐减小趋于零。如果持续获得XXX的表现分,竞赛分将从X−1200X - 1200X−1200开始逐渐趋近于XXX,参加10场比赛后竞赛分接近真实实力。
Unrated状态:
包含但不限于以下情况:参加本场比赛前竞赛分超过本场比赛的Rated分数线限制(RATEDBOUND);比赛中作弊被取消成绩;因不可抗力导致比赛无法正常进行而所有参与用户被设置为Unrated。
(二)表现分计算:
APerf(平均表现分)计算:
对于参赛选手,设Perf1,Perf2,⋯,PerfkPerf_1,Perf_2 ,⋯,Perf_kPerf1 ,Perf2 ,⋯,Perfk 为历史PerfPerfPerf(Perf1Perf_1Perf1 是最近一场比赛,PerfkPerf_kPerfk 是最早一场比赛),
其APerfAPerfAPerf定义为APerf=∑i=1kPerfi×0.9i∑i=1k0.9iAPerf=\frac{\sum_{i = 1}^{k}Perf_i\times0.9^i}{\sum_{i = 1}^{k}0.9^i}APerf=∑i=1k 0.9i∑i=1k Perfi ×0.9i 。
所有第一次参与Acgo的Rated比赛选手的APerfAPerfAPerf会被设置为CenterCenterCenter,Center=RATEDBOUND×0.4Center = RATEDBOUND\times0.4Center=RATEDBOUND×0.4。
Perf计算(基于排名):
设nnn为一场比赛中所有Rated参赛选手数量,APerfiAPerf_iAPerfi 为第iii个选手的APerfAPerfAPerf,
排行第rrr名选手的PerfPerfPerf定义为满足∑11+6.0(X−APerfi)/400.0=r−0.5\sum\frac{1}{1 + 6.0(X - APerf_i)/400.0}=r - 0.5∑1+6.0(X−APerfi )/400.01 =r−0.5的唯一XXX,
可通过二分法计算得出(排名是所有并列名次平均值)
第一场比赛表现分处理:。
在使用新竞赛分系统的第一场比赛(排位赛#4),表现值Perf=(Perf−Center)×1.5+CenterPerf=(Perf - Center)\times1.5+CenterPerf=(Perf−Center)×1.5+Center,进行放大处理。
RPerf计算:
最终对于每个用户其RPerf=min{Perf,RATEDBOUND+100}RPerf = \min\{Perf, RATEDBOUND + 100\}RPerf=min{Perf,RATEDBOUND+100},RATEDBOUNDRATEDBOUNDRATEDBOUND在不同比赛中不一样且会在竞赛说明中给出。
(三)竞赛分计算:
F函数定义:
F(n)=∑i=1n0.81i∑i=1n0.9iF(n)=\frac{\sum_{i = 1}^{n}0.81^i}{\sum_{i = 1}^{n}0.9^i}F(n)=∑i=1n 0.9i∑i=1n 0.81i 。
f函数定义:
f(n)=F(n)−F(∞)F(1)−F(∞)×1200f(n)=\frac{F(n)-F(\infty)}{F(1)-F(\infty)}\times1200f(n)=F(1)−F(∞)F(n)−F(∞) ×1200。
g函数定义:
g(X)=2.0X800g(X)=2.0^{\frac{X}{800}}g(X)=2.0800X ,该函数给更好表现赋予更多权重,极好表现与较好表现差异增大,重大失误与一般失误差异相对不大。
竞赛分计算(基于RPerf):
设RPerf1,RPerf2,⋯ ,RPerfkRPerf_1, RPerf_2,\cdots, RPerf_kRPerf1 ,RPerf2 ,⋯,RPerfk 为一位参赛选手的历史RPerfRPerfRPerf(RPerf1RPerf_1RPerf1 为当场比赛的RPerfRPerfRPerf),
本场比赛结束后竞赛分Rating=g−1(∑1k0.9i∑1kg(RPerfi)×0.9i∑1k0.9i)Rating = g^{-1}(\frac{\sum_{1}^{k}0.9^i\sum_{1}^{k}g(RPerf_i)\times0.9^i}{\sum_{1}^{k}0.9^i})Rating=g−1(∑1k 0.9i∑1k 0.9i∑1k g(RPerfi )×0.9i )。
最终竞赛分调整:
考虑fff函数对竞赛分影响,定义mapRating(r)={400exp(400−r400)r≤400rr>400mapRating(r)=\begin{cases}\frac{400}{\exp(\frac{400 - r}{400})}&r\leq400\\r&r > 400\end{cases}mapRating(r)={exp(400400−r )400 r r≤400r>400 ,最终TrueRating=mapRaing(Rating−f(n))TrueRating = mapRaing(Rating -
f(n))TrueRating=mapRaing(Rating−f(n)),
其中nnn为已经参加的Rated比赛场次(包括本场)。