我最初将此内容发布在StackOverflow上,因为它可能是实现中的错误,但有人建议我发布到数学上。我刚刚找到了这个stackexchange,我想谁更好?你们中的有些人可能很快就知道了,这似乎是正确的还是不正确的,不需要调试。欢迎使用任何在线计算器链接或其他评级方法。
Glicko-2是国际象棋中使用的评级系统,但可以在许多其他情况下使用。Glicko-2是Glicko-1的改进,它解决了旧版ELO等级的问题。
与版本1相比,Glicko-2的独特之处在于,它合并了较高的评分偏差(RD),这是某人不活动的时间越长。它使用与时间/额定时间段相关的系统常数的概念来实现。
在此处可以找到作者撰写的示例:http : //www.glicko.net/glicko/glicko2.pdf。
他在这份文件中解释:
当在评估期内的游戏数量为中到大型时,例如在评估期内平均每位玩家至少10-15场比赛,Glicko-2系统效果最佳。评估期的时间长度由管理员自行决定。
假设一组活跃的国际象棋棋手在1个月的时间里平均玩10-15场比赛,那么管理员将在每个月底更新等级。
我需要Glicko-2评分系统的PHP实现,并遇到以下问题:
- JavaScript有一个小错误,其中没有让它与技术写作示例匹配,作者发现它足够接近,并且不费吹灰之力进行调试。
- PHP实现受到许多错误的困扰,但是除非您进行了多个评估期(技术文章从未显示其预期值),否则这是不明显的。
- 最终,Excel计算器似乎是无错误的,并且是最专业的,这是由国际象棋界的某个人完成的。解决JavaScript错误后,JavaScript和Excel计算器会非常紧密地匹配(尽管不够完美,可能会舍入误差)
我已经修复了我可以在PHP和JavaScript版本上找到的bug(并向作者提交了问题/补丁),使其与Excel Calculator的匹配程度最高。
现在,我有99%的信心,我有一个准确的Glicko-2实施方案(在这3个方案之间)进行分析,也就是当我遇到一些奇怪的问题以及讨论的主题时。
给定新玩家Glicko-2的建议默认设置:
Rating: 1500
RD: 350
Volatility: 0.06
如果您在接下来的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 〃
如果您在每个评分周期内面对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 〃
这些假设是否正确?我的计算器中有错误吗?
如果不是错误,那么还有什么方法可以解决这个问题:
- 将“真实评分”视为偏差的下限(评分-RD)
- 不显示无效的用户评分
- 不向用户显示少于N个游戏