技術觀察二 - Elo rating system
Elo是由Arpad Elo發明的,最早是用來優化國際象棋評估棋力的一種方法。很顯然,象棋比賽以前是個輸贏積分制,贏的比輸的積分拿的多,目前大部分體育賽事,甚至還是如此,比如足球比賽,well,這是另一個有趣的問題,主要原因是因為具備相同競技實力的足球隊數量過少,elo評估演算法在這種情況下和輸贏積分制應該是近似的,而後者顯然算起來更簡單,也更容易投注,這裡就不展開了。
採用輸贏積分制帶來的一個問題是,你無法及時的評估實力相對變化情況,尤其是弱勝強的場景。以國際象棋為例,弱者A戰勝強者B時,很可能A的實力在此刻已經逼近甚至超越B,這時候從棋力來講,應該大幅度提高A的排名,而傳統的輸贏積分制顯然做不到這一點,你從傳統的積分數據榜上無法解讀出A的實力已經逼近B的這個場景的表達,而Elo就可以。
Arpad Elo首先用了正態分布的累積分布函數來評估一個人的勝率(棋力):
我們假設
x=Ra-Rb=D,也即a,b選手的rank分差;位置參數u=0,則上述公式可以簡化為如下:
然而,這個公式用來評估棋手的表現並不準確,經過多次模擬,Elo改成了Logistic distribution,和正態函數很類似,但是峰更陡,尾部更沉。
所以我們就得到了如下2個公式:
A對B的勝率
B對A的勝率
在電影《社交網路》里,Eduardo給Mark Zackburg免費貢獻的公式,其實就是elo。
假如棋手A獲勝了,則他的積分要加多少呢?
Ra = Ra + K(Sa - Ea)
Ra代表新的分值,Ra是原有的分值;
Sa代表一位棋手在圍棋比賽中的真實得分,勝=1分,和=0.5分,負=0分;
K 值代表理論上最多可以獲得的贏分或者失分,國際象棋大師賽中,對於大師選手為16,對於一般選手是32,也是大部分遊戲的取值。通常水平越高的比賽中其K值越小,這樣做是為了避免少數的幾場比賽就能改變高端頂尖玩家的排名。
那麼,勝率評估公式里的400是怎麼來的?可以推算得知,當K值相同的情況下,越高的分母,越低的積分變化。總體來說400是一個較為平衡的值,讓玩家積分保持Logistic distribution,詳細可以閱讀這篇文章:
http://en.chessbase.com/post/arpad-elo-and-the-elo-rating-system
One more thing:
這個公式用到遊戲是根據場景優化的,比如在賽季初的天梯,可以加大K值,在高分段的玩家中,可以加大K值,營造競爭激烈的感覺。
推薦閱讀: