ELO算法详解

算法概述

ELO等级分系统是一种评估竞技比赛中参与者相对技能水平的方法。

  • 起源:由匈牙利裔美国物理学家Arpad Elo开发,最初用于国际象棋
  • 特点:基于对局结果动态调整分数,反映真实水平变化
  • 应用:九麦范特西联赛使用改进版ELO系统,考虑比分差异

核心计算公式

1. 期望得分(Expected Score)

根据两名选手的ELO差距,计算A选手的期望胜率:

\[E_A = \frac{1}{1 + 10^{(R_B - R_A)/400}}\]

其中:

  • \(E_A\) = 选手A的期望得分
  • \(R_A\) = 选手A的当前ELO分数
  • \(R_B\) = 选手B的当前ELO分数
2. 实际得分(Actual Score)

根据比赛的实际比分计算选手A的实际得分:

\[S_A = \frac{\text{Score}_A}{\text{Score}_A + \text{Score}_B}\]

这里我们使用比分比例而非简单的胜负(1/0.5/0),使得大比分胜利获得更多奖励。

3. 动态K因子(Dynamic K-Factor)

K因子决定了每场比赛对ELO的影响程度。我们采用动态K因子:

\[\text{比分比率} = \frac{\max(\text{Score}_A, \text{Score}_B)}{\min(\text{Score}_A, \text{Score}_B)}\] \[K = K_{\text{基础}} \times \left(0.5 + 0.5 \times \text{比分比率}\right)\]

其中:

  • \(K_{\text{基础}} = 32\)(标准值)
  • 比分越悬殊,K因子越大,ELO变化越大
4. ELO变化(ELO Change)

最终的ELO分数变化:

\[\Delta R_A = K \times (S_A - E_A)\]

新的ELO分数:

\[R_A^{\text{新}} = R_A^{\text{旧}} + \Delta R_A\]

参数说明

参数 说明
基础ELO 1500 所有新玩家的初始ELO分数
基础K因子 32 标准的K因子值,控制ELO变化速度
ELO差距基数 400 400分差距对应约10倍胜率差异
K因子调节范围 16 - 64 根据比分差异,K因子在此范围内变化

计算实例

实例1:势均力敌的比赛 (7-6)

初始状态:

  • 选手A ELO: 1550
  • 选手B ELO: 1530
  • 比分: 7-6 (A胜)

计算过程:

  1. 期望得分:\(E_A = \frac{1}{1 + 10^{(1530-1550)/400}} = 0.529\)
  2. 实际得分:\(S_A = \frac{7}{7+6} = 0.538\)
  3. 比分比率:\(\frac{7}{6} = 1.167\)
  4. 动态K因子:\(K = 32 \times (0.5 + 0.5 \times 1.167) = 34.7\)
  5. ELO变化:\(\Delta R_A = 34.7 \times (0.538 - 0.529) = +0.3\)

结果:A玩家 +0.3分,B玩家 -0.3分

小结:势均力敌且比分接近的比赛,ELO变化很小。

实例2:大比分胜利 (9-0)

初始状态:

  • 选手A ELO: 1550
  • 选手B ELO: 1530
  • 比分: 9-0 (A胜)

计算过程:

  1. 期望得分:\(E_A = 0.529\) (同上)
  2. 实际得分:\(S_A = \frac{9}{9+0} = 1.0\)
  3. 比分比率:\(\frac{9}{0.01} \approx 2.0\) (使用上限)
  4. 动态K因子:\(K = 32 \times (0.5 + 0.5 \times 2.0) = 48\)
  5. ELO变化:\(\Delta R_A = 48 \times (1.0 - 0.529) = +22.6\)

结果:A玩家 +22.6分,B玩家 -22.6分

小结:大比分胜利获得显著更多的ELO奖励。

实例3:爆冷门 (弱胜强)

初始状态:

  • 选手A ELO: 1400 (弱)
  • 选手B ELO: 1600 (强)
  • 比分: 8-5 (A胜)

计算过程:

  1. 期望得分:\(E_A = \frac{1}{1 + 10^{(1600-1400)/400}} = 0.240\)
  2. 实际得分:\(S_A = \frac{8}{8+5} = 0.615\)
  3. 比分比率:\(\frac{8}{5} = 1.6\)
  4. 动态K因子:\(K = 32 \times (0.5 + 0.5 \times 1.6) = 41.6\)
  5. ELO变化:\(\Delta R_A = 41.6 \times (0.615 - 0.240) = +15.6\)

结果:A玩家 +15.6分,B玩家 -15.6分

小结:战胜强敌获得大量ELO奖励,体现爆冷的价值。

可视化图表

ELO差距 vs 期望胜率
K因子 vs 比分比率

算法优势

✅ 优点
  • 赢家必定加分,避免9-0仍失分的问题
  • 动态K因子使大比分胜利获得更多奖励
  • 长期运行后准确反映真实水平
  • 自动平衡,总ELO保持恒定
⚠️ 注意事项
  • 新玩家需要20-30场比赛才能稳定
  • 赛程安排会影响排名(强弱对手分布)
  • 联赛间ELO不直接可比(需标准化)
  • 运气成分仍存在(伤病、轮休等)