当我们谈论猪队友时,更应该谈论的是排位系统

来自:寒食君(微信号:program_hacker),作者:寒食君i


1

《笑傲江湖》中有一段经典的对白。令狐冲:“我想要退出江湖,从此不问江湖之事。”任我行回答:“这个世界上,有人的地方就有江湖,你要怎么退出。”

在大群体中,等级是永远存在的。有人身处在高处,有人身在低处,由此产生了各种各样的竞争与多种多样的歧视,难以否认,攀比是进步的源动力之一,在游戏世界中,亦是如此。

很久以前和一个朋友聊到游戏,他说:“天梯机制真是竞技游戏的一大杀器,它会让你愿意不断为之投入时间。”当时我很少玩竞技游戏,对这句话不以为意,后来当我在一款游戏的天梯系统中连续鏖战一整天时,我理解了他。

人与自己之间欲望的对抗,人与人之间的竞争与攀比是永无止境的——当你达到了预期目标,你就会想要得到更多,当你失去了一些,你会想要奋力挽回;当身边的人达到了你未能达到的,你会想要竭力追赶。

事实上,一件事,只要它能够提供一个相互比较的标准,人们就会愿意在上面花费大量精力去一争高下。

出于这一点考虑,为了让玩家能在游戏中投入更多的时间,氪更多的金,当前市面上的游戏,甭管有没有必要,都愿意推出一套天梯系统。在一些主流电竞游戏里,比如CSGO、DOTA、LOL。玩家们把这套系统奉为圭臬,因为这是一匡天下的准则,一切爱恨情仇、炫耀荣光、叫嚣谩骂都将缘起于此。除此之外,在一些本身没有强竞技性的游戏里,天梯系统也是大行其道,比如之前的“球球大作战”、“贪吃蛇大作战”。

2

回到竞技游戏本身来看,玩家需要一种实力评估的方式。那么,如何判断判定一位玩家的竞技实力?

根据游戏内容出一张考卷,以此来测试玩家对游戏的理解?这也太无聊了吧,玩家数量一定会迅速下跌;比谁充值的金额更大?不行,这毕竟是竞技游戏,不是氪金游戏;获取玩家的游戏时长,通过在线时间的长短来反映玩家水平?这显然不行,否则职业赛可能都是一群老年人在打了。

在考虑了诸多标准后,游戏还是将目光锁定在了“胜负”这一较为客观的评估标准上。一来,成王败寇,不服不行;二来,玩家对胜利有着天然的渴望。

因此,以“胜负”为基础的天梯系统应运而生。游戏采用积分制,所有通过胜利来获取积分,但是失败会扣除相应积分。将积分划分为段位,并以一些称号来命名,通过段位名称来评判玩家的水平。

这么一想,好像十分简洁方便,事情也水到渠成了。但是,真的有这么简单吗?比如:

  1. 每局游戏的积分不应该是固定的,因为当你战胜了比你强的选手你应该被奖励更多的积分,同理,输给了比你弱的选手,也应该扣除更多的积分,但每局得失的积分会有一个上限。

  2. 有些老玩家喜欢玩小号,当新手遇到这些用户,很大可能会被虐待。为了对新手友好,需要尽量减少这些情况。

  3. 和实力相当的人一起游戏才会有更好的体验,赢得太容易或输得太惨烈都难以给玩家带来真正的乐趣,所以匹配系统需要尽量找到和你同一水平的队友和对手。

  4. 如果为了追求绝对的精准匹配,系统可能需要花费大量的时间计算,这也往往造成玩家等待时间太长,需要优化这种体验。

  5. ... ...

3

上述第一个问题是最主要的,涉及到一个比较通用且核心的算法:Elo rating system。

很多同学包括我,一看到算法,习惯性就有点懵了。那么,先来聊一则趣闻,扎克伯格成名之前,在学校里被女朋友甩了,于是忿忿之下,搭建了facemash.com,用于评选全哈佛“最美女生”,即先从校园系统中抓取所有女生照片,再随机显示两张,让用户评选,以此选出评分最高的女生。facemash用到了什么算法,就是这个Elo排名算法。

