ELO匹配系统实际应用

    Elo rating system,是由美籍物理教授Arpad Elo发明用于计算在大型连续对抗比赛中反应参赛者水平的一种方法。最初是使用在国际象棋中,后续被一些网游与电子竞技产业推广使用,游戏界比较著名的应用有:WOW(魔兽世界)11平台DOTA天梯DOTA2LOL(英雄联盟)CSGO(反恐精英:全球攻势)

简单实现的代码 – 戳这里

ELO算法核心

总体来说,玩家的ELO值取决于他的对手强弱与胜负关系(其实这是废话,但是又不得不说)。那么量化的标准如下:

RA – 玩家A的积分    RB – 玩家B的积分

那么A对B的胜率:

ELO-EA1

B对A的胜率:

ELO-EB1

或者我们引用中间变量ELO-QAELO-QB,那么有:

ELO-EA2ELO-EB2

我们可以得到ELO-EA+EB,A玩家与B玩家胜率和为1,那么根据胜率比赛有且只有三种结果胜、负、平(平局不是必须的,根据实际需要)。可用SA= 1表示胜、0表示负、0.5表示平局这三种情况的参数取值。

最后对于A玩家计算积分变化的公式:

RA

其中K值是一个常量系数,按照国际象棋里的标准,K值对于大师选手为16,对于一般选手是32,后文会详细说明K值的具体作用。

 

ELO算法演算

我们假设RA – 1500    RB – 1800

那么EA0.15 ,我们取K = 32。若A击败了B,代入公式:

RA = 1500 + 32(1.0 – 0.195) = 1527

RB = 1800 + 32(0.0 – 0.805) = 1773

最终玩家A的积分为1527(1500+27),玩家B的积分为1773(1800-27)

 

ELO关于K值的选取

K值的大小直接关系到一局游戏结束,根据胜负关系计算出的积分变化值。

简单举例就是,在上节的演算中,若= 16,那么最终结果则是RA = 1514,RB = 1786。

那么K值如何选取?这里节选一段国际象棋的实例:

= 40,未满18周岁新加入的选手,并且参加比赛次数小于30场,积分低于2300。

= 20,积分一直低于2400。

= 10,超过30场比赛,并且积分高于2400。

先简单说明一下这里提及“积分”的概念。

一般来说,每种类型的比赛都会附有一个初始分,比如11对战平台DOTA天梯初始分1100,魔兽世界早期竞技场初始分1500,DOTA2,LOL,CSGO的匹配估分。

为了满足所有参与比赛选手积分符合标准正态分布的特性,即低分段与高分段玩家相对较少,大量玩家集中在中层保证竞争性。

(我个人理解为一句话:好的游戏竞技或者体育竞技,一般都是易于上手,难于精通,所以低高分玩家相对较少,中层玩家较多)

而且积分能有效量化一个选手的实力,对评估排名是非常有利。

回到正题,K值如何来。根据比赛的实际需要来制定,举2个自己熟悉的例子:(感官猜测数据分析,若有不对之处请见谅)

魔兽世界:早期竞技场的K值应该在32(超过2200可能在16),队伍的积分即是匹配分,不太高的K值导致积分收敛性强,即积分2500+的积分已经排到参与人数前1%。积分的最高值更加取决参与人数。新版本的竞技场匹配分与实际积分已经分离,这样做主要是为了队伍更好的定位(高分队用更少的场次进入到自己的积分段,冲击更高的分段)。
DOTA2:大体猜测采用的是均衡的K值,通过估分系统玩家的起始积分在(2500-4500)附近,每场比赛结束默认分差为25(赢了加25分,输了扣25分)。比如每次匹配都是实力一致的选手,即胜率0.5,那么K=50(实际情况会复杂的多,多人组队,跨积分段匹配,低分抱大腿之类)。按现在玩家数量7000分(2015年9月27日)可以排到前500,再过一年随着玩家数量的增多,7000分可能只能排到前1000甚至2000。

所以K值的选取取决于,这个比赛需要什么样的方式来统计选手的积分,根据赛制、参与选手数量之类的参数微调。大多数情况下,这是只是一个参考估值,而非精确值。

 

分母中的400

注意公式ELO-QA中的分母400,为何这里是400而不是200、100或者1000?

实际计算可以参考这里,公式演算出400的由来。总体来说400是一个平衡的、万金油的值、让多数玩家积分保持标准正态分布的值….

但是这里不想用大量复杂的数学公式来说400的由来,直接说说它有什么用 – 影响着胜负概率的计算

 分差 概率(分母200) 概率(分母400) 概率(分母800)
 1  0.497122  0.498561  0.499280
 2  0.494244  0.497122  0.498561
 3  0.491366  0.495683  0.497841
 4  0.488489  0.494244  0.497122
 5  0.485613  0.492805  0.496402
 6  0.482737  0.491366  0.495683
 7  0.479863  0.489928  0.494963
 8  0.476990  0.488489  0.494244
 9  0.474119  0.487051  0.493524
 10  0.471249  0.485613  0.492805

结果就是,同样的积分差值,越高的分母,计算出的积分低获胜概率越高。更科学点的解释就是,假如2名选手的积分差值在20分,那么根据比赛规则与内容,这20分实际的胜率影响是多少?似乎这里又与K值相关,又与比赛本身设定相关,更加影响标准正态分布的初衷。当K值相同的情况下,越高的分母,越低的积分变化

 

一些关于ELO杂谈

一般来说K值32,分母400可以满足80%的需求,对于精益求精的人,个性化根据ELO改变为自己需要的数值与用法也是可行的,并且相对容易的。

对于ELO初始积分值的选择,现在目前已知的:定值,参与匹配评级,根据选手战力估值(过往战绩,游戏中的战力值之类),选择合适才是最好。

想有更大的积分区间,请扩大K值,想让用户积分分布的更科学(两头小,中间大,满足易于上手,难于精通),请让分母在400附近浮动。

可以增加权重值(简单加减法关系),用于平衡积分获取。最好的例子是国际象棋中的先手优势。

简单实现的代码 – 戳这里

(全文结束)

 


转载文章请注明出处:漫漫路 - lanindex.com

Leave a Comment

Your email address will not be published.