4

使用python3.7.2 实现大名鼎鼎的Elo Score等级分制度

 1 year ago
source link: https://v3u.cn/a_id_55
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

使用python3.7.2 实现大名鼎鼎的Elo Score等级分制度

首页 - Python/2019-03-25
使用python3.7.2 实现大名鼎鼎的Elo Score等级分制度

  在年度影片《社交网络》中,影片开场,马克扎克伯克和他的女朋友在酒馆里因为琐事分手,气急败坏的他回到了宿舍,在舍友的鼓励和帮助下,充分发挥了作为技术天才的动手能力,做出了Facemash网站,对大学女生的相貌进行分级打分,结果网站访问流量过大,直接把大学网络都搞宕机了。而Facemask就是著名的FaceBook的前身,Facemask大受欢迎的关键就在于扎克伯格的同学爱德华多(他也是facebook的联合创始人之一)写在窗户上的排名公式

  
20190325080344_56934.jpg
  这个公式就是鼎鼎有名的ELO等级分制度
  ELO的应用非常广泛,大部分棋类比赛,现在流行的MODB游戏,像11平台的DOTA天梯系统,以及炉石传说匹配对手系统,都是采用ELO等级分。
  ELO等级分制度是由匈牙利裔美国物理学家Elo创建的一个衡量各类对弈活动选手水平的评分方法,是当今对弈水平评估的公认的权威方法。被广泛应用于国际象棋、围棋、足球等运动,以及很多网游与电子竞技产业。游戏界比较著名的应用有: Fifa online,炉石传说、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
  这里用python来实现以下Elo score
  
#Ra:A玩家当前的积分 
#Rb:B玩家当前的积分

#ea = 1 / 1 + 10 的方 (rb-ra) / 400

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

    #使用公式推算
    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))

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK