缺氧
缺氧
平台PC
发售时间PC 2019-07-31
时长66.5小时(主线)
类型模拟游戏
官方中文支持
制作发行Klei Entertainment / Klei Entertainment
评分8.8太空人才培训班
标签生存沙盒探索2D开放世界

《缺氧》DLC1甜素甲虫变异机制解析

类型:攻略发布日期:2021-06-29来源:缺氧吧作者:234xdd🏷 缺氧攻略 / 攻略

《缺氧》DLC1中新增的生物甜素甲虫有着变异机制,那么变异的几率是如何设定的呢,想要了解的玩家请看下面“234xdd”带来的《缺氧》DLC1甜素甲虫变异机制解析,希望能够帮助大家。

简化版总结

太长不看版,甜素甲虫产虫果果虫卵的概率为随照料虫果类植物的次数增加而增加,直至趋近于100%,而甜素甲虫每周期可以照料7棵左右的作物。

因此,大约可以在全效照

游民星空

料4周期以后达到50%,7周期后达到70%,10周期后达到80%。如适用虫果果虫产卵,猜测除初始值变更为33%以外变异机制与甜素甲虫一致。

理论计算公式在概率不足98%时为a_n = 1 - (1 - a_0)*(1 + x)^(-n),超过98%时增长会更慢。其中n表示照料虫果类植物的次数,a表示产下果虫卵的概率,a_0表示初始概率2%。x表示变异率2.5%。

游民星空

代码分析

首先找到甜素甲虫的文件 DivergentBeetleConfig。

找到 EntityTemplates.ExtendEntityToFertileCreature()(这一行定义了动物的生殖行为,所以海牛和章鱼应该时没这一行的)。

游民星空

找到其中定义产卵概率的参数 DivergentTuning.EGG_CHANCES_BEETLE,所以我们转战 DivergentTuning 文件。

其实到这里乍一看就无计可施了,因为 EGG_CHANCES_BEETLE 只定义了 0.02 和 0.98 两个数字,对应甜素甲虫初始状态下产出两种卵的概率。

游民星空

好在仔细一看,这个文件中还有一个似乎和产卵概率相关的变量有定义 TIMES_TENDED_PER_CYCLE_FOR_EVOLUTION 为 2,直译为“进化所需的每周期照料次数”。

搜索 TIMES_TENDED_PER_CYCLE_FOR_EVOLUTION 在代码文件中的引用,发现在 TUNING.CREATURES.EGG_CHANCE_MODIFIERS 文件中的 CreateCropTendedModifier 有用到。 CreateCropTendedModifier 的第一个参数为虫果果虫id,第二个为虫果果虫卵id,第三个为两种能提供变异的植物((贫瘠)虫果植株),第四个参数即是0.05除以TIMES_TENDED_PER_CYCLE_FOR_EVOLUTION (得0.025)。那么我门接下来分析 CreateCropTendedModifier 的逻辑。

游民星空

可以看到,在 CreateFertilityModifier 的最后一个变量 applyFunction 中,回调的输入被转换为 CropTendingStates.CropTendingEventData 植物照料事件数据,它其中便有被照料的植物id -- corpID。代码逻辑为,如果被照料的植物是之前定义的几种植物((贫瘠)虫果植株)中的一种,那就调用 inst.AddBreedingChance(eggType, modifierPerEvent) 函数调整变异概率,其中eggType是回调函数的输入值,盲猜是虫果果虫卵的id,modifierPerEvent 正式之前算出的第四个参数 0.025。

游民星空

现在来看 AddBreedingChance,简化的代码为 chance.weight += Min(1 - chance.weight, Max(0f - chance.weight, 0.025)),套用到虫果果虫的例子中用人话说就是,虫果果虫卵当前的权重加上0.025,再把它限制到0到1的范围之内。注意后面还有一行NormalizeBreedingChances(),作用就是等比缩放所有的蛋的概率使得它们的和为1。

游民星空

公式推导

本段涉及到最多到高中的数学知识

符号定义:

a 产出虫果果虫卵的概率,用0到1之间的小数表示。

x 每次照料增加的概率系数,为0.025

n 照料虫果系植株的次数,为自然数。

这样,a_0就是初始状态下甜素甲虫产下虫果果虫卵的概率0.02(2%),a_n就是照料过n次虫果系植株以后的甜素甲虫产下虫果果虫卵的概率。

