2016年7月12日 星期二

Elo Rating System

有時候在競爭式的遊戲中,可以看到系統對於玩家目前表現的評價。例如《英雄聯盟》的排位,《皇室戰爭》的積分。還有先前與南韓棋士李世乭對弈的人工智慧AlphaGo,在賽後的排名迅速竄升

在開始討論之前……

先來談談實力這件事

撇開實際看到的數字之前,我們是如何評定實力的高低、技巧的優劣?

例如:朋友之間打牌,如果彼此之間牌技相差懸殊,很容易就「看」得出來誰是會玩的,這是因為他贏得多、輸得少。
反過來說,一群實力差不多的人,反而很難決定誰的實力高低。

表現不是絕對的,實力強的不必然贏過實力弱的,只是獲勝機率相對高而已。


假設我們將玩家a,b的表現量化,稱為Xa,Xb,且該競技沒有和局。則a,b的表現跟勝率有關。
令Ea,Eb為玩家a,b的勝率,則:
Ea=Xa/(Xa+Xb)
Eb=Xb/(Xa+Xb)

這只是我隨意提出的表現量化方式,不必深究。

關於機率分布

複雜數學在此不提,用維基百科中做簡單舉例,下列函數為二項分布的p.d.f(機率密度函數)

當n=3,k=0,p=1/6
可以描述

在擲3次骰子中,不出現6點的機率

機率分布可以描述機率參與其中的實際現象。



從西洋棋說起

在1960年前,西洋棋的計分方式為Harkness System,這套系統並不能很好的評價出選手的表現。於是,物理學家同時也是西洋棋棋士的Arpad Elo,提出Elo Rating System
假如一位棋手在比賽中的真實得分(勝=1分,和=0.5分,負=0分)和他的勝率期望值不同,則他的等級分要作相應的調整。具體的數學公式為
公式中分別為棋手調整前後的等級分。
 其中K為常數,如下:

為對手等級分
(What the F...)

前面的公式還可以理解,但是這個
這個……



Ea destroy everything

Elo一開始是使用常態分佈作為選手實力的近似(常態分佈要另開主題),但是後來發現logistic distribution 更近似現實所有選手實力的結構。

而logistic分佈函數的樣子就長得很像上面那樣。Elo建議當選手等級分差距200時,其勝率為0.75:0.25(10^0.5=3.162)高能注意


回到Ea的公式,這可以理解成:當玩家a,b的等級分差距400,a,b的勝率比為1:10。
選手A等級分1200,選手B等級分1600。則B的勝率是A的10倍。(對賭盤來說很重要。)

而K是作為結束後,雙方等級分的增減,一方加多少另一方就減多少。

假設K=32

A等級分為1400,B等級分為1700,則Ea=0.151,Eb=0.849

賽後等級分變化

A勝利B勝利
賽後A等級分1427.1686541395.168654
賽後B等級分1672.8313461704.831346

強勝弱:「啊不就好厲害,虐菜嘛?」所以只加一點點分數。
弱勝強:「這就你一直不肯教我的遇強則屈,借花獻佛!」大加分!

K訂太高,則每場比賽導致的等級分變化太大,一不小心就鑽石掉到銀牌。
K訂太低,則超級新星的等級分成長太慢,還要再砍很多雜魚才能到達應有水準。

在西洋棋現行規則中,新手期的K比較大,老手比較小。
而K值可以根據實際情況自由決定。

實際應用上的問題

這裡就我遇到的問題,提出目前想到的解法,可能並不正確。

5v5的比賽怎麼辦?
做兩隊的平均等級分,如果有不一樣的K值做平均的K,比照雙人競賽,最後計分依比例分配。

該怎麼劃分區間?
長久來看,人數會集中在平均等級分附近,所以依據需求可以給出定值的等級分,1000分以下叫noob,1000~1200稱為菜鳥以此類推。

每場競賽後的增減分等價,這不就代表很多人會落在起始分數附近嗎?
因為新手還沒有經過足夠的競賽使其逼近他應有的等級分,透過第二層資訊例如10場之後才公佈分數,或者定期決定牌位。

玩家不玩,對整體的影響?
如果玩家不玩了,不再被配對到,整體可流動的分數減少。LOL的做法是定期reset,清空判定為無效的玩家。


大概就是這樣子~
我們下次再聊。


沒有留言:

張貼留言