首页 理论教育 Swarm应用示例:详解7.2.4版本功能特性

Swarm应用示例:详解7.2.4版本功能特性

时间:2023-07-23 理论教育 版权反馈
【摘要】:本节首先介绍Swarm在人工生命领域应用的一个典型例子——热虫,然后,介绍一个生命游戏模型实例。例子虽然简单,但它能很好地帮助我们理解Swarm的相关概念。图7.12模型中可调整的参数观察员Swarm同样也是Swarm类的一个子类,因此它也应该是由一组对象、对象行动时间表和输入输出组成。在这个模型中,观察员Swarm图表对象是每一时刻二维平面方格的生命数。被观测的生命主体数由模型Swarm中的Life being list决定。

Swarm应用示例:详解7.2.4版本功能特性

本节首先介绍Swarm在人工生命领域应用的一个典型例子——热虫,然后,介绍一个生命游戏模型实例。

1.热虫

热虫(Heatbug)是由SFI提供的一个标准的Swarm应用范例,它形象地显示了由一些简单的仅根据局部信息进行运作的Agent所构成的系统是如何产生复杂的系统行为的。例子虽然简单,但它能很好地帮助我们理解Swarm的相关概念。

(1)系统模型。由于该系统过于简单,关于各种分析和建模的步骤在这里只做我们简单叙述。整个系统的基本构成单位是Agent,每个Agent代表一个热虫(一种生物)。很显然,热虫有其活动的时空范围(即环境),在Swarm中将其称为World,在该模型中,World有空间属性(热虫所处的位置)和热量(它在系统运作的过程中不断地产生并散失)。Swarm提供了二维的显示平面来显示World和在其中运行的所有Agent(点或方框),如图7.9所示,其中每个小点表示一个热虫Agent。

系统中的每个Agent(即热虫)都会放出少量的热量,而且每个Agent都有一个理想的温度,在这个温度下,Agent将感到最舒服。系统本身是一个简单的离散时间模型,在每个时间步,每个Agent,只知道附近点的温度(即局部信息),它们寻找并移到一个临近的点以使自己舒服些,然后放出少量热量。一个Agent自身不能产生足够的热量以使自己舒服,所以在整个运行时间内,它们倾向于聚集在一起以产生足够的热量,以使自己感到舒服。

图7.9 热虫World

(2)系统仿真分析。我们可以将热虫系统看作一个优化问题,即每个热虫都努力使自己不舒服的温度最小化。运行该系统的Swarm模型后,我们可以利用Swarm所提供的分析工具,得到如图7.10所示的曲线,由此可以看出所有热虫的平均不舒服温度正被优化。这个曲线仅代表Swarm所收集的数据集合的一小部分,Swarm系统支持分析从系统构件(Agent)提取数据的各种方法,如将这些数据通过统计过滤器后,用可视化对象来显示,并将数据存储到文件中。

图7.10 系统中所有热虫的平均不舒服程度随时间的变化曲线

经过模型的运行,我们可以看出,虽然每个Agent的行为很简单(发热、移动),它所知道的信息也很有限(仅知道相邻点的温度),但是最后整个系统出现了如图7.9所示的聚集的复杂系统现象。

2.康威的人工生命游戏

(1)模型的背景。“生命游戏”模型是《复杂》一书中描述的一个例子,这个例子源于英国科学家约翰·康威(John Conway)在1970年设计的一个游戏,即在一个二维平面方格中,布满了“活着的”的黑方块和“死了的”白方块,最初的图案可以由游戏者任意摆布。一旦这个游戏开始运作后,这些方块就会根据很少的几条简单规则“活过来”或“死过去”。每一代的每一个方块首先要环顾其四周的近邻,如果近邻中有太多活着的方块,则这个方块的下一代就会因为太拥挤而死去;如果其近邻中存活者过少,则这个方块就会因为孤独而死去,但如果其近邻中存有2个或3个活着的方块,则比例恰到好处,这个方块的下一代就能存活下去。也就是说,要么是这个下一代活着,并能够继续存活下去,要么是这个下一代死去,产生新的一代。

