首页 > 代码库 > lol匹配算法
lol匹配算法
这是Riot的Design Director Tom Cadwell专门为中国玩家写的解说匹配系统工作原理的帖子。
同一时候为了让大家更好的理解匹配系统,假设您认为您遇到了特别不公平的匹配,请回复游戏開始时间和比赛结束截图,我们会调查该局匹配是怎样完毕的,坑爹的玩家是为何添?到这一局的。
非常多人抱怨看不懂,我来个精简比喻版的:
有个篮球联盟,有无数个球员和大概20个等级的联赛。
全部球员都是10级联赛的成员,他们自由组合互相比赛,赢的人,升级到11级联赛,输的人降到9级联赛。
然后每一个等级联赛再次开赛,又有的人升级有的人降级,终于这20级的联赛都有球员參加。
我们的大量的数据证明,一个球员的水平,会让其稳定在大约3个联赛之间,也就是科比是參加20级联赛的,且当他和4个17级联赛的人组队,基本不会输给17级联赛的人。且,把科比降到10级联赛,他会轻松的在20局之内回到20级。
理想情况下,球员都是在跟自己相同经历的球员玩,一个中等水平玩家全然不会匹配到科比,科比也不会匹配到刚玩游戏的玩家。
其实匹配系统的分级会比这个更复杂更智能,採用的是国际象棋所採用的elo系统。
再添加?个FAQ:
Q:系统为了保持胜率50%,是否会在我连胜后有益塞给我一些菜队友让我输?
A:系统的目的不是为了保持你的胜率,而是让水平差点儿相同的玩家一起玩。当你和水平差点儿相同的玩家一起玩时胜率会趋近50%,所以,系统是不会有益坑你的。
Q:我才100胜,为什么系统老匹配600胜的玩家给我?
A:胜场并不能反应一个人的水平。假设把匹配系统比作跑步,练习了3年才干跑进11秒的和第一次就跑进11秒的人我们是同等看待的。匹配系统基于水平而不是基于经验。
Q:我胜率60%,为什么匹配40%胜率的队友、60%胜率的对手给我?
A:胜率也不能反映水平。匹配系统不但要看你是否赢了,也要看你赢了谁。就像war3的sky在职业圈胜率事实上并不高,可是虐一般的玩家胜率是100%。相同水平的玩家,会由于随机匹配到对手的关系,胜率会40%~60%不等。
Q:你说水平差点儿相同,为什么我认为他们这么菜?
A:匹配系统提供的是公平的机会,而未必是你理想的结果。我们能追求系统公正,可是无法预測玩家单局内的表现。
系统100%匹配曼联对阵皇马,可是不能保证某一次曼联不会4:0碾压皇马,且在这局中,C罗表现yts,全然就在拖后腿。或者曼联也可能连胜皇马3次之类的。可是,系统仅仅会把曼联去匹配皇马而不会出现曼联对阵中超深圳队。详细到某一局是皇马赢还是曼联赢取决于那一场的排兵布阵,临场发挥,以及战术意图。
假设这个坑爹玩家真的不在你的水平等级,他就会一直坑队友,一直输,等级一直减少,这样会让他离开你的匹配范围,让他不再能够和你匹配到。依据我们的数据,玩家的elo基本是稳定在较小范围内的。这也就是深圳队和皇马的差距,也是中国国家队能赢法国队,确永远打不进世界杯的理由。
系统没办法给你完美队友,玩家会由于非常多原因发挥不好:使用不会的英雄、打了不想打的位置、玩法风格和队友不够搭配,前期不利想挂机等等。可是你和对方玩家遇到这样的情况的概率是同样的,系统并不会偏袒不论什么一方。所以想要完美队友,请和朋友组队,只是那样你也会碰见更厉害的对手。
假设大家在怎样鉴定玩家水平上有好的想法欢迎提,可是假设想要通过抱怨玩家游戏内表现来证明匹配系统不公平,就是在和风车决斗了。每一个人的看法都不一样的,系统推断他和你在遇到相同的队友和对手时候,胜率差点儿相同,这也是我们眼下能做到最好的了。
下面是文章的正文。
概述:
匹配系统的目的例如以下,优先级从高到低:
1、 保护新手不被有经验的玩家虐;让高手局中没有新手。
2、 创造竞技和公平的游戏对局,使玩家的游戏乐趣最大化。
3、 无需等待太久就能找到对手进入游戏。
匹配系统尽其所能的匹配水平接近的玩家,玩家的水平是来自他们在此之前赢了谁以及他们对手的水平。当你战胜对手,系统会觉得你更强,当你输给对手,系统会觉得你更弱。尽管这对于某一局游戏并非那么的公平,可是长期来看,对于多局游戏是相当的公平:由于好的玩家总会对游戏结果造成正面的、积极的影响。我们使用了这样一个方法測试:给水平高的玩家一个新帐号,然后看他们游戏数局后的结果。我们通过大量的測试来证明了我们的想法。
而且,匹配系统知道预先组队的玩家有一些优势,假设你是预先组队,会给你一些更强的玩家。我们用一些很巧妙的数学方法来解决预先组队的玩家VS solo玩家的匹配公平问题。我甚至让两个数学博士来验证,他们都说给力!
匹配是怎么完毕的?
首先,系统将你放进适当的匹配池里——依据游戏模式(匹配模式、排位solo/双人、排位5人、其它模式等等)
然后,系统会尝试将匹配池里的人分到更细的匹配池里——5人组队 VS 5人组队,低等级新手 vs 其它一些低等级新手,如此这般。
当你在匹配池中,系统会開始尝试找到合适的配对,目标是撮合一个两方获胜机会都为50%的游戏。
第1步:确定你的实力:
*假设你是solo,就直接使用你的个人匹配分(也就是elo值,匹配模式和排位赛有不同的匹配分)
*假设你是预先组队的,你的匹配分是你队伍的平均分,而且会依据你组队的规模略微提高一些,这样才干保证你匹配到更强的对手来抵消你组队的优势。我和一个计算机生物学的博士(Computational Biology Ph.D)通过研究成百上千的游戏结果,计算出了预先组队究竟有多大的优势。我们还在幕后做了一些其它调整,比方新手和高玩组队,比方某地图上蓝队和紫队的玩家哪个更有优势,诸如此类。
第2步:确定你合适的对手:
*首先,系统会基于你的elo值,给你匹配跟你很相近的玩家。终于,系统会放宽匹配的条件,给你一些不是那么完美的匹配,由于你肯定也不想永远匹配不到人。
*新手会得到一些特殊的保护,通常新手仅仅会匹配到其它新手(在成熟的server里,这个比例达到了99%+。除非这个新手和一个高级玩家朋友预先组队)
第3步:确定匹配:
*终于,系统会匹配10个大体上同水平、同等级的玩家,促成一个游戏。
*系统会尝试平衡这个队伍,尽量使两方的获胜机会都为50%。在绝大多数时间,误差会在3%之内——类似50/50,49/51,48/52。实际上的获胜机会会有一点点区别(会在Q&A里面回答这个问题),可是我们的研究标明,在绝大多数情况下,这实际上是一个很精确的预測。
长期来讲,我的匹配分(Elo值)是怎样被測量的?
我们使用了一个改动过的ELO系统。ELO系统的基本要点通过使用数学比較两个人的积分,来预測两人的比赛结果——类似“A和B比赛数局,A会赢掉75%的局”。
然后,比赛结果出来了。假设你赢了,你会加分,假设你输了,你会被扣分。假设你是“出人意料”的赢了(系统觉得你输的可能性更大),你会赢得很多其它的分数。额外的,假设你是一个新玩家,你会加分减分更快,以便于你能够高速的进入到你的水平等级。长期来看,这意味着好的玩家会得到高的匹配分,由于他们总是超过系统的预期,他们会不断加分直到系统能够正确的预測他们的胜率。
我们改动这个系统给团队比赛使用,基本概念是:基于该团队的全部玩家,得到一个团队ELO值。如果你的队伍胜利,系统会如果该队伍的全部玩家都要比系统推測的“更强”,而且加分。尽管有一些问题,可是整体上来讲是有效的,特别是玩家预先组队的时候。
举例,本人在北美的server上有2000的普通匹配模式elo。假设我建一个小号,就算没有天赋和符文,我打到8级的时候就已经有1800elo了。这个系统并不完美,可是确实可以让玩家高速的接近自己水平所在的位置。
当你才開始玩的时候,我们也对ELO做一些微调,让你更快的进入你水平所在的位置。
*我们有大量的,有优先级的方法来鉴定一个玩家,相比一个标准的新玩家是否更有技巧,更猛。假设发现是的,我们会在幕后提高他的elo一个档次。
*我们相同也会分辨真的菜鸟新手。
*提升等级也会极大的提高你的elo值。这个也将帮助系统将30级满级的召唤师和低等级的召唤师区分开来
假设你想知道ELO系统的理论,以及很多其它细节,你能够看看这:
http://en.wikipedia.org/wiki/Elo_rating_system
http://zh.wikipedia.org/wiki/ELO
呃,等等,你是怎么处理组队玩家 vs solo(单排)玩家的?
我们大多数情况下,会通过将5人组队的队伍匹配给另外一个5人组队的队伍来避免这样的情况的发生(差点儿是全部情况下)。
对于“部分”组队,我们进行了大量的研究,发现优势并没有想象的那么大,所以我们也会把他们混到solo(单排)的玩家里。我们发现有大量的因素会影响到组队优势的大小:从预先组队的规模(比方2、3、4、5组队),到组队玩家的水平,到高玩带菜鸟的组合,到玩家水平不同而导致的情况不同,以及其它的一些必须考虑到的微妙因素。这个要比一些我们曾见过的点对点算法-将随意的统计数据杂糅在一起推測分数-要可靠的多
发现这些优势,我们就知道对于预先组队的队伍,须要提高多少elo值,来达成一个公平的匹配,确定一个适当的,在数学上合理的调整。结果在有些情况下很令人吃惊(同一时候会校正统计数据)。
尽管我们不会给出精确的数值,由于这是商业机密,可是我们能够告诉您:
*5人组队仅仅是比5个路人稍强。
*部分组队仅仅是比5个路人略强。
*菜鸟5人组队并不会带来太大的优势,可是高玩组队会有非常大的优势。
*团队实力方差高的队伍,会例如差低的队伍更强。(方差简单来说,是在平均值同样的情况下反应各个元素的大小差异,方差大表示差异大,高方差的队伍类似高玩带低玩,低方差的队伍各个队员实力接近。)
*这说明了大体上,高水平玩家的Carry作用(能够理解为带领或者大腿),比低水平玩家的送人头作用(feeder)要强力。
好吧…那为什么要把预先组队的玩家和非组队玩家匹配到一起?
这是一些原因:
*这会帮助系统更快的找到适合你的匹配分,让系统更快的给你公平的匹配。这个的工作原理是,假设你组队,会减低运气所带来的成分,假设你单排,你的队友的好坏将对你输赢的影响更大。假设你预先组队,你会和你水平差点儿相同的玩家组成队伍,你随机遇到猛男/坑爹队友几率会更小。由于游戏的结果很多其它来自你和水平相近的朋友的表现,而不是随机因素,所以你的匹配分会更快的到达精确的值。
*我们希望玩家能够和自己的朋友一起玩,由于这样会让他们玩的更有乐趣。你也不可能为5v5的游戏设置单独的2人匹配池或者3人匹配池,你须要组合他们来让系统工作。我们选择包括5人组队,由于这很有乐趣。假设我们以后有足够大的匹配池,我们可能会将5人组队和部分组队区分开来,可是数据告诉我们,这基本不会提升匹配的公平程度,两者的效果基本同样。
其它一些常见的问题:
Q:为什么不添?一些其它的细节,类似击杀数等等来确定我的匹配分?
A:由于这是有偏差的,并且由于很难以给击杀数这个数值来评分,你使用一个gank英雄的时候(类似老鼠和易大师),要杀多少人才干算是好的呢?并且这会让好的辅助玩家很吃亏,由于他们的目的就不是拿人头,甚至会为了自己的Carry挡死。最后,玩家会为了刷数据,有益拖长游戏时间,然后拿大量farm对方的人头,而不是为了赢得比赛。我们尽量把測量玩家水平和激励玩家的机制放到努力取胜上面,我们避免了一些不必要的周边行为,而这些行为既没乐趣,还会扰乱匹配系统。
Q:我很愤慨,由于匹配系统老给我坑爹队友(feeders,送人头的)。为什么不阻止这样的情况发生?
A:我们的确有试图阻止这样的情况发生,可是假设你被匹配到一个明显非常弱的玩家,这也说明匹配系统同一时候匹配给你了一个或者多个强力的玩家。依据我们的研究,我们发现Carry(大腿)对队伍的带领作用要比feeder(送人头,坑爹)的坑爹作用更强。原因是在LOL里,多次击杀同一个玩家的收益是会递减的,并不像其它的同类游戏。我们的分析标明,在平均elo同样的情况下,提高或者减少这个队伍的某个玩家的elo值100(其它玩家对应减少/提高以保持平均分同样),整个队伍的实力会提高约7点elo值。这也表明,LOL中Carry的作用要比feeder的作用更给力一些。确实,有时候你会由于匹配到feeder而输掉这一局比赛,可是那是由于你们队的Carry不够给力。
Q:这种话,假设我连胜了数盘,我是不是会被匹配到一些全然不可战胜的对手?
A:不全是。连胜导致你的匹配分会提高,你会不断遇到更强的对手——可是我们并非有益的让你的胜率保持在50%的,我们的目的仅仅是为了系统可以正确的预測游戏结果。终于,你会达到你的极限,你将会大致保持50%的胜率。比平均水平高的玩家,往往胜率会比50%略高,由于比他们弱的玩家很多其它,比他们强的玩家更少。所以匹配时,往往会稍微“向下匹配”。对于排位顶尖的高端玩家,他们常常会有90%的胜率。
Q:你们会怎样设计固定的队伍?类似WOW的竞技场队伍?
A:这是一个很好的想法,而且让我们有机会设计出更好的匹配系统。我们迟早会做这个,而且使用我们开发的新方法。我们须要检验而且搞清楚你大体上有多强力(比如你的个人积分),同一时候同意你创建/解散队伍。这是个很大的project,可是我们对此很有激情~
Q:假设匹配系统真的那么公平,那为何我老遇见那种一边倒的比赛?
A:有两个原因。第一,LOL有时候“雪球效应”会非常明显。前期太差的表现会导致游戏让人感觉非常一边倒。特别是某些队伍,假设他们開始非常顺风,就会一直非常顺风。我们遇到过相同的队伍,第一局25-5取胜,第2局确以类似的比分输掉。第二个原因是,玩家发挥的并不好,队伍选取阵容也不好。要进行一局势均力敌的比赛,你须要平衡玩家水平和平衡阵容的选取。有时候玩家选了一个比較渣的阵容,比方5个近战dps,或者3坦克2法师之类的,或者没选打野英雄而对面有。这种话,虽然你的队伍实力也非常不错,可是情况往往慘不忍睹。
Q:为什么我作为一个高等级玩家,有时候会匹配到一些低等级玩家?他们看上去都是来送人头的。
A:当一个高等级玩家和一个低等级玩家组队,这是一个很令人头疼的问题。我们希望玩家能够和自己的朋友一起玩,而且希望这是一种愉快的体验。可是我们并不希望将一部分人的快乐建立在还有一部分人的痛苦之上,所以我们往往将这种组合评分更高,保护新玩家不会被高等级玩家虐待。很不幸的是,无论我们怎么做,我们把这种组合匹配到不论什么的游戏中,都有可能造成不愉快的体验。因此,我们计划将实施一个“不平衡组队”的队列,类似我们尽量将5人组队匹配给5人组队。
Q:我20级了,然后我被匹配到了一些10级的和一些29级的,怎么回事?
A:当不同等级的玩家组队,我们会使用他们的平均等级来作为匹配的參考。等级并非匹配系统的主导參数——匹配系统一般是使用实力来匹配——可是我们也会尽量将等级相近的玩家匹配到一起。在预先组队的情况下,我们没法替玩家选择,所以我们尽我们所能,使用平均等级。我们会在这个计算系统里把30级的玩家看作36级,所以我们通常能让中等级玩家的游戏没有30级玩家,然而有时候呢,29级玩家能插进来。