金庸人物战斗力的建模与计算
文/@王漫如
金庸笔下人物武功的强弱,经常被大家拿来讨论,这也是因为金庸的小说有两个得天独厚的优势。第一,人物发挥比较稳定。金庸两次修订自己的小说, 书里人物的战斗力有一个相当清晰合理的分级。像第一版《神雕》里的神雕能和金轮法王战成平手;《倚天》里谢逊一出场,张翠山觉得武当七侠联手也无法战胜 他,这些不合理的地方在后面的版本都作了修改。相较之下,古龙温瑞安笔下人物的战斗力就比较混乱了。四大名捕的铁手,在《会京师》里只能和楚相玉(曾败于 铁手的师父)走二十五招,在《少年铁手》里,少年铁手的内力却反而超过自己的师父。这样想要评估铁手以及楚相玉的战斗力,就难免顾此失彼,自相矛盾。第 二,金庸的武功便于量化。灭绝师太是用了三成内力,还是七成内力,都从上帝视角说的清清楚楚;两个人拆了三十招还是五十招也都很明确,这就给评估金庸人物 的战斗力创造了很好的条件。
但是诸如“五绝的武功在倚天里相比三渡怎么样”这种问题,每次都会掀起争论。究其原因,毕竟还是因为没有一个定量的战斗力指标,可以用来量化不 同书中人物的战斗力。鉴于金庸武功有这样两个极为便于量化的优势,本文建立了一种评价人物战斗力值的数学模型。通过这个模型,可以比较某一人物的所有战绩,对每个人物给出一个可信的战斗力数字。甚至能依据相同的标杆,跨越不同作品进行人物战斗力的比较,平息人物之间战斗力强弱的争论。
(注:金庸小说前后一共三版。本文所有的战斗力评估,如果不特别指出,均以第二版为基准。在需要的时候,也可以参考第一版和第三版的内容。)
一、战斗力数学模型
要建立这样一个战斗力的数学模型,必须考虑到金庸人物的这样一些特点:
1, 招数和内力需要分开考虑。金庸人物中,经常会有一个人不大懂武功招数但是内力超常的情况。这样的人物,最起码可以反弹内力不足者的所有攻 击,比如段誉对宗赞王子;再高一级,则能自动感知物理攻击,比如张无忌在光明顶躲开何太冲夫妇的“无声无色”。而到了最高境界,就可以“随心所欲,无不如 意”,和武功精强的一流高手战成平手,比如觉远对何足道,石破天第二次对丁不四。在少数情况下,如果人物内力很弱但招数精妙,一样可以克敌制胜,比如无内 力的令狐冲对内力全开的任我行,学会辟邪剑法的林平之对余沧海和木高峰,何太冲失去内力时对赵敏的武士。
2, 阵法的加成作用。从最开始碧血剑里的五行阵,到射雕系列中的七星北斗大阵,金刚伏魔圈,武当七侠的真武七截阵,都能够明显提升战斗力。但是这些阵法对战斗力的提升也各不相同。这些都要在建模里有所反映。
为此,可以建立这样一个战斗力的数学模型。每个人物一共有三个参数,分别为“战斗力”、“内力”和“招式”。战斗力值是用来衡量人物之间胜负关系的主要参考指标,而这个值,由他的内力值和招式值决定,三者之间的函数关系如下
这个式子看起来有点复杂,实际上就是一个加权平均。如果一个人的内力和招式一样都是a,那么
也是a。对于大多数人来说,内力和招式一般是成正比的,即内力越强的人招数越强(这个假设很合理,因为一个人内力越强,一般说明他修炼的时间越 久,修炼的功夫更高明,所以招数自然也越精),那么可以认为他们的三个数值是一样的,可以简单用一个值a来表示。但是对于一些在招数或内力上有强烈优势的 人,这个公式就可以用来很好的解释他的战绩。以觉远对何足道为例,假设何足道的内力和招式都是 80,他的战斗力就是 80。觉远基本不会武功,可以认为他的招式为0。但是他能和何足道基本打个平手,战斗力也是 80,那么他的内力是:
是何足道的四倍。九阳神功满级的张无忌和三渡内力之和相当(“张无忌九阳神功之强,不输 于三僧联手”),所以同样九阳神功满级的觉远是何足道内力的四倍,是一个很合理的估计。完全没有内力的令狐冲能和内力全开的任我行打成平手,那么令狐冲的 招式水准也大约为任我行的四倍。考虑到独孤九剑是一种“敌强愈强”的武功,这个估计也是合理的。
二、内力取值的计算
模型建立之后,人物的具体战斗力值怎么确定呢?这个需要通过人物互相之间的战绩来决定。首先讨论对内力值的估计:
用A和B代表两个对手。假设A被B击中,在金庸的书中会有一些代表性的反应。在其中一些情节中,又能给出两人内力的一个典型比例关系,可以作为内力评估的参照。
1)A被B击中,只是一阵剧痛,但没有受伤。
一个典型战例是张无忌和三渡的交手中,张无忌被三渡之一击中。考虑到张无忌的内力等于三人之和,则B≈ 0.33A(注意到三渡的实力是有差别的。但是这里的区间是一个近似估计,而且可以想象,不论三渡中的哪一位打中张无忌,效果都相差不大)。
2)A被B击中,呕血受伤,但不致命。
这个有几次出现。一次是灭绝师太用七成功力打飞张无忌,张无忌重伤呕血。考虑到之前张无忌震飞静玄的时候,灭绝师太暗暗吃惊,想自己也没这样的 功力。那么假设张无忌内力是灭绝师太的 1.5 倍,灭绝师太用三成功力将张无忌打至吐血,那就是1/1.5*0.3= 0.2 倍张无忌的内力。这个值低于前面推出的 0.33 的阈值。但考虑到张无忌当时对内力的运用还不太成熟,而灭绝师太则极为老辣,所以这一掌的效果比正常情况下更突出。因此,A呕血受伤的下限应该是 0.33A< B。然后再考虑上限。有一个例子是《侠客行》里白自在和丁不四交手,一掌将丁不四打吐血。白自在的内力明显强于丁不四,就算是 1.5 倍丁不四。
综上,这种情况下 0.33A < B < 1.5A
3)A被B击中致命。
比如梅超风被欧阳锋击中的情况。这种情况下至少有B>1.5A。
4)A完全反弹B的攻击
考虑到1)的情况,B <0.33A. 但是这个条件还不够。张无忌在光明顶上对空性,心想“恐怕无法不动声色地令空性知难而退”。空性的内力应当略低于三渡。如果张无忌 能完全反弹空性的攻击,就没必要打的这么辛苦,所以反弹攻击的上限应该会再低一些。假设空性有 80% 三渡的内力,那就是 80%*33.3% = 26.7%,那么完全反弹攻击,应该是 20% 左右。
综上,这种情况下 B < 0.2A
5)A和B対掌平手。
这个很显然 A ≈ B.
6)A和B対掌,A倒退1-3 步。
这里有一个很有意思的例子。在武当山上张无忌和阿二対掌,最开始两人都晃了一晃,然后阿二分别退出一步和三步,最后完全被张无忌弹飞。如果单看 张无忌完全反弹阿二的攻击,岂不是说阿二内力= 0.2 张无忌内力?但注意到阿二被弹飞是张无忌运了半天气的结果。本文中说的内力,是指人物所拥有的内力,也指他一击能够打出的内力,这两者一般成正比。但张无 忌蓄力之后,再加上乾坤大挪移的潜力,可以一次迸发出更大内力。假设他的内力是阿二的x倍,而全力一击的力量可以认为是 x2,这个内力值完全反弹阿二的内力。那么1/x2 ≈ 0.2,阿二内力 ≈ 0.45 张无忌,甚至已经超过了三渡的内力,确实厉害。所以张三丰对阿二的评价也是“内力浑厚,武林中甚是罕见”。
说了这么多,其实只是想说明张无忌和阿二対掌,除了最后一击外,阿二倒退1-3 步,“感到气血翻涌”,才是两人内力比例下正常的反应。综上,在这种情况下,0.45B< A < B.
7)A和B対掌,A倒退多于三步,或受伤呕血。
这种情况下B的内力应当低于“対掌倒退”的情况,即 0.45B> A。
综上,可以整理出两人内力关系如下表所示:
由此,金庸书中所有包含内力比拼的情节,均可以根据上表估计出交手人物之间的内力关系。
三、战斗力与交手回合数的关系
上面推算了内力值的计算方法。内力是战斗力值的一部分。两个人交手的战绩,除了硬拼内力的情况外,都由他们总的战斗力值决定。而反应其战斗力值最直接的参数就是两人的交手回合数。这里采用双曲正切函数 tanh,建立战斗力值与交手回合数的关系如下:
实力比 =tanh (0.02*x)
X 是两人的交手回合数。这个函数的图画出来就是下面这样。横轴表示两人交手回合数x,纵轴表示战斗力的比值。例如A在 50 回合时被B击败,由图上可知,A的战斗力约为B的 0.76。
有了这样的函数,就能直接推算很多人之间战斗力的比值,例如:
如果A能在 3 招内击败B,那么B的实力大约为A的 0.06;
丁不四第一次和石破天交手,觉得二十招击败他有点困难,说明他预估石破天的实力不低于他的 0.4 倍;
射雕后期郭靖和欧阳锋交手三十余招被击败。但考虑到郭靖领悟“飞絮劲”后,马上将回合数提升至五十余招,所以他那时的实力大约是欧阳锋的 0.76。华山论剑时,黄药师和洪七公与郭靖交手,都保留了实力。但根据洪七公所想“如果在一百招之内击败靖儿,黄老邪面上须不好看”,说明他有一百招内 击败郭靖的实力(当然,郭靖当时手拿兵刃,战斗力反而有所下降),可见当时郭靖的实力大约相当于 0.9-0.95 的黄药师和洪七公;
张无忌在大都对空手的鹿杖客鹤笔翁,三十招便击败了两人。所以两人空手战力之和,是张无忌的 0.6 左右(下一节会说明如何计算两人战力之和);
从图上看,如果两人交手超过 150 招未分胜负,说明两人实力基本相当。
以上推算出的战斗力比值,和我们的直观印象是相符的,说明了本文所提出的双曲正切函数模型的有效性。
四,联手战斗的战斗力计算与阵法加成
一般战斗力计算的文章都认为,几个人联手作战的战斗力,等于其各自的战斗之和。这个算法对内力是可行的,即内力可以进行线性叠加。但如果据此计 算人物的战斗力会带来很大问题!比如黄药师和全真七子的天罡北斗阵打成平手。就算不考虑阵法的加成效果,这七位老道的平均实力最多只有 0.14 黄药师。考虑到丘处机、马钰、王处一的实力比其他人都强,那么武功最弱的孙不二岂不是远低于 0.14?再加上阵法加成的效应,堂堂全真七子之一的孙不二的实力只有杂鱼程度,岂不是很不合理?
因此,本文大胆提出一个假设。在没有阵法的情况下,联手作战的战斗力由以下式子决定:
这个式子的意思是,联合战斗力,等于每个参展者战斗力平方之和再开根号,实际上就是一个2-范数。举例来说,战斗力 30 和 40 的人联手,其联合战斗力不是 70,而是 50,低于他们战斗力的直接加和。又比如,如果张无忌的战斗力是 100,按照前面的推算,鹿杖客鹤笔翁的空手战斗力约为 60,那么他们每人的单独实力约为 42,也符合我们的直观印象(注意前面推出阿二的内力为 45。但是他的招数未必也有这么强,所以总的实力应该会低于鹤鹿二人)。
这个算法很好的解决了前面提到的战斗力问题。但是最妙的地方在于,这个定义还有助于计算阵法的加成效应。我们先来考察一下武当七侠的“真武七截 阵”。书里写道,武当七侠如果使用这个阵法,“四人相当于八位高手,五人相当于十六位,六人相当于三十二位,七人相当于六十四位当世一流高手同时出手”。 这种实力指数增长的阵法,堪称金书中的最强阵法,甚至强的很不合理。但是按照本文的公式来推算,假设每位“当世一流高手”的战斗力是1,武当七侠每人战斗 力也是1。那么六十四位当世一流高手同时出手的战斗力是多少呢?——是8!不是 64。和武当七侠战斗力之和基本相当。这就意味着真武七截阵将武当七侠的联合战斗力,从2-范数增长为接近线性加和。这样就很合理了。
鉴于真武七截阵堪称金庸书中的最强阵法,那么其他阵法的加成作用应当小于等于真武七截阵,但是大于无阵法时的联手作战。所以像天罡北斗阵一类阵法,均可以由此进行推算。
五,总结
本文基于严格的数学推导,提出了完整的金庸人物武功的建模方式。在这个武功模型下,只要建立一个标杆(比如设学会太极拳后的张无忌招数内力均为 100),理论上就可以计算出所有人物的战斗力值。计算的方式有(但不限于)以下两种:
1,按照第二部分的方法,推算出人物内力值,再根据“招式值和内力值相当”得出人物整体的战斗力;
2,按照第三部分的方法,通过人物交手回合数,直接推算出战斗力值。
金庸里人物极为繁多,如果想推算出所有人的战斗力值,其工作量大概相当于完成一篇博士论文。鉴于笔者已经不想再写博士论文,所以这里只提模型,不再做进一步具体计算。
有一些问题有待进一步讨论:
1, 是否使用武器对战斗力的影响。虽然《射雕英雄传》里写过,武功到了极高境界,有无兵器差别不大,但绝大多数时候,兵器能提升人物的战斗力。为避免复杂,在计算每个人物战斗力的时候,最好只算他的巅峰战斗力,而不用区别他有兵器和没兵器时的战斗力。
2, 战斗力随年龄的变化。这个问题在射雕系列中比较突出。理论上讲,射雕里的五绝随时间推移,功力会有提高,但他们在神雕后期都接近百岁, “年老力衰”,战斗力又会下降。但是鉴于百岁周伯通仍然能和杨过酣战上百招,七十岁左右的金轮法王战斗力仍然处在巅峰,所以在计算的时候,或许可以做简化 处理,认为某个人物的武功练到巅峰之后,就不再随年龄的变化而变化。
3, 不同书中人物战斗力的横向比较。这个问题比较困难,特别是对两部完全不相干的书,但是仍然有蛛丝马迹可循。可能是两部书的人物做了类似的 行为,比如萧峰和觉远都用脚擦去石上的痕迹。也可以通过数学上进行计算,比如胡斐力量的极限是抱起七百斤的水缸,而张无忌可以消解十层高塔上跳下来的人。 如果计算一下他们使力大小,应该可以得出两人的内力之比。而一旦两部书中有一对人物建立了上述联系,则这两本书中其他所有人物,都可以由本文的模型推算出 统一的战斗力数值。