提交 7519a84d 编写于 作者: W wizardforcel

11.

上级 5e0189fb
......@@ -6,7 +6,7 @@
尽管如此,许多人并不相信进化论。在皮尤研究中心进行的一项调查中,被调查者被问到,以下哪些断言更贴近他们的观点:
+ 人类和其他生物随着时间的推移而进化。
+ 人类和其他生物随时间而进化。
+ 起初,人类和其他生物就以其现在的形式存在。
约有 34% 的美国人选择了第二个(见 <http://www.thearda.com/Archive/Files/Codebooks/RELLAND14_CB.asp>)。
......@@ -29,13 +29,13 @@
我将从一个简单的模型开始,演示一种基本的进化形式。 根据该理论,以下特征足以产生进化:
+ 复制者:我们需要一批能够以某种方式复制的智能体。 我们将以复制者开始,它们生成它们自己的完美的副本。 稍后我们将添加不完美的副本,即变异
+ 变异:我们还需要一些总体中的变化,也就是个体之间的差异。
+ 复制者:我们需要一批能够以某种方式复制的智能体。 我们将以复制者开始,它们生成它们自己的完美的副本。 稍后我们将添加不完美的副本,即突变
+ 突变:我们还需要一些总体中的变化,也就是个体之间的差异。
+ 生存和繁殖差异:个体之间的差异必须影响其生存或繁殖的能力。
为了模拟这些特征,我们将定义智能体种群,智能体代表个体。 每个智能体都有遗传信息,称为基因型,这是智能体繁殖时复制的信息。 在我们的模型 1 中,基因型由`N`个二进制数字(零和一)的序列表示,其中`N`是我们选择的参数。
为了产生变异,我们创建了具有多种基因型的种群;稍后我们将探讨创造或增加变异的机制。
为了产生突变,我们创建了具有多种基因型的种群;稍后我们将探讨创造或增加突变的机制。
最后,为了产生生存和繁殖差异,我们定义了一个函数,将每个基因型映射为一个适应度,其中适应度是一个数量,有关智能体的生存或繁殖能力。
......@@ -231,7 +231,97 @@ sim.plot(0)
特别是,这种进化并不能解释生物物种如何随时间变化,或者如何出现新的物种。 进化论是强大的,因为它解释了我们在自然界看到的似乎无法解释的现象:
+ 适应性:物种与其环境的相互作用似乎太复杂,太巧妙,并且偶然发生。 自然系统的许多特征看起来好像是设计出来的。
+ 增加的多样性:随着时间的推移,地球上的物种数量普遍增加(尽管有几个时期的大规模灭绝)。
+ 增加的多样性:地球上的物种数量随时间而普遍增加(尽管有几个时期的大规模灭绝)。
+ 增加的复杂性:地球上的生命史起始于相对简单的生命形式,后来在地质记录中出现了更复杂的生物体。
这些是我们想要解释的现象。 到目前为止,我们的模型并没有完成这个任务。
## 11.7 生存差异
让我们再添加一种成分,生存差异。 以下是继承`Simulation`并覆盖`choose_dead`的类的定义:
```py
class SimWithDiffSurvival(Simulation):
def choose_dead(self, fits):
n = len(self.agents)
is_dead = np.random.random(n) > fits
index_dead = np.nonzero(is_dead)[0]
return index_dead
```
现在生存的概率取决于适应性;事实上,在这个版本中,智能体在每个时间步骤中幸存的概率是其适应性。
由于适应性低的智能体更有可能死亡,因此适应性高的智能体更有可能生存足够长的时间来繁殖。 我们预计适应性低的智能体的数量会随时间而减少,适应性高的智能体的数量会增加。
![](img/11-2.png)
图 11.2:随着时间的推移,10 次模拟中的适应性均值,带有生存差异
图?显示了随着时间的推移,10 次模拟中的适应性均值,带有生存差异。 平均适应性起初会迅速增加,但会逐渐平稳。
你或许可以弄清楚为什么它会平稳:如果在特定位置只有一个智能体并且它死了,它就会使这个位置变空。没有突变,就没有办法让它再次被占领。
`N = 8`的情况下,该模拟以 256 个智能体开始,它们占用了所有可能位置。 占用位置的数量随时间而减少;如果模拟运行时间足够长,最终所有智能体将占用相同的位置。
所以这个模拟开始解释适应性:增加的适应性意味着,物种在它的环境中生存得更好。 但是占用位置的数量随时间而减少,所以这个模型根本无法解释增加的多样性。
在本章的笔记本中,你将看到差异化繁殖的效果。 正如你所预料的那样,差异化繁殖也会增加平均适应性。但没有突变,我们仍然没有看到增加的多样性。
## 11.8 突变
在目前的模拟中,我们以可能的最大多样性开始 - 在景观的每个位置都有一个智能体 - 并以可能的最小多样性结束,所有智能体都在一个位置。
这与自然界发生的情况几乎相反,它显然以单个物种开始,这种物种随时间而分化为今天的地球上数百万甚至数十亿物种(见 <https://en.wikipedia.org/wiki/Global_biodiversity>)。
使用我们模型的完美复制,我们从未看到增加的多样性。 但是如果我们加上突变,再加上生存和繁殖差异,我们距离理解自然界的进化就更近了一步。
以下是继承`Agent`并覆盖`copy`的类定义:
```py
class Mutant(Agent):
prob_mutate = 0.05
def copy(self):
if np.random.random() > self.prob_mutate:
loc = self.loc.copy()
else:
direction = np.random.randint(self.fit_land.N)
loc = self.mutate(direction)
return Mutant(loc, self.fit_land)
```
在这种突变模型中,每次我们调用`copy`时,都有 5% 的突变机会。 在突变的情况下,我们从当前位置选择一个随机方向 - 即基因型中的一个随机位 - 并翻转它。 这是`mutate`
```py
def mutate(self, direction):
new_loc = self.loc.copy()
new_loc[direction] ^= 1
return new_loc
```
运算符`^=`计算“异或”;操作数 1 具有翻转一位的效果(请参阅 <https://en.wikipedia.org/wiki/Exclusive_or#Bitwise_operation>)。
现在我们有了突变,我们不必在每个位置都放置一个智能体。 相反,我们可以以最小变化开始:所有智能体在同一位置。
![](img/11-3.png)
图 11.3:随着时间的推移,10 次模拟中的适应性均值,带有突变、生存繁殖差异
图?显示了 10 次模拟的结果,带有突变和生存繁殖差异。 在任何情况下,种群都会向最大适应性的位置进化。
![](img/11-4.png)
图 11.4:随着时间的推移,10 次模拟的占用位置的数量,带有突变和生存繁殖差异。
为了测量种群的多样性,我们可以绘制每个时间步后占用位置的数量。 图?展示了结果。 我们以同一地点的 100 个智能体开始。 随着突变的发生,占用位置的数量迅速增加。
当智能体发现适应性高的位置时,它更有可能生存和繁殖。 适应性较低的位置上的智能体最终消失。 种群在整个景观中随时间而移动,直到大多数智能体处于适合性最高的位置。
此时,系统达到平衡,突变以相同的速率占据新的位置,生存差异导致适合性低的位置清空。
平衡中的占用位置的数量,取决于突变率和生存差异的程度。 在这些模拟中,任何点处的独特占用位置的数量通常为 10-20。
重要的是要记住,这个模型中的智能体不会移动,就像生物体的基因型没有改变一样。 当智能体死亡时,它可能会留下一个空位。 当发生突变时,它可以占据一个新的位置。 当智能体从某些地方消失并出现在其他地方时,种群会在景观中移动,就像生命游戏中的滑翔机一样。 但生命体不会进化;但种群可以。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册