elo 评分
正如我在较早的博客文章中提到的那样, 我一直在学习有关排名系统的知识,而我遇到的第一个系统是Elo评级系统 ,该系统最有名的是用于对棋手进行排名的系统 。
Elo评分系统使用以下公式计算球员/团队参加比赛后的排名:
R'= R + K *(S – E)
- R'是新的评分
- R是旧评分
- K是增加或减少等级的最大值(ELO为16或32)
- S是一场比赛的分数
- E是游戏的预期分数
我将该公式转换为以下Clojure函数:
(defn ranking-after-win
[{ ranking :ranking opponent-ranking : opponent-ranking importance :importance}]
(+ ranking (* importance (- 1 (expected ranking opponent-ranking) ))))
(defn ranking-after-loss
[{ ranking :ranking opponent-ranking : opponent-ranking importance :importance}]
(+ ranking (* importance (- 0 (expected ranking opponent-ranking) ))))
(defn expected [my-ranking opponent-ranking]
(/ 1.0
(+ 1 (math/expt 10 (/ (- opponent-ranking my-ranking) 400)))))
可以这样算出1200击败1500的新排名:
> (ranking-after-win { :ranking 1200 : opponent-ranking 1500 :importance 32 })
1227.1686541692377
它的工作方式是,首先我们的可能性,我们应该呼吁预期赢得比赛:
> (expected 1200 1500)
0.15097955721132328
这告诉我们,我们有15%的机会赢得比赛,因此,如果我们赢了&#