随机数生成器掌握:存档/读档刷宝法

0 点赞
Sid Meier's Civilization® V
转载

《文明5》并非一款靠运气的游戏,而是一款策略游戏。不过,有时候随机性可能会让人感到……棘手。在本指南中,我会尝试解释随机性出现在哪些地方、涉及哪些方面以及原因(这是一个复仇者式的玩笑),还有在高难度游戏中(默认情况下AI会“作弊”),你如何利用随机性为自己创造优势并平衡概率。 如果你属于以下情况,本指南可能不适合你: - 害怕数学 - 不会使用任何电子表格编辑器(我使用的是谷歌表格) - 反感大量的存档/读档操作 - 为了娱乐而玩低难度游戏——我个人为了挑战和“自虐”会玩神级难度 引言

《文明5》会为你提供大量关于战斗中各种修正值的信息,甚至还会预测你应该造成或受到的伤害量。有时候你会相信这些数字,盘算着能消灭敌方单位,但实际情况并非如此:发起攻击后你会发现,结果经常与预测不符,这可能会彻底打乱你的计划。 我听有人说这些差异是由修正值导致的,但这完全不对:伤害预测已经将修正值纳入考虑了。实际上,在这场战斗中,你可能造成27点或35点伤害,受到25点或31点伤害……而这一切都要归咎于【随机数生成器】。如果你经常进行存档/读档操作,可能会注意到战斗结果在很大程度上取决于行动的顺序,也就是说,重新加载游戏并以完全相同的顺序重复你的操作,会得到完全相同的结果。那么……这到底是不是随机的呢? 什么是RNG? 计算机无法生成“真正的随机性”。它们所能做到的最好的事情,就是生成一系列看似混乱且不可预测的数字,使其“表现得像随机的”——这就是被称为“随机数生成器”的算法的作用。这些算法通常依赖于一个“随机种子”,它决定了“随机序列”。例如,假设你用种子1234启动一个随机数生成器,并请求五个随机数,得到的结果可能是[1,8,2,0,0]。现在你用种子1235重新开始,得到的五个随机数是[5,9,1,4,3]……换句话说:完全不同的数字。如果你再次用种子1234重启随机数生成器,你会再次得到[1,8,2,0,0]。每次用这个种子重启这个随机数生成器,它都会给出这五个确切的数字。 严格来说,从任何随机数生成器算法中预测下一个数字在数学上是可能的(有些人有时会像这样利用网络赌场);然而,这非常困难(对于《文明5》来说,这实在是小题大做),所以你不妨公平游戏。 但这对《文明5》意味着什么呢? 每次你保存游戏时,随机数生成器会保存它的状态(即种子和位置)。每次你重新加载时,你就是在重启随机数生成器。《文明5》每次需要生成新的随机数时,都会按照固定顺序从同一序列中获取。据我所知,《文明5》通过以下方式“消耗”随机数: - 远程单位战斗:消耗1个随机数 - 近战单位战斗:消耗2个随机数(分别用于攻击方和防御方),此外还会消耗1个用途不明的随机数 - 对平民单位发起的战斗:不消耗随机数! - 伟人生成:消耗1个随机数(用于决定在哪个城市生成) - 远古遗迹:消耗1个随机数 - 掠夺地块:消耗2个随机数 - 攻占城市:消耗2个随机数(分别用于攻击方和防御方),此外还会消耗数量不明的随机数来决定哪些建筑会被摧毁 - ??? 我非常乐意讨论上述列表。这些结论是通过大量反复试验得出的,因此可能存在错误!你无法控制《文明5》会生成哪个数字,但你可以理解其顺序以及这对你作为玩家意味着什么。朋友们,这正是乐趣的开始…… 远程战斗 到目前为止,理解并利用随机数生成器最有用的地方就是提高你在战斗中的胜率。解释其原理的最佳方式是亲自实践;让我们从更容易理解的远程攻击开始。 打开一张你已有大量远程单位或城市且射程内有敌人的地图 移动任何你想移动的单位,然后保存;之后不要再移动任何单位,以免改变修正值(例如侧翼加成、不同地形等) 记录下攻击的预测伤害 发起攻击并记录结果(不要杀死任何敌方单位!)稍后我会在该部分进行解释!对所需数量的单位重复3-4次此操作,最终你将得到一个预测/结果表格。计算每个预测与结果之间的差值,用该差值除以预测值再乘以100:这样你就得到了百分比形式的相对差值。

