Logo zxh_qwq 的博客

博客

新 Rating 系统

avatar zxh_qwq 2026-09-15 11:35:19

比较简单的讲清楚,按排名等差数列再整体调整 delta 变成 0. 每场比赛设置 max 和 min rating。

比赛数也不多,使用别的大型算法显然是并不优秀的,不如使用这个。

支持的点个 Upvote 谢谢喵。

function calcRating($standings, $standing , $old_rating , &$new_rating , $max_rating , $min_rating) {
    $n = count($standings);        
    $rating = array();
    $delta = array();
    for( $i = 0; $i < $n; ++$i) {
        $perf = $max_rating - ($max_rating - $min_rating) / n * i;
        $delta[i] = ($perf - $old_rating) / 5;
        $sum = $sum + $delta[i];
    }
    for( $i = 0; $i < $n; ++$i) {
        $delta[i] = $delta[i] + $sum / n;
        $new_rating = $old_rating + $delta;
    }
}

评论

ryp
原来的 rating 是我公布成绩那里写挂了,不是算法的锅。现在已经修好了
ryp
wyoj 的比赛数据,我放在我的新文章了。如果你实在觉得你这个算法比 Glicko-2 还稳定,可以本地用你这个算法跑跑试试
__vector__
肉眼可见的错误: "($max_rating - $min_rating) / n * i;" 应当更正为 “($max_rating - $min_rating) / (n-1)*i” ,原因显然。 “$delta[i] = $delta[i] + $sum / n;” 应当更正为 “$delta[i] = $delta[i] - $sum / n;",我理解你这是为了让 rating 总和变化为 0.

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。

zxh_qwq Avatar
透明梦
活跃度 近 53 周
查看全年