Elo rating system最早用于职业象棋比赛,后来广泛用于各种职业体育赛事,渐渐地也适用于电竞游戏的天梯系统中。

Elo rating system有一个前提:参赛选手在每次比赛中的表现成正态分布,简单来说,一位玩家的状态和发挥会有波动,但是绝对实力是稳定的。玩家通过对战不断来修正这个实力值,即玩家的天梯积分。

根据公式,假设a和b是两位玩家,R代表玩家当前的积分,由此可以计算出E,E代表预期选手获胜的期望值。

在获取E之后,可以结合单局得分上限K,以及实际胜负值S(胜=1,负=0)通过以下的公式计算得出比赛之后的玩家积分R'。

看到这儿,有的同学可能会有点混乱,没关系,举一个例子来解释说明,你就会一目了然。

根据DOTA的段位积分表,我们假设现在有AB两支队伍开始对战,A队平均段位是传奇一星(3500分),B队的平均段位是传奇三星(3780分),假设DOTA的单局得分上限K是32分。

预估A队玩家的胜负期望值为:Ea = 1/(1+10^[(3780-3500)/400])≈0.16 预估A队玩家的胜负期望值为:Eb = 1/(1+10^[(3780-3500)/400])≈0.84

假设A队获胜,A队玩家最终得分为 R'a = 3500+ 32*(1-0.16) = 3500+26= 3526,A队玩家赢26分,B队玩家输26分。

假设B队获胜,B队玩家最终得分为 R'b = 3500+ 32*(1-0.84) = 3780+5= 3785,B队玩家赢5分,A队玩家输5分。

当然,游戏本身会对积分的定义以及计算进行符合自身环境的调整,不过也由此可见,Elo rating system确实适合用于竞技比赛中,双方实力有所差距时的积分计算。

4

再来谈谈几个剩余的问题。

大多数玩家肯定都不喜欢被完虐的感觉(不排除有特别癖好的人),所以大部分的游戏都会在开启排位权限之前,有一段过渡的新手期。比如英雄联盟需要玩家达到30级以及拥有一定数量的英雄才能进行排位。

对于真正的新手玩家,这段时间可以充分熟悉游戏;对于装萌新想要虐菜的老鸟,这段时间后台会计算玩家游戏的隐藏分,一旦达到排位的条件,系统将会为这些玩家匹配实力更强的玩家。

同时,为了游戏更加平衡,也减轻天梯系统的计算压力,游戏将会做出一些限制,比如相差两个大段位的玩家无法一起进行排位赛。(很好,限制了一群嘤嘤嘤的带妹玩家)天梯系统也有一些弹性的策略,比如,为了不让玩家等待太长的时间,会在一个可调整的范围内进行快速匹配,这也是为什么有时候,很容易出现躺赢、躺输的局面。

天梯系统中,大部分的问题都可以通过优化来解决,但是有一个问题是始终难以根治的,那就是:代练。他们的出现会对整个系统的平衡性造成破坏,所以在崇尚竞技的游戏中,代练是一种非常恶劣的行为,除了满足丝毫的虚荣心,于人于己都没有什么好处。

5

这段时间,我在游戏娱乐上花了很多时间,这是我最近公众号更新频率下滑的一个原因,同时也消磨了我的意志。天梯系统究竟是如何支配我的?所以,在一番调查之后,我写下了此文。

文章开头,我引用的那段对白,其实也适用于很多现在的大学宿舍,也许你也听到过这样的对话:

“我要删了这个垃圾游戏,耽误学习,毁我青春!”

“大家都在等你开黑呢,上分重要。”

推荐↓↓↓
算法与数据结构
上一篇:如何只用2GB内存从20/40/80亿个整数中找到出现次数最多的数 下一篇:动画演示深度优先算法搜寻逃出迷宫的路径