简体   繁体   English

Glicko-2评级系统:Bug还是漏洞利用?

[英]Glicko-2 Rating System: Bug or exploit?

Glicko-2 is a rating system used in chess, but can be used in many other situations. Glicko-2是国际象棋中使用的评级系统,但可以在许多其他情况下使用。 Glicko-2 is an improvement on Glicko-1, which addressed problems of the older ELO rating. Glicko-2是对Glicko-1的改进,它解决了旧ELO评级的问题。

What makes Glicko-2 special in comparison to version 1 is that it incorporates a higher rating deviation (RD) the longer someone has been inactive. 与版本1相比,Glicko-2的特殊之处在于它具有更高的评级偏差(RD),即某人不活动的时间越长。 It does this with the notion of a system constant which relates to time/rating periods. 它使用与时间/评级周期相关的系统常数的概念来实现这一点。

An example write up from the author is found here: http://www.glicko.net/glicko/glicko2.pdf . 可以在此处找到作者的一个例子: http//www.glicko.net/glicko/glicko2.pdf
Within this document, he explains: 在这份文件中,他解释说:

The Glicko-2 system works best when the number of games in a rating period is moderate to large, say an average of at least 10-15 games per player in a rating period. 当评级期间的游戏数量从中到大时,Glicko-2系统效果最佳,比如评级期内每位玩家平均至少10-15场比赛。 The length of time for a rating period is at the discretion of the administrator. 评级期的时间长短由管理员决定。

Making an assumption that a group of active chess players play 10-15 games on average in a 1 month time period, the administrator would then update ratings at the end of every month. 假设一组活跃的国际象棋选手在1个月的时间内平均玩10-15场比赛,管理员将在每个月末更新评级。


I needed a PHP Implementation of the Glicko-2 rating system and came across the following: 我需要一个Glicko-2评级系统的PHP实现,并且遇到了以下内容:

Glicko-2 JavaScript Implementation Glicko-2 JavaScript实现

  • The JavaScript had a small error, in which didn't let it match the technical write-up example, the author found it close enough, and didn't bother to debug. JavaScript有一个小错误,其中没有让它与技术写作示例匹配,作者发现它足够接近,并且没有费心去调试。

Glicko-2 PHP Implementation Glicko-2 PHP实现

  • The PHP implementation was plagued with many bugs, but that wasn't apparent unless you did more than one rating period (which the technical write-up never shows expected values of) PHP实现受到许多错误的困扰,但除非您执行了多个评级期(技术文档从未显示预期值),否则这一点并不明显

Glicko-2 Calculator in Excel Excel中的Glicko-2计算器

  • Finally the Excel calculator seemed to be error-free and the most professional, done by someone in the chess community. 最后,Excel计算器似乎没有错误且最专业,由国际象棋界的某个人完成。 Once the JavaScript bug was solved, the JavaScript and Excel Calculator matched very closely with each other (albeit not perfect, could be within rounding error) 一旦JavaScript错误得到解决,JavaScript和Excel计算器彼此非常接近(尽管不完美,可能在舍入误差范围内)

I had fixed the bugs (and submitted issues/patches to the authors) I could find on the PHP and JavaScript versions to match as closely to the Excel Calculator 我已经修复了错误(并向作者提交了问题/补丁)我可以在PHP和JavaScript版本上找到与Excel计算器紧密匹配的错误


Now I am 99% confident that I have an accurate Glicko-2 implementation (between the 3 of them) for analysis and that is when I came across something strange, and the topic of this discussion. 现在,我有99%的信心,我有一个准确的Glicko-2实现(在它们中的3个之间)进行分析,这就是我遇到一些奇怪的东西,以及这个讨论的主题。

Given the suggested default for Glicko-2 for a new player: 给出新玩家Glicko-2的建议默认值:

Rating:      1500
RD:           350
Volatility:  0.06

If you face an average opponent of rating 1378 and RD 99 ( Source ) only once every rating period (1 month) for the next 12 periods (1 year) you will have accumulated an assumed National Class A (1800-1999) rating of 1852 when in reality you have only beat 12 average rated players over a span of 12 months. 如果您在接下来的12个时期(1年)的每个评级期(1个月)内只面对1378评级和RD 99( 来源 )的平均对手,您将累积假定的国家A级 (1800-1999)评级为1852实际上,你在12个月的时间里只击败了12名平均水平的球员。

Month   Rating      RD      Volatility      Class
1       1625        259     0.059999        National Class B
2       1682        225     0.059998        〃
3       1718        205     0.059997        〃
6       1784        174     0.059994        〃
12      1852        148     0.059988        National Class A
24      1922        127     0.059976        〃

If you face 2 average opponents every rating period, you can get to National Class A about 4-5 months, facing only 8-10 average opponents. 如果你在每个评级期间面对2个普通对手,你可以在4-5个月内到达国家A级,面对的平均对手只有8-10个。

Month   Rating      RD      Volatility      Class
1       1672        215     0.059999        National Class B
2       1733        183     0.059997        〃
3       1770        166     0.059995        〃
4       1797        154     0.059993        〃
5       1819        146     0.059992        National Class A
6       1836        140     0.059991        〃


Are these assumptions accurate? 这些假设是否准确? Is there a bug in my calculator? 我的计算器中有错误吗?

If it is not a bug, what are some ways of countering this besides: 如果它不是一个bug,除此之外还有哪些方法可以解决这个问题:

  • Consider "true rating" to be lower bound of the deviation (Rating - RD) 将“真实评级”视为偏差的下限(评级 - RD)
  • Do not show inactive user's rating 不要显示非活动用户的评级
  • Do not show users with less than N games 不要向少于N个游戏的用户展示

It may seem counter-intuitive but this is actually a correct result. 这看似违反直觉,但实际上这是一个正确的结果。 If you continuously play average players, but you always win, regardless of the time periods, you're demonstrating you have a high ranking (not an average ranking even though your opponents are average). 如果你连续玩普通玩家,但你总是赢,无论时间段如何,你都表明你的排名很高(即使你的对手是平均水平,也不是平均排名)。 A player who is average (has a 'true' average rank), playing opponents of exactly the same 'true' rank (average) should win and lose about 50% of the time. 平均(具有“真正的”平均等级)的玩家,打出完全相同的“真实”等级(平均值)的对手应该赢得并且失去大约50%的时间。 A player with a 'true' rank that is very high, will win a larger percentage of the time when playing average players which depends on just how far apart their ranks are, but lets say it's a high enough rank that they should win 90% of the time. 具有非常高的“真实”等级的玩家将在玩普通玩家时赢得更大比例的时间,这取决于他们的等级有多远,但是可以说这是一个足够高的等级,他们应该赢得90%的时间。 That means for ever 10 games played against an average player, this highly ranked player should lose 1 of them. 这意味着对于普通玩家来说,有10场比赛,这个排名很高的球员应该输掉其中的一场。

What you've effectively modeled is a player that has a rank high enough to win every single game against an average player (more than 12 or 24 games without a loss) which means their score will continue to go up unbounded if they continue to win, because they've never lost. 你有效建模的是一个排名足够高的玩家,可以赢得每场比赛对阵普通玩家(超过12或24场没有损失的比赛),这意味着如果他们继续获胜,他们的得分将继续上升因为他们从未输过。 Their demonstrating an ability that (until a loss happens) should have a rank separation large enough to approach an expected win ratio of 100%. 他们表现出的能力(直到发生损失)应该具有足够大的等级分离,以达到100%的预期胜率。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM