Glicko评分系统(英文:Glicko rating system)及Glicko-2评分系统(英文:Glicko-2 rating system)是评估选手在比赛中(如国际象棋及围棋)的技术能力方法之一。此方法由发明,原为打造,后作为等级分评分系统的改进版本广泛应用。格里克曼在此算法中的主要贡献是“评分可靠性”(Ratings Reliability,简称RD),即评分标准差(Ratings Deviation)。
Glicko与Glicko-2评分系统被发表至公有领域。诸多在线(如《Pokémon Showdown》、《Lichess》、《》、《Chess.com》、《[http://online-go.com 在线围棋服务器] 》、《絕對武力:全球攻勢》、《絕地要塞2》、《刀塔霸业》、《激战2》、《Splatoon 2》及《皇舆争霸》)和多个竞技性编程比赛都采用此种评分方法。Glicko所使用的算法可在其网站上找到。
算法中,评分可靠性用于测量选手的评分,一评分可靠性(评分标准差)相当于一标准差。举个例子,一名评分为1500分的选手,其评分可靠性为50,表示有95%的可能性这名选手的真实实力约在1400至1600分(1500分的两个标准差)之间。选手的实力区间需增加并减去评分中的两个评分标准差来计算。在比赛结束后,选手的实力评分的波动根据评分标准差来计算:当选手的评分标准差较低(选手的评分已较为准确)或其对手的评分标准差较高时(对手的真实实力无法确定)时,选手的评分波动也较小。评分标准差将在比赛后减小,但将在一段时间不活跃后渐渐增大。
Glicko-2是Glicko评分系统的改进版本,引进了评分挥发度σ(Rating Volatility)的概念。采用稍加修改版的Glicko-2评分系统。
测量
下列评分流程仅适用于Glicko评分系统,不适用于Glicko-2。
若选手没有评分,则其评分通常被设为1500,评分标准差为350。
测算标准差
新的评分标准差(RD)可使用旧的评分标准差(RD_0)计算:
RD = \min\left(\sqrt{{RD_0}^2 + c^2 t},350\right)
t为自上次比赛至现在的时间长度(评分期),350则是新选手的评分标准差。若选手在一个评分期间内进行了多场比赛,此算法会将进行的比赛作为一场看待。评分期根据选手进行比赛的频繁程度,可能长至七个月,短至几分钟。常数c根据选手在特定时间段内的技术不确定性计算而来,计算方法可能通过数据分析,或是估算选手的评分标准差将在什么时候达到未评分选手的评分标准差得来。若一名选手的评分标准差将在100个评分期间内达到350的不确定度,则评分标准差为50的玩家的常数c可通过解350 = \sqrt{50^2 +100c^2}的方式计算而来。
或
c = \sqrt{(350^2 - 50^2)/100} \approx 34.6
测算新评分
在经过m场比赛后,选手的新评分可通过下列等式计算:
r = r_0 + \frac{q}{\frac{1}{RD^2} + \frac{1}{d^2}}\sum_{i=1}^{m}{g(RD_i)(s_i-E(s|r_0,r_i,RD_i))}
其中:
g(RD_i) = \frac{1}{\sqrt{1 + \frac{3 q^2 (RD_i^2)}{\pi^2} }}
E(s|r,r_i,RD_i) = \frac{1}{1+10^{\left(\frac{g(RD_i)(r_0-r_i)}{-400}\right)}}
q = \frac{\ln(10)}{400} = 0.00575646273
d^2 = \frac{1}{q^2 \sum_{i=1}^{m}{(g(RD_i))^2 E(s|r_0,r_i,RD_i) (1-E(s|r_0,r_i,RD_i))}}
r_i表示选手个人的评分;
s_i表示每场比赛后的结果。胜利为1,平局为\frac{1}{2},失败为0。
测算新评分标准差
原先用于计算评分标准差的函数应增大标准差值,进而反应模型中一定非观察时间内,玩家的技术不确定性的增长。随后,评分标准差将在几场游戏后更新:
RD'=\sqrt{\left(\frac{1}{RD^2}+\frac{1}{d^2}\right)^{-1}}
另请参阅
*
参考文献
外部链接
- [http://www.glicko.net/glicko.html 格里克曼教授的 Glicko 网站]
- 微软借鉴Glicko中的多个理念开发出的TrueSkill [https://www.microsoft.com/en-us/research/publication/trueskilltm-a-bayesian-skill-rating-system/]评分系统
- [https://github.com/forwardloop/glicko2s forwardloop/glicko2s] Glicko-2的JVM实现
- [https://github.com/RobKohr/glicko RobKohr/glicko] Glicko-2的JavaScript实现
- [https://github.com/mmai/glicko2js mmai/glicko2js] Glicko-2的客户端JavaScript及Node.js实现
- [https://github.com/deepy/glicko2 deepy/glicko2] Glicko-2的Python实现
- [https://github.com/sublee/glicko2 sublee/glicko2] Glicko-2的Python实现
- [https://cran.r-project.org/web/packages/PlayerRatings PlayerRatings] Glicko的R语言实现,由亚历克·斯蒂芬森(Alec Stephenson)及杰夫·索纳斯(Jeff Sonas)撰写
- [https://github.com/andriykuba/scala-glicko2 scala-glicko2] Glicko-2的Scala实现
评论 (0)