根据代码中的逻辑,现在可以得到虫果果虫卵概率的递推公式:

当a_{n-1} 小于等于 0.975时,a_n = (a_{n-1} + x) / ((a_{n-1} + x) + (1 - a_{n-1})) = (a_{n-1} + x) / (1 + x)

游民星空

当a_{n-1} 大于 0.975 时,a_n = 1 / (1 + (1 - a_{n-1} )) = 1 / (2 - a_{n-1})

游民星空

根据高中的通过递推公式求通项公式的知识(我自己忘得差不多了所以去某乎复习了一下),易得(等式两边同时减 1 即为等比数列)

当a_{n-1} 小于等于 0.975时,a_n = 1 - (1 - a_0) * (1 + x)^(-n)

游民星空

根据(excel)计算,n 最大为 149 (即第一个超过 0.975 的 a_n 对应的 n)

那么当 n 大于 149 时,通项公式为(等式两边同时减 1 再取倒数即为等差数列)

a_n = 1 + 1/(1/(a_{149}-1) - n + 149)

游民星空

结论验证

数据

其中"观察值"为(1 - "原始观察值"/100)。"理论值近似"为"理论值"四舍五入后的百分率表示方法。

游民星空

图表

游民星空

可以看到观察值与理论值分毫不差。

结论验证

数据

其中"理论值近似"为"理论值"四舍五入后的百分率表示方法。

游民星空

图表

游民星空

可以看到理论值和实际值有一定误差。推测误差有两方面,一是也许每周期照料作物棵数不是恰好为7,二是单精度浮点数计算上的误差。

总结

目前看来论证公式能很好得解释游戏中的现象。根据相似的代码查找方法,可以推测如果用虫果果虫产卵,除初始值变更为33%以外变异机制与甜素甲虫一致。对于别的小动物的变异机制,理论上应该也能通过分析TUNING.CREATURES.EGG_CHANCE_MODIFIERS 文件来得到确切的逻辑。

《缺氧》精华文章推荐
本文内容来自网络收集整理,版权归原作者所有。 · 所属游戏:缺氧
← 返回 缺氧 攻略列表

同游戏其他攻略共 367 篇

《缺氧》一修大师修改器使用说明攻略2025-01-20《缺氧》松鼠产泥土模块搭建方法攻略2024-04-16《缺氧》壁虎养殖模块布局推荐攻略2024-04-16《缺氧》动物数量控制方法攻略2024-04-16《缺氧》热火朝天更新内容介绍攻略2022-12-25《缺氧》反应堆模块布局参考攻略2022-08-11《缺氧》蒸汽水泉模块布局参考攻略2022-08-09《缺氧》聚合物压塑机模块布局参考攻略2022-06-29《缺氧》高温污染氧喷泉开发思路攻略2022-06-29《缺氧》液冷蒸汽室粗电线布局方法攻略2022-06-29《缺氧》火山炼油模块搭建及自动化送货思路攻略2022-06-28《缺氧》盐水泉蒸馏模块搭建方法 盐水泉蒸馏模块怎么搭建攻略2022-06-27《缺氧》食物永久保鲜模块布局参考攻略2022-06-01《缺氧》全自动煎蛋模块建造方法攻略2022-06-01《缺氧》壁虎养殖模块搭建方法 壁虎怎么养攻略2022-06-01《缺氧》田鼠养殖模块搭建方法 田鼠怎么养攻略2022-06-01《缺氧》鱼蛋卷加工厂简单搭建方法 鱼蛋卷加工厂怎么搭建攻略2022-06-01《缺氧》哈奇养殖模块搭建方法 哈奇怎么养攻略2022-06-01《缺氧》焕然异星更新内容介绍攻略2021-10-31《缺氧》不明特质更新内容一览攻略2021-10-08《缺氧》天外来电更新介绍攻略2021-09-22《缺氧》再筑陈舱版本改动一览攻略2021-08-29《缺氧》全复制人特性表游戏资料2021-08-26《缺氧》铁火山简易开发模块分享攻略2021-08-24《缺氧》推气门自动化布置推荐攻略2021-08-24《缺氧》DLC1柔光泥潭更新介绍攻略2021-08-07《缺氧》DLC1植物变异机制解析攻略2021-07-20《缺氧》原油裂解发电布局推荐攻略2021-07-06《缺氧》铁锈高压制氧模块布局攻略2021-07-05《缺氧》乔木星开局种子分享攻略2021-07-05