Elo score等級公式演算法推演勝率

2021-09-13 15:18:19 字數 1541 閱讀 6173

技術宅男自娛自樂的惡搞天分,做出了facemash**,對學校女生的相貌進行排名打分,結果**訪問流量過大,直接把學校網路搞癱瘓了。facemask大受歡迎的關鍵就在於zackburg**eduardo寫在窗戶上的排名公式,看電影之時就對這個排名公式非常感興趣,上網了解下,才發現這條公式就是大名鼎鼎的elo等級分制度。elo的應用非常廣泛,大部分棋模擬賽,現在流行的modb遊戲,像11平台的dota天梯系統,都是採用elo等級分。

elo等級分制度是由匈牙利裔美國物理學家elo建立的乙個衡量各類對弈活動選手水平的評分方法,是當今對弈水平評估的公認的權威方法。被廣泛應用於西洋棋、圍棋、足球等運動,以及很多網遊與電子競技產業。遊戲界比較著名的應用有: wow(魔獸世界)、dota、lol。

elo計算方法

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])

因為e值也為預估,則ea+ eb=1

#定義elo score 等級評分類

class eloscore:

#定義勝負關係 常量(不可修改)

elo_result_win = 1

elo_result_loss = -1

elo_result_tie = 0

#初始積分

elo_rating_default = 1500

#預設排名

ratinga = 0

ratingb = 0

#定義初始化方法

def __init__(self,ratinga=elo_rating_default,ratingb=elo_rating_default):

self.ratinga = ratinga

self.ratingb = ratingb

#定義閾值(k值)

def computek(self,rating):

if rating >= 2400:

return 16

elif rating >= 2100:

return 24

else:

return 36

#使用公式推算 pow() 次方冪

def computescore(self,rating1,rating2):

return 1 / (1+pow(10,(rating2-rating1)/400))

if __name__ == "__main__":

#例項化物件

eloscore = eloscore()

#列印勝率

print(eloscore.computescore(1500,1800))

#列印等級

print(eloscore.computek(1500))

print(eloscore.computek(1800))

字尾和 推公式

題意 n個數,分為k組,每組的數字的下標是連續的,則分組的代價為 組號 數字 例如3個數1,2,3,分為2組,這麼分組的代價為1 1 1 2 2 3。n,k 3e5。題解 1.假設pi是第i組的第1個數字的下標,sum i 是第i個數到第n個數求和。那麼分組的代價為1 sum p1 sum p2 2...

HDU2552 推公式 用公式

首先,看到這道題千萬不要被那個atan x 的公式嚇倒,根本用不著!兩種思路來做 第一 推導公式,過程如下 1.tan a b tan a tan b 1 tan a tan b 2.tan atan x x arctan 1 s arctan 1 u arctan 1 v 所以得1 s tan a...

HDU dice DP求期望 推公式

題意 乙個m邊形的骰子,求連續投出n個相同的面,和m個兩兩不同的面的期望次數。solution 令 f i 表示已經連續投出i個相同的面,到連續投出n個還需要的期望次數.令 g i 類似的表示第二種問題的期望次數。對於 f i 有兩種情況 投出了和前i個相同的面,轉移到了 f 那麼 f i f 1 ...