Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
think-comp-2e-zh
提交
7519a84d
T
think-comp-2e-zh
项目概览
OpenDocCN
/
think-comp-2e-zh
8 个月 前同步成功
通知
0
Star
16
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
think-comp-2e-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
7519a84d
编写于
4月 13, 2018
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
11.
上级
5e0189fb
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
95 addition
and
5 deletion
+95
-5
11.md
11.md
+95
-5
img/11-2.png
img/11-2.png
+0
-0
img/11-3.png
img/11-3.png
+0
-0
img/11-4.png
img/11-4.png
+0
-0
未找到文件。
11.md
浏览文件 @
7519a84d
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
尽管如此,许多人并不相信进化论。在皮尤研究中心进行的一项调查中,被调查者被问到,以下哪些断言更贴近他们的观点:
尽管如此,许多人并不相信进化论。在皮尤研究中心进行的一项调查中,被调查者被问到,以下哪些断言更贴近他们的观点:
+
人类和其他生物随
着时间的推移
而进化。
+
人类和其他生物随
时间
而进化。
+
起初,人类和其他生物就以其现在的形式存在。
+
起初,人类和其他生物就以其现在的形式存在。
约有 34% 的美国人选择了第二个(见
<http://www.thearda.com/Archive/Files/Codebooks/RELLAND14_CB.asp>
)。
约有 34% 的美国人选择了第二个(见
<http://www.thearda.com/Archive/Files/Codebooks/RELLAND14_CB.asp>
)。
...
@@ -29,13 +29,13 @@
...
@@ -29,13 +29,13 @@
我将从一个简单的模型开始,演示一种基本的进化形式。 根据该理论,以下特征足以产生进化:
我将从一个简单的模型开始,演示一种基本的进化形式。 根据该理论,以下特征足以产生进化:
+
复制者:我们需要一批能够以某种方式复制的智能体。 我们将以复制者开始,它们生成它们自己的完美的副本。 稍后我们将添加不完美的副本,即
变异
。
+
复制者:我们需要一批能够以某种方式复制的智能体。 我们将以复制者开始,它们生成它们自己的完美的副本。 稍后我们将添加不完美的副本,即
突变
。
+
变异
:我们还需要一些总体中的变化,也就是个体之间的差异。
+
突变
:我们还需要一些总体中的变化,也就是个体之间的差异。
+
生存和繁殖差异:个体之间的差异必须影响其生存或繁殖的能力。
+
生存和繁殖差异:个体之间的差异必须影响其生存或繁殖的能力。
为了模拟这些特征,我们将定义智能体种群,智能体代表个体。 每个智能体都有遗传信息,称为基因型,这是智能体繁殖时复制的信息。 在我们的模型 1 中,基因型由
`N`
个二进制数字(零和一)的序列表示,其中
`N`
是我们选择的参数。
为了模拟这些特征,我们将定义智能体种群,智能体代表个体。 每个智能体都有遗传信息,称为基因型,这是智能体繁殖时复制的信息。 在我们的模型 1 中,基因型由
`N`
个二进制数字(零和一)的序列表示,其中
`N`
是我们选择的参数。
为了产生
变异,我们创建了具有多种基因型的种群;稍后我们将探讨创造或增加变异
的机制。
为了产生
突变,我们创建了具有多种基因型的种群;稍后我们将探讨创造或增加突变
的机制。
最后,为了产生生存和繁殖差异,我们定义了一个函数,将每个基因型映射为一个适应度,其中适应度是一个数量,有关智能体的生存或繁殖能力。
最后,为了产生生存和繁殖差异,我们定义了一个函数,将每个基因型映射为一个适应度,其中适应度是一个数量,有关智能体的生存或繁殖能力。
...
@@ -231,7 +231,97 @@ sim.plot(0)
...
@@ -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。
重要的是要记住,这个模型中的智能体不会移动,就像生物体的基因型没有改变一样。 当智能体死亡时,它可能会留下一个空位。 当发生突变时,它可以占据一个新的位置。 当智能体从某些地方消失并出现在其他地方时,种群会在景观中移动,就像生命游戏中的滑翔机一样。 但生命体不会进化;但种群可以。
img/11-2.png
0 → 100644
浏览文件 @
7519a84d
10.8 KB
img/11-3.png
0 → 100644
浏览文件 @
7519a84d
13.9 KB
img/11-4.png
0 → 100644
浏览文件 @
7519a84d
49.0 KB
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录