规则就这么简单。这些规则只是一种漫画式的生物学,然而“生命游戏”模型的奇妙处就在于此,当我们将这些简单的规则变成一个计算机程序之后,就好像真的能够让计算机屏幕“活”起来。如果我们用心观察,就可以看到计算机屏幕上沸腾着各种活动,就像是在显微镜下观察一滴池塘水里的微生物一样。开始时,你可以随意设置一些活着的方块,可以观察到它们如何很快自组织成各种连贯一致的结构。其中有的结构在翻滚,有的结构在振荡。你还会发现“滑翔机”,即一小簇以常速滑过屏幕的活细胞。你还会看到稳定的发射出新“滑翔机”的“滑翔机枪”,以及吞噬“滑翔机”的其他结构。每重玩一次,出现在屏幕上的图案都会有所不同,无法穷尽其可能性。

(2)模型的设计。在这个模型中,采用基于Agent的建模方法,赋予模型一个真实的微观基础。这里,采用32×32的二维平面方格,则共有1 024个“活着”或“死去”的生命实体。这种模拟应该更能避免一些误差情况的出现。生命在模型中,每一代“活着的”生命都要向其四周探测是否有别的生命,并统计其四周生命的数量,如果不等于2个或3个,则该生命就会死去。所以,在方位[x,y]的“生命”主体L的下一代是否能生存下去就要看其周围的“活的”生命数:n Friends+=get Active of X$Y(x+i,y+j),其中,(i,j)∈[-1,1],get Active of X$Y(x',y')为取得[x',y']处“生命”状态的函数。

这样除主体L本身外,共要探测其周围8处位置的状态,如图7.11所示。(www.xing528.com)

图7.11 生命体周围的8处位置

(3)模型的实现。根据前面介绍的Swarm的逻辑结构来分析,在该模型中,各类主体包含了哪些类以及它们各自都起到了什么作用?

“生命游戏”中的模型Swarm同样也包含一组主体、模拟主体行动的时间表和模型的输入与输出,在“生命游戏”中,主体行动的顺序为,首先每个主体探测其周围“活着的”生命数,然后统计生命数,根据事先规定好的规则变成死亡状态或继续生存下去,最后所有的主体形成一个新的生命图案。图7.12展示了模型中可调整的参数,这也就是模型的输入。

图7.12 模型中可调整的参数

观察员Swarm同样也是Swarm类的一个子类,因此它也应该是由一组对象、对象行动时间表和输入输出组成。在这个模型中,观察员Swarm图表对象是每一时刻二维平面方格的生命数。被观测的生命主体数由模型Swarm中的Life being list(生命状态表)决定。

在这个模型中,模拟主体只有一个类,就是“生命”。环境是指示模型中的一个主体,即“生命”主体的生存空间。在本模型中,由于规则比较简单,没有涉及环境和“生命”主体之间的信息传递,“生命”主体从而也不用从环境主体中获取信息、积累经验,所以本模型中可以不用考虑环境主体。

从以上分析,可以了解各个对象之间的关系如图7.13所示。

图7.13 各个对象之间的关系图

(4)运行结果

由图7.14可以看出,在系统开始运行的一段时间里,生命的总个数逐渐上升,最后稳定在一个比较中性的水平上。因为在32×32的二维平面方格中共有1 024个“活着”或“死去”的生命实体。而在图7.14中,可看出系统在运行了一段较长的时间后,“生命”的总数稳定在一个较小的区间[375,450]中,同时也看到系统并没有处于一种静态的平衡状态中,而是处于一种动态的丝毫不能安顿下来的状态之中,似乎在这个系统中存在着一种永不静止的动力使“生命”图案能够不断生长、分裂和重组,生命似乎也确实是试图在混沌的边缘保持永远的平衡。一方面始终处于陷入过分秩序的危险之中,另一方面又始终被过分的混乱所威胁。

图7.14 系统运行100次(上)和运行5 000次(下)时的状态图

通过这个模型,我们可以领略到由几条简单的规则所产生的令人惊奇的复杂现象,而这一点正是我们在对复杂系统中的规则发现和适应性学习等内容的研究中要深入探讨的。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