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

晚上没事打csgo,被外挂打自闭,然后就研究了一下csgo的升级机制
看到csdn上有好多帖子,找到了个py代码实现 特此转载,侵删!!

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

ELO的应用非常广泛,大部分棋类比赛,现在流行的MODB游戏,像11平台的DOTA天梯系统,以及炉石传说匹配对手系统,都是采用ELO等级分。

ELO等级分制度是由匈牙利裔美国物理学家Elo创建的一个衡量各类对弈活动选手水平的评分方法,是当今对弈水平评估的公认的权威方法。被广泛应用于国际象棋、围棋、足球等运动,以及很多网游与电子竞技产业。游戏界比较著名的应用有: Fifa online,炉石传说、DOTA、LOL。

计分方法
假设棋手A和B的当前等级分分别为R_A和R_B,则按Logistic distribution A对B的胜率期望值当为

在这里插入图片描述
类似B对A的胜率为

在这里插入图片描述
假如一位棋手在比赛中的真实得分S_A(胜=1分,和=0.5分,负=0分)和他的胜率期望值E_A不同,则他的等级分要作相应的调整。具体的数学公式为


公式中在这里插入图片描述R_A^\prime分别为棋手调整前后的等级分。在大师级比赛中K通常为16。

例如,棋手A等级分为1613,与等级分为1573的棋手B战平。若K取32,则A的胜率期望值为\frac 在这里插入图片描述,约为0.5573,因而A的新等级分为1613 + 32 · (0.5 − 0.5573) = 1611.166

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

#定义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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值