因为这个问题得到的答案从天文数字小到几乎 100% 不等,我想提供一个模拟,作为改进解决方案的参考和灵感。
我称这些为“火焰图”。每一个都记录了群体中遗传物质在离散世代中繁殖时的分散情况。这些图是描绘人的细垂直线段的阵列。每一行代表一代,开始的一代在顶部。每一代的后代都在紧挨着它的下一行。
的人口中只有一个人被标记并绘制为红色。(很难看到,但它们总是绘制在顶行的右侧。)它们的直系后代同样用红色绘制;它们将出现在完全随机的位置。其他后代被绘制为白色。因为人口规模可以从一代到下一代有所不同,右侧的灰色边框用于填充空白空间。n
这是一组 20 个独立的模拟结果。
红色遗传物质最终在其中九个模拟中消失,剩下的 11 个(55%)幸存者。(在左下角的一种情况下,看起来整个种群最终都灭绝了。)然而,无论哪里有幸存者,几乎所有的种群都含有红色遗传物质。这提供了证据表明从上一代中随机选择的个体含有红色基因的机会约为 50%。
该模拟通过随机确定每一代开始时的存活率和平均出生率来工作。生存率来自 Beta(6,2) 分布:平均为 75%。这个数字既反映了成年前的死亡率,也反映了那些没有孩子的人。出生率来自 Gamma(2.8, 1) 分布,因此平均为 2.8。结果是一个残酷的故事,即生殖能力不足以弥补普遍的高死亡率。它代表了一个极其悲观的最坏情况模型——但是(正如我在评论中所建议的)人口增长的能力并不是必不可少的。每一代人最重要的是人口中红色的比例。
为了对繁殖进行建模,通过抽取所需大小的简单随机样本,将当前人口减少到幸存者。这些幸存者是随机配对的(配对后剩下的任何奇怪的幸存者都不会繁殖)。每对产生一些从泊松分布中抽取的孩子,其平均值是这一代的出生率。如果父母中的任何一个包含红色标记,则所有孩子都会继承它:这模拟了通过任一父母直接血统的想法。
此示例从 512 人口开始,并运行 11 代(包括开始的 12 行)的模拟。这个模拟的变化从到人,使用不同的存活率和出生率,都表现出相似的特征:到代结束时(在这种情况下为 9),大约有 1/3 的机会所有的红色都消失了,但如果还没有消失,那么大多数人口都是红色的。再过两到三代,几乎所有的种群都是红色的,并将保持红色(否则种群将完全消失)。n=8214=16,384log2(n)
顺便说一句,一代人的存活率达到 75% 或更少并不是幻想。1347 年晚期,鼠疫首次从亚洲进入欧洲。在接下来的三年中,大约 10% 到 50% 的欧洲人口因此而死亡。瘟疫在数百年后几乎每一代人都会复发一次(但通常不会以同样的极端死亡率)。
代码
模拟是使用Mathematica 8 创建的:
randomPairs[s_List] := Partition[s[[Ordering[RandomReal[{0, 1}, Length[s]]]]], 2];
next[s_List, survive_, nKids_] := Flatten[ConstantArray[Max[#],
RandomVariate[PoissonDistribution[nKids]]] & /@
randomPairs[RandomSample[s, Ceiling[survive Length[s]]]]]
Partition[Table[
With[{n = 6}, ArrayPlot[NestList[next[#, RandomVariate[BetaDistribution[6, 2]],
RandomVariate[GammaDistribution[3.2, 1]]] &,
Join[ConstantArray[0, 2^n - 1], ConstantArray[1, 1]], n + 2],
AspectRatio -> 2^(n/3)/(2 n),
ColorRules -> {1 -> RGBColor[.6, .1, .1]},
Background -> RGBColor[.9, .9, .9]]
], {i, 1, 20}
], 4] // TableForm