比较简单的讲清楚,按排名等差数列再整体调整 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;
}
}
