呜咕星人吧 关注:14,348贴子:901,746
  • 6回复贴,共1

开一贴,简单讲一下Elo,Glicko和GXE

取消只看楼主收藏回复

打开PS的Ladder,你除了能看到自己用于排名的分数(Elo)之外,还能看到GXE和Glicko-1这两个数值。圈内也有不少人比较信奉GXE。那么,本贴就简单科普一下包括Elo在内,这3个数值的意义,以及大概的计算方式。


IP属地:上海1楼2018-04-08 08:33回复
    那么首先要说的自然是最简单也最常用的Elo
    Elo Rating System
    Elo评分系统是由一个叫Arpad Elo的人提出的一种实力评分系统,最早用于国际象棋的排名,现在也广泛地被运用到各种游戏中。
    单拿宝可梦来说,无论是PS,PO还是实机排位,其分数排名系统都是Elo系统。
    相信大多数经常打以上三个游戏玩家,都至少有这么个感性认识:
    在这个系统里,和分数比自己高的人比赛,赢了自己能加更多的分,输了则会扣相对较少的分;反之亦然。
    例如:
    在PO中非常常见的
    差100分是+12 -20局
    差200分是+8 -24局
    那么,分数的调整具体究竟是怎么计算的呢?我们看下面两个公式:


    在这里RA和RB是A选手以及B选手原本的分数
    EA的计算结果是A选手的胜率预测
    SA表示的是比赛结果(获胜 = 1,败北 = 0)
    K则是一个系统参数,表示整个系统对于分数调整的快慢程度
    (PS中K取40,PO中K取32)
    那么,下面用一个简单的计算来更直观地展现一下Elo计算的过程
    假设A选手1700分,B选手1600分
    那么RB - RA = -100
    EA = 1 / (1 + 10 ^(-0.25)) = 0.6400
    也就是说系统预测本局A选手胜率约为64%
    如果A选手获胜,K取32,那么他的新Elo分
    RA' = 1700 + 32(1- EA) = 1700 + 32 * 0.36 = 1700 + 11.52
    如果A选手失利,那么他的新Elo分
    RA' = 1700 + 32(0 - EA) = 1700 - 32 * 0.64 = 1700 - 20.48
    也就是说,如果A选手获胜,那么他将 +11.52分,如果失利,则会扣去20.48分
    PO采用了4舍5入的方式,因此就是 +12 -20局了
    对于B选手来说,其计算结果一定和A选手是对称的,因此是+20 -12局
    在PS中,或许因为使用的不是4舍5入而是向下取整,因此比赛结束后胜方的加分有时会和负方的减分不同,但最多相差1
    理论上,一个玩家在进行了充分多的对战后,其分数会达到和其实力相匹配的数值。
    因此Elo系统除了可以评估玩家的技术水平以外,还能通过Elo分就近匹配来提升游戏体验(你会被匹配到与你实力相近的选手,从而进行一场更接近于55开的比赛)。
    在Elo系统中,一个确定的分数差对应着一个确定的胜率。比如1950对1850的胜率是64%,1200对1100的胜率也是64%。反过来看,如果A对B的胜率大约是64%,那么他们的实力评分差约100分,如果A对B的胜率约76%,那么他门的实力评分大约差200分。
    理论上,Elo系统可以用来关公战秦琼,两个不同时期的玩家,可以通过直接比较Elo分来比较其水平强弱。
    另一方面,K的取值只影像分数调整的快慢,并不影响分差和胜率的对应关系。
    因此理论上,一个PS玩家可以恬不知耻地说,我PS1600和你PO1600水平是一样的
    当然,且不说前一个结论大家是否认可,这个结论相信绝大多数人都不会认同。
    PO1600肯定比PS1600厉害得多,那么为什么会这样呢?
    首先,相信很多玩家都知道这么一个规律,人越多的Tier,Elo分就会堆得越高。这一点,其实和Elo系统的理念并不符合。Elo系统中,当系统初始分数确实后(PO,PS1000, 排位1500),一个玩家就应该根据其自身实力被定为到一个确定的分数上,这和玩家的总人数是无关的。但是现实时中,人多的分级分数堆得高是一个明显可观测到的现象。这主要有以下几个原因:
    1.PS中取消了负分,1000分玩家输了依然是1000分(因为负分玩家可以重新注册因此PS采取了这个策略),因此PS中初始分是一个底层分数,而PO中部分负分玩家会继续使用负分号,部分负分玩家会重新注册,因此PO中初始分是一个中下层分数,这都与理论上初始分应该是个中层分数不一致。
    2.最重要的,宝可梦对战中充斥着队伍克制因素和运气因素,所以Elo系统的胜率判定并不能符合上实际情况。通常表现为A对B胜率64%,B对C胜率64%,如果完全符合Elo预测A将比C高200分,但A实际对C胜率却无法达到对应的76%。这种胜率结构理论上会使得所有玩家都在一个范围相对较小的区间内分数大幅波动,但是因为有了就近匹配的存在,使得200分差的对局会少于100分差的对局更少于平分的对局,这种匹配模型下,实际的Elo分就会比完全随机匹配涨得多,而且是玩家基数越大,这个效应越严重。
    那么除此之外,Elo系统还有什么明显的缺点呢?
    比如说,一个有2000分实力的玩家刚刚进入了系统,但他也得从1000分慢慢打起。那么这个过程中,他的对手明明是在和一个2000分玩家对决,可是分数的加减却按照和低分玩家对决时计算,这显得不怎么公平。
    又比如说,一个玩家打到了一个很高的分数,那么他可以通过避战而永久维持这个分数(POPS中通过Decay解决,而排位则不解决)。
    Glicko系统其实就是在这些方面做了改进,那么我们就放在下一楼介绍。


    IP属地:上海2楼2018-04-08 08:36
    收起回复
      那么,接下来说Glicko-1这个数值
      上面那楼的Elo说明是否废话过多了?那么这一楼的Glicko和下一楼的GXE相对都会比较简短一些。
      Glicko Rating System
      Glicko评分系统是一个叫Mark Glickman发明的,本质上是对Elo系统的一种改进。其中有Glicko-1和Glicko-2,尽管在PS的源代码注释里写了这是Glicko-2,但实际上它实现的内容和它在分数栏里表明的都是Glicko-1
      (下文的Glicko均指Glicko-1)
      Glicko系统在给玩家一个评分时,同时还需要给出一个标准差(既正太分布中的均值和标准差,也可以理解为范围或者可信度)
      例如玩家A的评分是 (1600, 50),玩家B的评分是(1650, 100)
      这样,我们在评估一个刚刚进入系统的玩家时,就可以给出一个很大的标准差来避免其实际实力与暂时的分数不符的问题。而通过玩家不断地进行对战,调整其分数的同时,一定程度地减小其标准差,也既是慢慢地精确定位玩家的实际实力。
      Glicko系统中,需要设定一个实力均值以及一个最大标准差值(PS中均值为1500,最大标准差为130)
      同时,一个没有任何对局的新玩家的评分就是(1500, 130)
      另外,Glicko系统中需要顶一个周期t,所有玩家的分数都在每个周期结束后根据这个周期内的战绩统一更新。
      Glicko的具体分数更新公式如下:



      这里的RD就是上文的标准差,r则是上文的均值,Glicko的评分结果时(r, RD)这样一个二元组。
      由于Glicko的公式异常的复杂,这里就既不详细解释,也不做计算演示。但会说以下每一步的精神。
      Step1其实就是标准差RD的增加,因为随着时间的流逝,玩家的水平会发生变化,因此上一轮周期得出的分数的不确定性会增加,因此这一周期的第一步计算就是略微增大标准差RD(这里公式里的350是论文推荐值,PS中使用的是130,如上所述)
      Step2其实就是更新评分中的均值r,这里的计算很复杂,大致精神就是根据一个周期内所有对战对手的比赛结果,以及对手的(r, RD)进行计算,得出新的分数。同样对手的分数越高,自己获胜也会加得越多,另外,对手的评分不确定越高,那么分数的调整幅度就越低。
      Step3其实就是根据一个周期内所有对战的结果再次调整RD值,比赛的场次越多,RD肯定会变得越小。另外和对手的r值以及RD值也都有关系。
      大致就是这么个系统,如果一个玩家停止游戏,那么虽然他的评分r不会变,但是标识范围的RD就会慢慢增加,如果一个玩家进行了一定数量的游戏,那么其r值会相应调整,RD也会变小。如果对手的的RD较大,也即实力的确定性较差,那么本方的评分变化影响也会较小。而如果本方的RD越大,也即原本的实力确定性较差,那么本方的实力评分变化影响则会较大。可以说,这是一个自带decay的系统,decay体现在RD上。
      那么,回到PS,PS在Glicko的实现上有多处问题。
      1.PS的Glicko系统,并没有周期t的概念,也不存在定期更新分数这一说。每个玩家都是在一场battle后更新Glicko分的。结果就是每个玩家的t不同,而且每个周期内必定有且只有一场对战。
      2.上面的三步计算中的Step1在PS中并不存在,RD值并不会因为玩家不进行对战而增加,就像1中所述,如果你部对战,根本不会触发周期性的评分调整,这使得Glicko的一个重要特性消失了。(其实代码里写了如果一场对战都没有会进行Step1计算,但由于它是每对战一场才触发更新,所以对战场次总是1,也即不会进入step1计算分支)。你的RD永远不会增加,而只会慢慢减少,幸而PS设计了最小RD为25,这使得这至少不会成为一个bug。所有玩家的Glicko分在一定数量的对战后将定格为25。
      这引起的一个相对明显的问题即是,前期对局的影响会高于后期。如果一个玩家早期在低分局输了一局,则当其RD减小后,他需要付出多得多的努力才能挽回那一局的影响,而在Glicko原本的设计中,影响并不会那么大。
      那么,我们在PS的使用率数据中,可以看到1630,1760,1825这些分档。其本质就是
      1630 = 1500 + 130
      1695 = 1500 + 1.5 * 130
      1760 = 1500 + 2 * 130
      1825 = 1500 + 2.5 * 130
      这些分数其实这就是在(1500, 130)的分布下的一些常用置信区间。


      IP属地:上海3楼2018-04-08 08:38
      回复
        最后要说的就是GXE了
        其实,GXE并不是另一个独立的评分系统,GXE只是Glicko系统的一个表征值
        比如(1800, 40)和(1790, 25)这两个分,到底哪个比较厉害呢?二元组无法给出确切答案,那么PS就自己定义了一个值,把一个二元组计算成一个确定的数,那么就可以进行比较了。
        那么,接下来只需回答3个问题:
        1. GXE的意义是什么?
        GXE的定义其实是,一个给定Glicko评分(r, RD)的玩家,他对于一个随机未确定实力选手的胜率。
        在PS中,也即是,对(1500, 130)这个Glicko评分的胜率
        2. GXE是如何计算的?
        在Glicko的分数更新的Step2中,有一个E值,这个E值的定义大约是一个评分为r的玩家对于评分为(ri, RDi)的玩家的胜率。但是这个E值的胜率并不考虑本方玩家的RD值,实际上要把本方玩家的RD值考虑进去很简单。由于两个正态分布的差仍是正太分布,方差则是两个分布的方差之和。由于在这类评分系统中确定胜率的只是分数差而和分数无关,因此PS把公式中的RDi代换成Sqrt(RDi ^ 2 + RD ^ 2)即可。由于这里计算的是对于(1500, 130)的胜率,整个公式最后可以简化为

        实际上,你只要把Glicko里的两个数往公式里一代,乘100%并保留1位小数就是GXE了
        3. PS中GXE的科学程度?
        不得不说,GXE是一个相当漂亮的设计,我本人给予这个设计很高的评价。但是,由于它所基于的Glicko系统在PS的实现上有瑕疵,也因此,GXE也继承了上一楼说的所有毛病。至于有多少可信奉度就让各位自己斟酌吧。


        IP属地:上海4楼2018-04-08 08:39
        回复
          <完>


          IP属地:上海5楼2018-04-08 08:39
          回复
            这里要进行一波勘误
            4L提到PS的Glicko实现有多处问题,其实有一部分是我搞错了,那么逐条进行说明。
            1.PS的Glicko系统,并没有周期t的概念
            这个说法不对,其实PS的Glicko系统是有周期t的,t = 24小时。不过玩家的Glicko分数确实是每局对战后就更新,而不是每天统一更新。那么这个周期t起什么作用呢?在第二条中会说明。
            2.三步计算中的Step1并不存在
            这个说法不对,其实Step1是存在的。如果一个玩家一天内(一个周期)没有进行任何对战,那么就会进行Step1的计算,RD就会增加。增加的速度比较缓慢,在Step1的公式中PS的 c = 6.6775. 这是什么概念呢,就是一个RD为25的号如果整整一年不对战,那么RD会重新回到130. 在这个过程中,RD的平方每天匀速增加。
            当然这一实现和原本的Glicko还是有些区别,Glicko的规则是一个周期t后无论如何都需要进行Step1。可能官方觉得这种实现会使得GXE出现明显的decay的现象,对玩家不友好(现在则是非常不明显的decay并且只要每天对战就不会发生)。因此,如果一个号的GXE看上去已经废了,那么其实先放置一段时间还是可以挽救的。
            综合以上两点,其实PS的Glicko系统比我想象中要好上不少。
            <完>


            IP属地:上海17楼2018-04-17 02:51
            回复


              IP属地:上海来自iPhone客户端22楼2022-08-04 12:32
              回复