GXU_XCPC_Board rating 计算规则

本文介绍了一种基于Codeforces和Atcoder等平台的竞赛编程评级系统。该系统通过综合问题解决能力、比赛评级变动和个人博客活跃度等多个维度来评估参赛者的水平。详细解释了基础分计算、评级计算的方法及周期表现评级的更新机制。

1. 基础分

BaseRating=ProblemScorce∗0.5+ratingScorce∗0.4+BlogScore∗0.1BaseRating =ProblemScorce*0.5+ratingScorce*0.4+BlogScore*0.1BaseRating=ProblemScorce0.5+ratingScorce0.4+BlogScore0.1

ProblemScorce=PassPloblemSumProblemScorce = PassPloblemSumProblemScorce=PassPloblemSum

ratingScorce=(AtcodeRating+CodeforcesRating)∗0.1ratingScorce=(AtcodeRating+CodeforcesRating)*0.1ratingScorce=(AtcodeRating+CodeforcesRating)0.1

BlogScorce=BlogNum∗2BlogScorce=BlogNum*2BlogScorce=BlogNum2

2. Rating 计算

RatingRatingRating 将以(天\周\月)为单位作为一场比赛,进行迭代计算。

2.1 模块分数

2.1.1 ProblemScore

ProblemScore=easy∗1+basic∗2+advanced∗3+hard∗4+unknown∗2ProblemScore=easy∗1+basic∗2+advanced∗3+hard∗4+unknown∗2ProblemScore=easy1+basic2+advanced3+hard4+unknown2

2.1.2 ratingScore

codeforces:codeforces :codeforces

d=ratingcfnew−ratingcfd=rating_{cf_{new}}-rating_{cf}d=ratingcfnewratingcf

