马匹繁殖:双亲再完美,也保证不了子代完美
子代的数值以双亲的中点为基准,但无论双亲多么接近,离散度都有一个 0.3 × 属性范围的下限。这一项永远无法消除,举例来说,两匹速度已经拉满的父母,配出来的马驹平均速度也只有大约 13.84,永远达不到满值。
马匹繁殖通常被描述为“子代取双亲的平均值,再加上一些随机性”。前半句完全正确。后半句则掩盖了真正决定你繁殖计划要花多久的部分。
模型
midpoint = (parentA + parentB) / 2
spread = |parentA − parentB| + 0.3 × (statMax − statMin)
roll = (random + random + random) / 3 − 0.5
foal = midpoint + spread × roll
该随机值取三个均匀随机数的均值,因此以 0 为中心,范围限制在 ±0.5,呈钟形分布,标准差为 0.1667。以零为中心意味着子代的期望值恰好是双亲的中点——民间说法中“取平均”的那一半是正确的。
离散度有一个无法消除的下限
看第二项:0.3 × (statMax − statMin)。它完全没有引用双亲的数值。
即使双亲完全相同,|parentA − parentB| 为零,离散度仍然是:
| 属性 | 完整范围 | 不可消除的离散度 |
|---|---|---|
| 最大生命值 | 15 – 30 | 4.50 |
| 跳跃力度 | 1.09 – 5.29 | 1.26 |
| 移动速度 | 4.74 – 14.23 | 2.85 |
所以,繁殖两匹速度拉满的马,子代以 14.23 为中心,标准差为 0.47——而且由于游戏会把超过上限的随机值折返回来,每一匹实际子代的速度都小于或等于 14.23,它们的平均值约为 13.84,最低可能落到约 12.81。两匹完美的双亲并不能产出完美的子代;它们产出的子代以完美为中心,但被一个固定的量所分散。
这就是繁殖计划会进入平台期的原因。一旦双亲的数值足够接近,再进一步拉近就毫无帮助了——|parentA − parentB| 这一项已经接近零,剩下的只是一个你无法通过繁殖消除的常数。
双亲匹配仍然很重要,而且非常重要
在另一个极端,把你最好的速度马和最差的马配对,离散度为 9.49 + 2.85 = 12.34——是双亲相同下限的四倍多。所以“配对相似的马”这条建议是有道理的;只是它有一个硬性上限。
实际的情况是这样的:
- 早期,匹配双亲就是全部。缩小
|A − B|几乎能一比一地缩小离散度。 - 后期,它毫无作用。你在对抗 0.3 的下限,唯一剩下的手段就是数量——繁殖更多子代,只保留最顶端的那一批。
为什么尾巴这么细
因为该随机值是三个随机数的均值而非单个随机数,结果会聚集在中间附近。一匹落在离散度最边缘的子代,需要三个随机数都接近同一个极端,这非常罕见。大约三分之二的子代落在一个标准差之内——双亲速度都拉满时是 0.47——而你要找的离群值远在这个范围之外。
所以,对后期繁殖计划的诚实预期是:大多数子代仅凭运气就会略差于双亲的中点,少数会略好一些,而进步来自于只保留那少数几匹。
与游戏的一处差异
这个计算器不会把超出范围的结果折返回范围内;Minecraft 会。所以在属性接近顶值时,真实游戏会把不可能的随机值折返回来,而不是截断,这会略微改变极端尾巴的形状。上述离散度和平台期不受影响;不过在接近上限时,真实平均值会略低于中点,因为钟形的上半部分被折返了下来。