书名:代码本色:用编程模拟自然系统
作者:Daniel Shiffman
译者:周晗彬
ISBN:978-7-115-36947-5
第6章目录
6.10 复杂系统
1、个体和系统
- 思考一只蚂蚁,即蚂蚁个体,蚂蚁是一个自治智能体,它能够感知环境(用触角来收集化学信号的方向和强度信息),并能根据这些信号决定移动。
- 但仅凭一只蚂蚁能否完成筑巢、采集食物、捍卫蚁后这些艰巨的任务?
蚂蚁是一种简单的单元,只能感知其周围的环境。
而蚁群就是一个复杂的系统,是一个“超级有机体”,其中的各部分成员协同工作,共同完成艰巨和复杂的任务。
2、多个自治智能体
- 前面我们已经学习了如何构建自治智能体,接下来要做的就是让多个自治智能体并行运行——智能体不仅能感知物理环境,还能感知同伴的活动,最后根据这些信息决定如何移动。
我们打算用Processing创建复杂系统。
3、复杂系统
- 什么是复杂系统?
复杂系统通常是这么定义的:“一个复杂系统的整体不等同于局部的简单组合。”
复杂系统的局部是很简单且易于理解的个体,但它们组成的整体会表现得非常复杂、智能且难以预测。
4、3个主要原则
复杂系统有3个主要原则:
-
个体之间存在小范围的联系。
一直以来我们都在遵循这个原则:小车对环境的感知能力是有限的。
-
个体的动作是并行的。
我们需要用代码模拟这个特性。在Processing的每一轮draw()循环中,每个个体都应该移动(并行地绘制它们的外形)。
-
系统在整体上会呈现一种自发现象。
个体之间的交互会出现复杂行为和智能模式。
自然界的复杂系统确实会呈现特定的模式(蚁群、白蚁、迁移、地震、雪
花,等等),
我们能否用Sketch模拟出同样的效果?
5、附加特性
以下3个附加特性有助于我们更好地讨论复杂系统,我们可以按照这些特性完善复杂系统的模拟。
需要注意的是,它们是一个模糊子集。并非所有复杂系统都具备这3个特性。
-
非线性
复杂系统的这个特性往往称为“蝴蝶效应”,“蝴蝶效应”理论是由数学家
和气象学家Edward Norton Lornez提出的,他是混沌理论研究方面的先驱。1961年,Lornez重复地运行一段天气模拟程序,也许是为了节省时间,他把某个初始值0.506 127输成了0.506,得到的结果却和输入0.506 127时应该得到的结果完全不同。换句话说,该理论认为,一只蝴蝶在地球的另一边扇动翅膀可能会引起大规模的气候转变,从而破坏周末的沙滩度假。
我们称这种特性为“非线性”,因为初始条件变化和结果变化之间不成线性关系。初始条件的微小变化可能对结果产生巨大的影响。非线性系统是混沌系统的一个超集。在下一章,我们会看到:在一个由0和1组成的系统中,即使只改变其中的一个比特位,结果也会完全不同。
-
竞争和合作
复杂系统的元素之间往往同时存在竞争和合作关系。
后面的群集系统将引入3个规则:协调、一致和分离。
- 协互“合作”——也就是聚集在一起并共同移动;
- 分离使个人为空间调和一致使个体相展开“竞争”。
在实现群集系统时,如果去掉竞争或合作规则,系统的复杂性可能随之丧失。
竞争和合作规则存在于有生命的复杂系统中,不存在于无生命的复杂系统中,比如气候系统。
-
反馈
- 复杂的系统通常包括一个反馈回路,系统的输出被反馈回系统,在正方向或反方向上影响自身行为。
- 举个例子,因为油价比较低,所以你每天开车上下班。在这种情况下,每个人都会开车上下班,导致汽油供不应求,油价因此上升。因为开车上下班的成本太高了,于是大家决定坐地铁上下班,汽油的需求变少,油价也随之降低。
- 油价同时是系统(决定你是开车还是坐地铁)的输入和输出(从需求中得到的结果)。需要特别指出的是,经济模式(如供应/需求,股市)就是人类复杂系统的一个例子。其他例子包括潮流和趋势、选举、人群和车流。
- 复杂性将是本书剩余部分的一大主题。接下来,我们将在Vehicle类中加入查看周围小车对象的能力。