ratingScorecf={1,ratingcf≤600,d≥1ratingcf400+ratingcf∗d20000,ratingcf≥601,d≥10,d≤0 ratingScore_{cf}= \begin{cases} 1,\quad rating_{cf}\leq 600,d \geq 1\\ \frac{rating_{cf}}{400}+\frac{rating_{cf}*d}{20000}, \quad rating_{cf}\geq 601,d \geq 1\\ 0,\quad d \leq 0 \end{cases} ratingScorecf=1,ratingcf600,d1400ratingcf+20000ratingcfd,ratingcf601,d10,d0

Atcoder:Atcoder:Atcoder:

d=ratingatcnew−ratingatcd=rating_{atc_{new}}-rating_{atc}d=ratingatcnewratingatc

ratingScoreatc={1,ratingatc≤400,d≥1ratingatc400⋅(1+d50),ratingatc≥401,d≥1ratingatc400⋅(1+d20),ratingatc≥1000,d≥10,d≤0 ratingScore_{atc}= \begin{cases} 1,\quad rating_{atc}\leq 400,d \geq 1\\ \frac{rating_{atc}}{400}\cdot(1+\frac{d}{50}), \quad rating_{atc}\geq 401,d \geq 1\\ \frac{rating_{atc}}{400}\cdot(1+\frac{d}{20}), \quad rating_{atc}\geq 1000,d \geq 1\\ 0,\quad d \leq 0 \end{cases} ratingScoreatc=1,ratingatc400,d1400ratingatc(1+50d),ratingatc401,d1400ratingatc(1+20d),ratingatc1000,d10,d0

2.1.3 BlogScore

BlogScore=∑i=1nBlogScoreinBlogScore=\frac{\sum^{n}_{i=1} BlogScore_i}{n}BlogScore=ni=1nBlogScorei

2.1.4 AttendanceScore

AttendanceScore=单位周期内出勤分钟数AttendanceScore=单位周期内出勤分钟数AttendanceScore=单位周期内出勤分钟数

2.2 预期胜率

ELO积分预期胜率计算公式

P(D)=12+∫0D1δ2π⋅e−x22δ2dxP(D)=\frac{1}{2}+\int_0^D \frac{1}{\delta\sqrt{2\pi}} \cdot e^{\frac{-x^2}{2\delta ^2}}dxP(D)=21+0Dδ2π1e2δ2x2dx

利用最小二乘法得到实际应用公式,其中 DDD 代表分差。

P(D)=11+10D400P(D)=\frac{1}{1+10^{\frac{D}{400}}}P(D)=1+10400D1

2.3 周期表现 rating 计算

2.3.1 考虑 1 V 1

RA:playerA的rating                           RB:playerB的ratingR_A:player A 的 rating ~~~~~~~~~~~~~~~~~~~~~~~~~~~R_B:player B 的 ratingRA:playerArating                           RB:playerBrating

EA=11+10RB−RA400                                     EB=11+10RA−RB400E_A=\frac{1}{1+10^{\frac{R_B-R_A}{400}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~E_B=\frac{1}{1+10^{\frac{R_A-R_B}{400}}}EA=1+10400RBRA1                                     EB=1+10400RARB1

EA+EB=1E_A+E_B=1EA+EB=1

SA=problemScoreAproblemScoreA+problemScoreB⋅0.4+ratingScoreAratingScoreA+ratingScoreB∗0.3+           blogScoreAblogScoreA+blogScoreB∗0.2+AttendanceScoreAAttendanceScoreA+AttendanceScoreB∗0.1S_A=\frac{problemScore_A}{problemScore_A+problemScore_B} \cdot 0.4+\frac{ratingScore_A}{ratingScore_A+ratingScore_B}*0.3+ \\ ~\\~~~~~~~~~~ \frac{blogScore_A}{blogScore_A+blogScore_B}*0.2+\frac{AttendanceScore_A}{AttendanceScore_A+AttendanceScore_B}*0.1SA=problemScoreA+problemScoreBproblemScoreA0.4+ratingScoreA+ratingScoreBratingScoreA0.3+           blogScoreA+blogScoreBblogScoreA0.2+AttendanceScoreA+AttendanceScoreBAttendanceScoreA0.1

SB=problemScoreBproblemScoreA+problemScoreB⋅0.4+ratingScoreBratingScoreA+ratingScoreB∗0.3+            blogScoreBblogScoreA+blogScoreB∗0.2+AttendanceScoreBAttendanceScoreA+AttendanceScoreB∗0.1S_B=\frac{problemScore_B}{problemScore_A+problemScore_B} \cdot 0.4+\frac{ratingScore_B}{ratingScore_A+ratingScore_B}*0.3+\\~\\~~~~~~~~~~~\frac{blogScore_B}{blogScore_A+blogScore_B}*0.2+\frac{AttendanceScore_B}{AttendanceScore_A+AttendanceScore_B}*0.1SB=problemScoreA+problemScoreBproblemScoreB0.4+ratingScoreA+ratingScoreBratingScoreB0.3+            blogScoreA+blogScoreBblogScoreB0.2+AttendanceScoreA+AttendanceScoreBAttendanceScoreB0.1

SA+SB=1S_A+S_B=1SA+SB=1

RAnew=RA+K⋅(SA−EA)R_{A_{new}}=R_A+K \cdot (S_A -E_A)RAnew=RA+K(SAEA)

KKK 暂定为 323232,实际上 KKK 将随着用户 RatingRatingRating 的增加而减小。

2.3.2 考虑 1 V n

RAnew=RA+K⋅PAR_{A_{new}}=R_A+K \cdot P_ARAnew=RA+KPA

PA=∏i=排名低于A的用户x(SAi−EAi)x−∏i=排名高于A的用户y(EAi−SAi)yP_A=\sqrt[x]{\prod^{x}_{i=排名低于A的用户}(S_{Ai}-E_{Ai})}-\sqrt[y]{\prod^{y}_{i=排名高于A的用户}(E_{Ai}-S_{Ai})}PA=xi=排名低于A的用户x(SAiEAi)yi=排名高于A的用户y(EAiSAi)

由于(SAi−EAi)(S_{Ai}-E_{Ai})(SAiEAi)并不是全为正数,因此通过分别计算对应的值做差为 PAP_APA

2.3.3 rating 修正调整

第一次:

adjust=−1−∑Ki∗Pinadjust=\frac{-1-\sum K_i*P_i}{n}adjust=n1KiPi

Ri=Ri+adjustR_i=R_i+adjustRi=Ri+adjust

保证所有人的平均变化接近 0 并且在 0 以下。

第二次:

m=min(n,4n)m=min(n,4\sqrt{n})m=min(n,4n)

adjust=min(max(−1−∑Ki∗Pim,−10),0)adjust=min(max(\frac{-1-\sum K_i*P_i}{m},-10),0)adjust=min(max(m1KiPi,10),0)

取一个合理的 adjustadjustadjust 使得前 mmm 个人的平均变化为 0。

Ri=Ri+adjust    (i≤m)R_i=R_i+adjust~~~~(i \leq m)Ri=Ri+adjust    (im)

3. 后记

本文参考了codeforce,atcoder,Elo rating systemcodeforce,atcoder,Elo~rating~systemcodeforceatcoderElo rating systemratingratingrating 规则,以周期统计数据替代比赛场景,并根据应用场景进行修改,目前未进行样本测试。

可能测试后,还会对参数以及公式大改QAQ

参考
https://en.wikipedia.org/wiki/Elo_rating_system
https://www.luogu.com.cn/blog/ak-ioi/cf-at-rating

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值