这种百分比的相对差异将是关键。我称之为随机修正值或RM;注意它可以是负值或正值。 现在重新加载游戏(你在步骤2保存的那个),并重复步骤3-5,但要以不同的顺序进行……不出所料,RM也大致相同!我说大致相同,是因为可能会出现一些众所周知的变化。小的RM有时会因为伤害的计算方式而翻转(例如,+5%的RM可能变成-5%),但到目前为止,你最大的敌人是Indels:一个随机数被用作你某次攻击的副作用,而你没有记录它。这会导致RM序列出现明显的“偏移”。我将在本指南的后面部分专门讨论这个问题。 还要注意攻击平民单位(例如拥有远程攻击能力的工人不会消耗随机数!他们的防御力为0,并且总是承受完全符合预期的伤害。 这种方法并非万无一失,但肯定比完全听天由命要好。你可以将好的随机数留到重要攻击时使用,而把负面随机数用于消灭几乎没血的单位,或者更好的做法是:在近战攻击时把不好的随机数“扔”给敌人。 近战战斗方面,我的建议是始终先使用远程攻击来获取可靠的随机数;然后重新加载,根据你的意愿在远程和近战攻击之间使用这些随机数。

你必须记住的是,近战攻击会消耗2~3个随机数(RM): - 用于你的攻击 - 用于敌人的攻击 - (???)用于取悦混乱之主 换句话说,带有随机数[+15%,+20%,+5%]的近战攻击会同时给你和敌人带来加成。更好的做法是使用随机数[+15%,-20%,-5%]进行近战攻击:这样你的单位获得加成,敌人受到惩罚,而随机的神获得一个或多或少无关紧要的修正值。 说实话,第三个随机数让我很困惑。我不确定它的用途,但我目前的推测是它来自“战斗征召”之类的技能。有些单位能够以一定概率“招募”被击败的敌人。这肯定会消耗一个随机数。然而,即使战斗中的两个单位都不具备该能力,第三个随机数也会被消耗。 “该死的Indels!”及其他异常情况 单位死亡 之前我建议你在确定随机数列表时不要击杀单位。原因如下:

如果你击杀一个陆地单位,造成的伤害会以该单位的生命值为上限,例如,对一个5点生命值的单位发动预计40点伤害的攻击,实际只会造成5点伤害。因此,击杀陆地单位时你无法获取任何关于RM的信息。 海军单位的情况更糟,它们只会显示“你已被摧毁”。 有时,单位死亡会导致插入/删除(Indel)或重置(详见下文)。 插入/删除(Indel)简而言之:你的RM列表会发生“偏移”。你无法避免这种情况,且只有通过大量的存档/读档才能检测到。 Indel是插入/删除(insertion/deletion)的混成词,是字符串搜索算法中一个非常常见的术语。它们的含义正如字面所示:在列表中插入或删除某个项目。假设你获得的资源管理器(RMs)为[1,2,3,4,5],重新加载后,你得到的资源管理器(RMs)变为[1,2,0,3,4]。从这些数字中很容易看出发生了什么:之前没有0,现在却出现了。事实是:0一直都存在,只是在数字2之后的某个屏幕外操作让你没有注意到它。

遗憾的是,这种情况在游戏中发生时通常并不明显。例如,对于序列[1,2,3,3,4],你可能要到序列进行到很晚时才会注意到差异。如果这种情况发生在你击杀单位时(因此你看不到伤害数值),问题会更严重。 有一种方法可以实现插入缺失“检测器”,即一种名为尼德曼 - 温施的算法。该算法用于比对DNA序列,会考虑在进化过程中可能发生的核苷酸插入或缺失情况。它的实现并不困难,但需要正好两个随机数列表。如果你有更多列表,可以使用卡里略 - 利普曼算法进行多序列比对,不过……话说回来,准确找出插入缺失的位置到底有多重要呢?根据我的实验,以下是导致随机数偏移(indel)的常见原因: 生成伟大将军/海军上将:消耗1个随机数来决定他们在哪个城市生成 单位死亡:有时会为祈祷和悼念消耗1个随机数 由伟大将军/海军上将生成导致的随机数偏移很容易检测:如果随机数偏移只在你攻击某个特定玩家后发生,那么很可能是该玩家生成了伟人。重置 即便经过仔细检查,有时也难以发现规律;随机地图在一次攻击后可能会彻底改变,或者插入/缺失(indels)的情况极为复杂,此时你不妨从头开始考虑所有内容——也就是所谓的“重置”。 重置是确定性的(即如果你完全按照相同的顺序操作,重置总会在相同的位置发生),并且重置后的序列也遵循此处所解释的相同模式。 最终说明 总而言之,该方法在存在若干限制的情况下(在一定程度上)是有效的。大多数时候,处理由插入/缺失引起的偏移是一件相当麻烦的事。此外,你不能凭空获得良好的随机修正值——只有当它们存在时你才能使用。以下是一些总结性说明: 根据我的观察,随机修正值大致在-25%到+25%之间变化,且以5%为步长。 远程攻击相当符合这里所解释的模式;虽然并非100%准确,但确实有很大帮助。 用较差的随机修正值去攻击濒死单位是个不错的策略;这能有效地浪费掉不良修正值,但有时也会改变情况,或者完全重置序列。请注意这一点! 此方法并不会教你如何在游戏中做出明智决策——说实话,你仍可能在这方面表现不佳。 坦率地说,只有少数场景难度极高,需要深入理解这些机制。将此作为在特定情况下使用的工具。嗯,我在说你呢,【罗马和平永恒】流派。创建你自己的电子表格来跟踪【资源奇迹】,并预测下一场战斗的结果。过度使用会非常繁琐且分散注意力,可能会破坏游戏乐趣。最终,你无法摆脱存档/读档策略,但你能够在一定程度上进行极致优化。祝大家盯着加载屏幕时玩得开心!