Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
think-comp-2e-zh
提交
d1855b61
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 搜索 >>
提交
d1855b61
编写于
4月 12, 2018
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
9.
上级
d28d0e30
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
88 addition
and
5 deletion
+88
-5
9.md
9.md
+88
-5
未找到文件。
9.md
浏览文件 @
d1855b61
...
...
@@ -18,7 +18,7 @@
1971 年,托马斯谢(Thomas Schelling)发表了《隔离的动态模型》(Dynamic Models of Segregation),该模型提出了种族隔离的简单模型。 谢林模型的世界是一个网格;每个细胞代表一栋房子。 房屋被两种智能体占用,标记为红色和蓝色,数量大致相同。 大约 10% 的房屋是空的。
在任何时候,智能体可能会高兴或不高兴,这取决于领域中的其他智能体,每个房屋的“邻居”是八个相邻细胞的集合。在一个版本的模型中,如果智能体至少有两个像他们一样的邻居,
代理人
会高兴,但如果是一个或零,他们就会不高兴。
在任何时候,智能体可能会高兴或不高兴,这取决于领域中的其他智能体,每个房屋的“邻居”是八个相邻细胞的集合。在一个版本的模型中,如果智能体至少有两个像他们一样的邻居,
智能体
会高兴,但如果是一个或零,他们就会不高兴。
模拟的过程是,随机选择一个智能体并检查他们是否高兴。 如果是这样,没有任何事情发生。如果不是,智能体随机选择其中一个未占用的细胞并移动。
...
...
@@ -46,7 +46,7 @@ class Schelling(Cell2D):
self
.
array
=
np
.
random
.
choice
(
choices
,
(
n
,
m
),
p
=
probs
)
```
参数
`n`
和
`m`
是网格的维度,
`p`
是相似邻居比例的阈值。 例如,如果
`p = 0.5`
,也就是其邻居中少于 50% 为相同颜色,则
代理
将不高兴。
参数
`n`
和
`m`
是网格的维度,
`p`
是相似邻居比例的阈值。 例如,如果
`p = 0.5`
,也就是其邻居中少于 50% 为相同颜色,则
智能体
将不高兴。
`array`
是 NumPy 数组,其中每个细胞如果为空,则为 0;如果由红色智能体占用,则为1;如果由蓝色智能体占用,则为 2。 最初,10% 的细胞是空的,45% 为红色和 45% 为蓝色。
...
...
@@ -206,11 +206,11 @@ np.sum(frac_same) / np.sum(occupied)
+
智能体在 4 个罗盘方向的每一个方向上调查
`k`
个细胞,其中
`k`
是智能体的视野范围。
+
它选择糖分最多的未占用的细胞。 在相等的情况下,选择较近的细胞;在距离相同的细胞中,它随机选择。
+
智能体移动到选定的细胞并收获糖分,将收获增加到其积累的财富并将细胞清空。
+
智能体根据代谢消耗其财富的一部分。 如果结果总量为负数,
代理人
“饿死”并被删除。
+
智能体根据代谢消耗其财富的一部分。 如果结果总量为负数,
智能体
“饿死”并被删除。
在所有智能体完成这些步骤之后,细胞
变回
一些糖,通常为 1 单位,但每个细胞中的总糖分受其容量限制。
在所有智能体完成这些步骤之后,细胞
恢复
一些糖,通常为 1 单位,但每个细胞中的总糖分受其容量限制。
图?(中)显示两步后模型的状态。 大多数智能体正在移到糖最多的地区。 视力高的
代理
移动速度最快;视力低的智能体往往会卡在高原上,随机游走,直到它们足够接近来看到下一个水平。
图?(中)显示两步后模型的状态。 大多数智能体正在移到糖最多的地区。 视力高的
智能体
移动速度最快;视力低的智能体往往会卡在高原上,随机游走,直到它们足够接近来看到下一个水平。
出生在糖分最少的地区的智能体可能会饿死,除非他们的视力很好,先天条件也很高。
...
...
@@ -245,3 +245,86 @@ np.sum(frac_same) / np.sum(occupied)
在对数刻度上,分布的形状类似于高斯或正态分布,但右尾被截断。 如果它在对数刻度上实际上是正态的,则分布是对数正态分布,这是一种重尾分布。 实际上,几乎每个国家和全世界的财富分布都是重尾分布。
如果说糖域解释了为什么财富分布是重尾的,但是糖域变化中的不平等的普遍性表明,不平等是许多经济体的特征,甚至是非常简单的经济体。 一些实验表明避免或减轻并不容易,它们带有一些规则,对纳税和其他收入转移进行建模。
## 9.6 实现糖域
糖域比以前的模型更复杂,所以我不会在这里介绍整个实现。 我将概述代码的结构,您可以在 Jupyter 笔记本
`chap09.ipynb`
中查看本章的细节,它位于本书的仓库中。 如果你对细节不感兴趣,你可以跳到下一节。
以下是带有
`step`
方法的
`Agent`
类:
```
py
class
Agent
:
def
step
(
self
,
env
):
self
.
loc
=
env
.
look_around
(
self
.
loc
,
self
.
vision
)
self
.
sugar
+=
env
.
harvest
(
self
.
loc
)
-
self
.
metabolism
self
.
age
+=
1
```
在每个步骤中,智能体移动,收获糖,并增加年龄。
参数
`env`
是环境的引用,它是一个
`Sugarscape`
对象。 它提供了方法
`look_around`
和收获:
+
`look_around`
获取智能体的位置,这是一个坐标元组,以及智能体的视野,它是一个整数。 它返回智能体的新位置,这是糖分最多的可见细胞。
+
`harvest `
需要智能体的(新)位置,并在移除并返回该位置的糖分。
这里是
`Sugarscape`
类和它的
`step`
方法(不需要替换):
```
py
class
Sugarscape
(
Cell2D
):
def
step
(
self
):
# loop through the agents in random order
random_order
=
np
.
random
.
permutation
(
self
.
agents
)
for
agent
in
random_order
:
# mark the current cell unoccupied
self
.
occupied
.
remove
(
agent
.
loc
)
# execute one step
agent
.
step
(
self
)
# if the agent is dead, remove from the list
if
agent
.
is_starving
():
self
.
agents
.
remove
(
agent
)
else
:
# otherwise mark its cell occupied
self
.
occupied
.
add
(
agent
.
loc
)
# grow back some sugar
self
.
grow
()
return
len
(
self
.
agents
)
```
`Sugarscape`
继承自
`Cell2D`
,因此它与我们所见过的其他基于网格的模型相似。
这些属性包括
`agents`
,它是
`Agent`
对象的列表,以及
`occupied`
,它是一组元组,其中每个元组包含智能体占用的细胞的坐标。
在每个步骤中,
`Sugarscape`
以随机顺序遍历智能体。 它调用每个智能体的
`step`
,然后检查它是否已经死亡。 所有智能体都移动后,一些糖会恢复。
如果您有兴趣更加了解 NumPy ,您可能需要仔细看看
`make_visible_locs`
,它构建一个数组,其中每行包含智能体可见的细胞坐标,按距离排序,但距离相同的细胞 是随机顺序。
你可能想看看
`Sugarscape.make_capacity`
,它初始化细胞的容量。 它演示了
`np.meshgrid`
的使用,这通常很有用,但需要一些时间才能理解。
## 9.7 迁移和波动行为
![](
img/9-5.png
)
图 9.5:
`Sugarscape`
中的波动行为:初始状态(左),6 步后(中)和 12 步后(右)
虽然
`Sugarscape`
的主要目的不是探索空间中的智能体的移动,但 Epstein 和 Axtell 在智能体迁移时,观察到一些有趣的模式。
如果我们开始把所有智能体放在左下角,他们会迅速走向最近的高容量细胞的“山峰”。 但是如果有更多的智能体,单个山峰不足以支持它们的话,他们很快就会耗尽糖分,智能体被迫进入低容量地区。
视野最长的那些,首先穿过山峰之间的山谷,并且像波一样向东北方向传播。 因为他们在身后留下一些空细胞,所以其他智能体不会追随,直到糖分恢复。
结果是一系列离散的迁移波,每个波都像一个连贯的物体,就像我们在规则 110 CA 和生命游戏中看到的飞船(参见第?节)。
图?显示了初始条件下(左),6 个步骤(中)和 12 个步骤(右)之后的模型状态。 你可以看到,前两个波到达并穿过第二个山峰,留下了一串空细胞。 您还可以看到这个模型的动画版本,其中波形更清晰可见。
虽然这些波动由智能体组成,但我们可以将他们视为自己的实体,就像我们在“生命游戏”中想到的滑翔机一样。
这些波动的一个有趣的属性是,它们沿对角线移动,这可能是令人惊讶的,因为这些智能体本身只是向北或向东移动,从不向东北方移动。 像这样的结果 - 团队或“集合”拥有智能体没有的属性和行为 - 在基于智能体的模型中很常见。 我们将在下一章看到更多的例子。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录