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分。
也就是說贏分與積分差距有關。你贏高分隊得分多,輸給低分的輸的也多,贏低分的分數就少。