Elo-score等级公式算法推演胜率

版权声明:禁止盗版! https://blog.csdn.net/weixin_44266650/article/details/88796776

技术宅男自娱自乐的恶搞天分,做出了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))

猜你喜欢

转载自blog.csdn.net/weixin_44266650/article/details/88796776