Elo排名系统

来源:互联网 发布:淘宝客小程序 编辑:程序博客网 时间:2024/05/17 07:10

Elo rating system用来计算玩家的相对技术等级,它本来是个改良的国际象棋积分系统,现在被广泛用于许多游戏。比如帝国时代3, 星际,魔兽争霸3等等。 电影《社交网络》中也有一段,马克伯格用此算法计算女生排名的片段,大笑

下面进入正题:先给出模型假设,然后是算法,最后是个例子

1、假设

(1)每位选手初始积分一致,统一初始化为1400分。通过比赛产生差异,形成排名,积分越高的排名越靠前。

(2) 每个选手在每局比赛中的表现是一个正态分布的随机变量。尽管选手在不同的比赛中发挥可能差异很大,但每位选手在一段时间内表现的平均值变化很小。Elo用随机变量的平均值来代表选手的真正水平。

(3)Elo用胜/平/负来评价选手在某一局比赛中的表现,i.e.赢就加分,输就扣分,平手不得分。

   

继续简化,微软在开发Xbox在线游戏时使用了一个True Skill的变量,评估选手能力。当然还是基于正态分布假设,但是偏重分析均值μ和标准差σ

2、变量说明

Ra: A选手当前排名; Rb: B选手当前排名
Sa: 实际胜负值, 胜 = 1 ;平=0.5; 负=0 。
Ea:预期A选手的胜负值,EA = 1/(1+10^[(Rb-Ra)/400]) ;Eb: 预期B选手的胜负值 EB = 1/(1+10^[(Ra-Rb)/400]) ,
显然Ea+Eb=1 。
K:每场比赛能得到的最大分数,魔兽里K=32 。
R'a: A选手一场比赛之后的积分
   R'a = Ra + K(Sa-Ea) 

3、实例

若A队1500分,B队1600分,预估A队的胜负值Ea = 1/(1+10^[(1600-1500)/400])=0.36 
假设A队赢了,实际胜负值为Sa=1 
A队最终得分为 R'a = 1500 + 32*(1-0.36) = 1500+20.5 = 1520, 赢20分 B队输20分。 

假设B队赢了,预估B队胜负值Eb = 0.64 
B队最终得分为 R'b = 1600 + 32*(1-0.64) = 1600 + 11.52 = 1612, 赢12分,A队输12分。 
   
也就是说赢分与积分差距有关。你赢高分队得分多,输给低分的输的也多,赢低分的分数就少。


原创粉丝点击