【数据帝】激战2世界战场WvW分数计算公式详解
一、前言
看到很多人在问世界战场的排名机制,其实A社在很早之前就已经给出了服务器评分的详细计算方法,目前A社使用的是从2013年5月开始沿用的包含随机变量在内的方案,也就是国服代理空中网在2014年8月4日官网里给出的评分公式:
匹配评分=服务器评分+ Rand(-1, 1)*服务器潜在评分变量
服务器潜在评分变量=基础变量+偏差变量*服务器偏差百分比值
其中“基础变量”、“服务器偏差百分比值”这两个是空中网人工配置的变量(所谓的“人品分”),而“服务器评分”、“偏差变量”是系统计算得出的硬指标,这才是评分系统中的占比最大的重点部分,可惜空中网没有给出详细介绍,在这个贴子里我就来稍微说明一下。
下面是一些重点相关链接,特别是Glicko算法将涉及到一些高等数学的知识,有兴趣的朋友可以去看看。这个帖子中将尽量用简单的语言给出结论,如果你还是觉得头疼,可以跳转到最后部分的总结。
A社红贴:战场评分机制:
https://forum-en.guildwars2.com/forum/wuv/wuv/The-math-behind-WvW-ratings
A社红贴:战场评分引入随机变量
https://www.guildwars2.com/en/news/big-changes-coming-to-wvw-matchups
Glicko算法维基百科:
http://en.wikipedia.org/wiki/Glicko_rating_system
Glicko-2算法实例演示:
http://www.glicko.net/glicko/glicko2.pdf
二、Glicko-2算法的简单介绍
激战2的世界战场排名算法基于Glicko-2,这是一个很出名的第三方算法模型,被广泛用于各类游戏内的天梯排名系统,要了解激战2的世界排名算法,就必须先了解Glicko-2模型,下面是Glicko-2算法的基本步骤:
晕了没?维基百科列举的只是最基本的算法公式,有兴趣去了解具体应用的童鞋可以参考上面给出的Glicko-2算法实例,这里我们直接说结论,假设现在有两个计算对象X和Y:
1、在Glicko-2算法里每一个对象都有着“排名分”、“排名分偏差值”、“排名分波动”三个基本属性,要注意这里的“排名分”不等于“排名”,激战2就是将各个服务器通过计算所得的排名分(也就是服务器评分)从高到低排位得出服务器名次,然后再每三个服务器分为一组;
2、Glicko-2算法模拟的是1v1场景,并对每个计算对象单独计算,即在X与Y的对战中将出现X vs Y与Y vs X两个计算过程,前者计算出X的排名分,后者计算出Y的排名分;
3、在每一次计算中,Glicko-2模型会参考X与Y上一次的“排名分”、“排名分偏差值”,以及主计算对象的“排名分波动”,根据比赛的结果来计算新的排名分、排名分偏差值以及排名分波动。假如对象是第一次参加计算,则默认排名分=1500、排名分偏差值=350、排名分波动=0.06;
4、“排名分波动”是通过对象历次的排名成绩迭代计算得来;
了解了这些最基本内容后可以继续往下看:
三、A社对Glicko-2算法的改动
首先,Glicko-2算法中有一个常量tau,这是一个0.3-1.2之间的数值,需要游戏商根据自身游戏的特点进行设置,A社工程师已经在红贴中指出,《激战2》在Glicko-2模型里的tau值为0.6。
由于Glicko-2模型模拟的是1v1的场景,A社将三个服务器之间的比赛拆解成六场1v1的竞争,这样就能适用于Glicko-2算法。假设有服务器A/B/C,则这六场竞争分别是A vs B、A vs C,B vs A、B vs C,C vs A、C vs B,每一周的世界战场,每个服务器相当于与另外两个服务器各进行一场比赛,产生两次计算过程。
Glicko-2模型会根据比赛结果计算新的排名分,在原有的Glicko-2算法中,比赛结果被分为失败、平手、胜利三种情况,分别定义:失败=0、平手=0.5、胜利=1.0。在激战2中A社对比赛结果进行了细化,通过结算时候的战场分数来计算:假设现在有A vs B这次比赛(拆解出来的六场比赛中的其中一场),A的最终战场得分为wAScore,B的最终战场得分为wBScore:
wAPercent = wAScore / (wAScore + wBScore)
wAGlickoScore = (sin((wAPercent – 0.5) *Pi) + 1) * 0.5
这个公式中先计算服务器A在这次比赛中的相对分数wAPercent,这是一个[0,1]区间内的数值,再将这个数值导入正弦函数,得出wAGlickoScore,此时wAGlickoScore的数值同样处于[0,1]区间,将它作为比赛结果代入Glicko-2模型,就能得出A服务器的战场评分。
四、实例验证演示
在网上你可以找到许多Glicko-2模型计算工具,当然,前提是你要懂得翻?墙,为了方便演示,这里我下载了一个Excel版本的Glicko-2模型;
以美服13年3月22日、29日两周的战场数据为例,这个数据来自A社红贴。(在A社官方wvw数据页面上线之前,A社每周都有工作人员将当周的战场评分数据公布在论坛,现在A社官方wvw数据页面上线了,却没有历史查找功能,因此我们退而求其次在论坛搜索A社红贴数据进行验证)
A社红贴地址:
https://forum-en.guildwars2.com/forum/wuv/wuv/Updated-World-Ratings-Mar-22
https://forum-en.guildwars2.com/forum/wuv/wuv/Updated-World-Ratings-Mar-29
A社给出的这两个战场数据没有注明当天战场得分,没关系,我们可以在第三方网站上得到:mos.millenium.org这个网站提供了激战2历届战场分数查询:
下面我们选取美服T1服务器Jade Quarry的数据进行验证,在3月23-30日那一周,T1三个服务器分别为:Jade Quary、Blackgate、Sanctum of Rall,我们将其标记为A、B、C,得分分别是:258940、171535、184245,首先将这些分数输入excel计算得出A vs B、A vs C对应的wAGlickoScore,记下这两个数字,分别是0.656779829、0.630831165。
在Glicko-2模型计算页面,我们设定tau值为0.6,然后回到数据页,首先输入Jade Quarry服务器上周(3月16-23日)的排名分、偏差值及波动值,然后填写对手名称、对手排名分、对手偏差值,这些都可以在上周(3月16-23日)的数据中找到,最后填写上一步计算得出的两个比赛结果,得出的“New Rating”就是Jade Quarry服务器在(3月23-30日)这一周的新排名分。
计算结果Jade Quarry服务器新的服务器评分是2233.994061,偏差值184.89,波动值0.853342,与A社在3月29日公布的服务器分数相符,证明A社确实就是按照这个算法在为服务器评分。
=====================================================================
五:总结
2013年5月之后,A社在上面原有算法的基础上增加了随机分,避免了战场出现“对手永远不变”的情况。在新的评分方式机制中,固定分数依然占据总分数的90%以上,了解了激战2战场算法之后,我们可以得到以下结论:
1、服务器评分是根据每周服务器战场分数计算得出的硬指标,这个得分是累积叠加的,并且会计算数据波动值,反映的是服务器在一段时间内的稳定战场实力;
2、对手的实力会影响自身评分,简单点说,实力较弱的服务器打赢实力较强的服务器,会比实力较强的战场打赢实力较弱的服务器获得更多的分数;
3、结合第二点,当较低梯度的服务器被“随机”到与较高梯度服务器对决,这对低梯度服务器而言是个很好的机会,只要打赢任意一家高梯度服务器,即便由于基础评分较低下周依然会返回低梯度,总分上也会有不少的增长;
4、任何一个服务器都是实实在在的1v2,另外两个服务器的战场成绩最终都将影响你自己的排名得分,因此如果想迅速获得高分的话就要打压另外两个服务器——这不是赢一次两次就能解决的问题,再次强调,Glicko-2模型会计算波动值,并且服务器评分数累积评分,至少要让系统看到你的实力,把服务器评分这个坑填起来。有兴趣的朋友可以看看前面的美服评分数据,了解一下各个梯度之间的评分差距大概有多大;
5、关于战场分数收益的问题,由于战场胜负采用正弦函数计算,观察曲线函数斜率可知,当两服务器之间分数差距到了一定程度,得分收益的增长幅度会变小。举个例子,假设一个服务器拿了40W分,那么对手拿10000分与拿0分对他的影响已经很小。记住这个公式:A/(A+B),当数值大约在0.2-0.8之间的时候,战场的收益是最直接的,几乎呈支线增长;
6、最后还是要吐槽一下,为什么国服不能像美服欧服那样给出战场详细分数?