几年前的电视剧《新三国》、去年的《军师联盟》等,重新点燃了大众对《三国演义》的兴趣,成功将三国推上热搜榜。而最受关注的话题莫过于武将排名。无论是《三国演义》、《三国演义》等经典游戏,还是著名的小说评论家,甚至在我们每个人的心中,都有一个三国武将的排名。到底哪个排名最靠谱、最全面呢?东北师范大学熊社团队试图通过数据分析寻找答案。他们以《三国演义》原著小说中武将之间的战斗结果为依据,利用PageRank算法对武将进行排名。
本案例研究的意义在于:
普及PageRank算法:帮助学生对机器学习中的PageRank算法有更直观的认识,使学生更容易学习、掌握和使用此方法。
解决排名问题:针对小说、游戏中的人物排名等问题,提供了新颖的方法和相对客观的数据参考。
数据显示
本案例研究收集并筛选了《三国演义》原著小说中关于武将PK的资料片段,通过原著片段中战役胜负关系,探究三国武将鲜为人知的“秘密”,并对三国武将进行相对客观的排名。
首先我们要确定选取哪些PK片段,也就是样本的选取,本案例中初步选取了341个PK片段,但我们发现有些片段无法判断双方实力,比如一方遭到伏击,或者从背后开枪,以及旧伤未愈等异常程度下的PK和多对多PK。
其次,我们需要对选定的PK环节进行处理,包括修改环节和判断每个环节中的胜负关系。环节的修改包括两个方面,一方面,将多V1的PK环节拆分成多个1V1环节,拆分后确定每个环节中双方武将的胜负关系。例如《三国演义》中的经典环节“三侠斗吕布”:
”吕布见状,便丢下公孙瓒,与张飞决斗。 战了五十个回合,众人见张飞枪法散乱,张飞便大声喝道,振作精神,与吕布展开激烈战斗。
云长见状,一拍马头,挥起八十二斤的青龙偃月剑,从两边向吕布攻去,三马交战,呈“之”字形,大战三十个回合,吕布不败。
刘玄德拔出双刃剑,骑着黄鬃马,从侧面支援,三人围住吕布,打得灯笼似的。
八路军皆惊,吕布不知如何挡,望着玄德,拔戟而出,玄德闪避,吕布将戟一甩,向后拖去,骑回马背。谁也不肯罢休,纷纷策马而来。八路军大喝一声,齐齐出击。”
另一方面,重复PK的两位武将的多次胜负关系,则合并为一次PK。例如:
”魏将领兵到侯河,向邓艾挑战。邓艾率军迎战。两军对峙,战了几十回合,谁也不分胜负,于是各自撤兵回营。
又行十里,听得鼓声大作,一队士兵挡住了去路,他们的旗子上写着“西征将军邓艾”几个字。两军交战,蜀军精疲力竭,蜀军与立胜军交战,威风扫地,他硬着头皮与艾大战十余回合,双方均无胜负。”
合并前需要对战斗结果进行判定,如果两位将军的多次战斗结果相同,则多次PK会合并为一次PK,其实公平PK中,两位将军的多次战斗结果都是相同的。
判断胜负关系,我们有三大法宝:“原文”、“多重V1原则”和“上下文”。“原文”就是根据原文判断,如果出现“斩首”、“击杀”、“活捉”、“取首”、“胜”等字眼,则认为将军获胜;如果出现“不胜不败”、“假败”、“不敢战”等字眼,则认为将军获胜。双方战成平手;如果出现“败”,则认为将军败北。
比如“关公温酒杀华雄”这个片段,就认为关羽比华雄厉害。
” (关公)出帐,手执宝剑,跃上马来。其余诸侯听见关外鼓声大作,呐喊声如天塌地陷,山岳震动,百姓无不大惊。正要问,忽听凤铃声响起。等到军心,云长将华雄的人头抬起来,扔在地上,酒尚有余温。
又如“许褚对徐晃”这一片段,认为许褚败于徐晃之手。
曹操策马出战,见徐晃威风凛凛,大为惊叹,便命许褚与他决斗,刀斧交锋五十余回合,双方皆不分胜负。
多人V1原则是我们自己制定的判定原则,除了混战的情况,任何一场比赛,无论一方胜负,多人方中总有一人比单人弱。(不然怎么会有团战?)。比如《三侠斗吕布》的拆分,1V1对战的结果是:吕布战胜张飞,吕布战胜关羽;吕布战胜刘备。
对于一些难以判断结果的决斗,我们会根据背景来判断结果。例如:
“吕布见状,便弃公孙瓒而与张飞交战。大战五十回合,众人见张飞枪法散乱,张飞便大声呐喊,振作精神,与吕布激战。”
判定结果为:吕布胜张飞。再例如:
“(关兴)拔剑勒马,大喝一声:‘张郃,你别追!我来了!’便策马迎战。不到十回合,关兴便勒马而去。关兴在后追。”
判定结果是:关兴平定张郃。
但在这 341 个 PK 片段中,部分武将并未直接或间接交手,难以评估其武功高低。我们利用武将战斗关系连通子图进行二次筛选,剔除最大连通子图。(参考:网络上直接或间接连通的节点集合称为连通子图,节点数最多的连通子图称为最大连通子图。)
最大连通子图之外的武将有北燕,曹奂,陈就,程济等等(都是真的弱弱的战士,我一个都不认识……你说吕蒙?这里要说明一下,吕蒙的官职称是都督,也就是周瑜担任的官,你觉得周瑜是武将吗?当然不是,所以吕蒙不能算是武将,而且他全篇只打了一场仗,你还觉得他是武将吗?)。最终我们处理后的数据包括326个PK碎片,260位参战武将。
描述性分析
整理完资料后,我们来做一些有趣的分析,探寻一下三国武将鲜为人知的“秘密”。
第一个是最简单的频率统计,给出每个武将的出现频率。果然,子龙确实是三国中最勤奋的武将。他在长坂坡与曹操阵营打了五场仗。在这十多个武将中,他们绝对是最惨的。其他的我就不细说了,直接看图吧。
在第一张图的基础上,我们按照“胜”、“平”、“负”的结果,用不同的颜色来表示武将的战斗记录,然后对胜负进行排序,得到一张胜负武将的柱状图,大致可以判断谁强谁弱,可以看出吕布和赵云是靠实力,而魏延和张郃是靠演技。
说起演技,东北师范大学的队员们好奇心更足了,立马搜索原文,统计了武将PK时假败的次数,并做了下面这张条形图,结果让人大跌眼镜。魏延真是演技天才,不管能不能赢,他都会假败,一次我输一局,两次我输两局,十五次我输十五局,全是套路,套路!难怪网上有人说魏延是假败之王,果然名不虚传。可惜三国没有奥斯卡,演得再好也拿不到奖。
接下来我们统计了每对武将之间的PK次数,找出了三国武将中最大的对手。总结一下,这真是——吕布和张飞天天打,张飞和张郃一家亲,魏延和张郃互有胜负,蒋魏邓艾难上加难。
最后,我们努力找出精力最充沛的家伙作为描述性分析的结束,通过统计50回合以上的PK次数,我们授予许褚、张飞、关羽、马超、张辽“最佳运动员”称号。
以上就是三国武将鲜为人知的“秘密”,如果你还有什么想知道的三国武将“秘密”,不妨自己去尝试一下,结果一定会很有趣~~
建模排序
PageRank算法:搜索引擎对网页进行排序的经典算法,该算法计算每个网页的PageRank值,然后根据该值对网页的重要性进行排序。
基本原理:如果一个网页被很多个其他网页链接,说明这个网页比较重要,它的PageRank值就会比较高;如果一个PageRank值高的网页链接到另一个网页,那么被链接网页的PageRank值也会比较高,相应的就会提高。
这里使用PageRank算法对武将进行排名是合理的:将武将看作网页,将两位武将的PK结果看作网页的方向,战斗结果(以下定义为赞赏)是网页链接的有向图,因此,我们可以使用PageRank算法来计算武将的军力得分。
接下来的问题就是如何构造有向图的邻接矩阵呢?这里根据将领战斗结果构造出来的邻接矩阵我们称之为敬仰度矩阵,我们给出一个量化的标准: (1)在一场决斗中,如果将领A打败了将领B,那么将领B对将领A的敬仰度定义为1,将领A对将领B的敬仰度定义为0; (2)如果将领A和将领B打平,那么他们相互敬仰度分别为0.5; (3)如果将领A和将领B从未发生过直接PK,那么他们相互敬仰度为0; (4)将领的自我敬仰度定义为与其他与他交手过的将领敬仰度的平均值。
通过构建PK片段钦佩度矩阵,并利用PageRank算法进行排序,我们得到如下的三国武将排名图(其中,武将的军力值是其PageRank值的线性变换)。
可以看出,利用PageRank得到的将军排名和很多经典的排名有一定的区别,在这方面,需要说明以下几点:
1、本排行榜以《三国演义》原著中的PK片段为数据来源,采用PageRank算法计算得出,由于数据未必能完全体现实力(如孙坚、孙策等公认实力极强但很少出现的将领)及算法的局限性导致本排行榜与其他排行榜存在差距。
2、在这个算法中,武将的战果越多,击败的厉害将领越多,他的排名就越高。这对于一些文中被描述为“厉害”但实际战斗次数不多的武将来说非常不利,比如典韦。小说评论家称赞他是“曹营最优秀的将领”,但作为曹操的贴身侍卫,他要时刻保护主公的安全,因此很少出战,而他交手的将领大多都不是名将,这就导致典韦在这个排名中的排名很低。有些将领虽然名气不大,但因为与几位知名将领交手,所以成功“偷”了。
接下来是感谢信:
分析结论
总结一下,一个想要军衔高的将领大概有以下三个特点:
勤奋:比赛多,勤奋。
虎:面对众多名将,他挑衅对手,有虎之力。
强:很少失败,依靠实力。
“
亲爱的小伙伴们,我们的将军PageRank排行榜到此就结束了,你们学会了吗?想要了解更多案例详情,欢迎加入熊俱乐部大学会员,详情可咨询王先生(电话:13810634435,邮箱:xuan.wang@clubear.org)。
”
东北师范大学团队成员:George、王云浩、陶玉峰
审稿人:Shui Ma
本文采摘于网络,不代表本站立场,转载联系作者并注明出处:https://www.fwsgw.com/a/sanguo/201571.html