第77行: |
第77行: |
| 2013年,SpringerOpen/BioMed Central 推出了一个开放的在线获取期刊平台,其主题就是关于'''复杂适应性系统建模(CASM)'''。<ref>Springer ''[https://casmodeling.springeropen.com/ Complex Adaptive Systems Modeling Journal]'' (CASM)</ref> | | 2013年,SpringerOpen/BioMed Central 推出了一个开放的在线获取期刊平台,其主题就是关于'''复杂适应性系统建模(CASM)'''。<ref>Springer ''[https://casmodeling.springeropen.com/ Complex Adaptive Systems Modeling Journal]'' (CASM)</ref> |
| | | |
| + | ===Swarm介绍=== |
| + | ===Swarm的背景=== |
| + | |
| + | Swarm是析复杂适应系统建立模型而设计的软件平台。1995 年SFI 发布了Swarm 的beta 版,此后,大约30个用户团体已经安装了Swarm并用它积极地开展建模工作,并完成了一定的论文。Swarm已经帮助提供了讨论模拟技术和方法论的焦点,还提供在特定的研究团体中模型组件和库的共享,这是智力交换的一个重要形式。最终,建立一个用于模型定义的形式化框架建立一个特定用于实验科学工具的计算机程序的必要标准。 开发Swarm 的目的就是通过科学家和软件工程师的合作制造一个高效率的可信的可重用的软件实验仪器,它能给予科学家们一个标准的软件工具集,就象提供了一个设备精良的软件实验室帮助人们集中精力于研究工作而非制造工具。 Swarm 实际上是一组用Objective-C 语言写成的类库,这是一种面向对象的C 语言。一部分图形界面,如图表、按钮和窗口,是用TCL/TK 描述的。Swarm 最初只能在Unix 操作系统和X Windows 界面下运行,1998 年四月伴随着 1 .1版的发布,Swarm 推出了可以在Windows 95/98/NT 上运行的版本。1999 年Swarm又提供了对Java 的支持,从而使Swarm 越来越有利于非计算机专业的人士使用。 Swarm的建模思想就是让一系列独立的Agent通过独立事件进行交互,帮助研究由多个体组成的复杂适应系统的行为。通过这些类库包括许多可重用的类以支持模拟实验的分析、显示和控制,即用户可以使用Swarm 提供的类库构建模拟系统使系统中的主体和元素通过离散事件进行交互。由于Swarm 没有对模型和模型要素之间的交互作任何约束,所以Swarm 可以模拟任何物理系统、经济系统或社会系统。事实上在各个广泛的研究领域都有人在用Swarm 编写程序,这些领域包括生物学经济学物理学化学和生态学等。 |
| + | |
| + | |
| + | ===Swarm的逻辑结构 === |
| + | |
| + | Swarm中最主要的四个部分,往往也是一个Swarm模拟程序经常包括的四个部分是:模型swarm(ModelSwarm)、观察员swarm(ObserverSwarm)、模拟主体和环境。 |
| + | |
| + | |
| + | ====模型“swarm”==== |
| + | |
| + | Swarm就是许多个体(对象)组成的一个群体,这些个体共享一个行为时间表和内存池。显然“Swarm”有两个主要的组成部分:(1)是一系列对象(Object);(2)这些对象的行为时间表(Action)。时间表就像一个索引引导对象动作的顺序执行。 |
| + | - 对象。 |
| + | 模型“swarm”中的每一项对应模型世界中的每一个对象(个体)。“swarm”中的个体就象系统中的演员,是能够产生动作并影响自身和其他个体的一个实体。模拟包括几组交互的个体。例如,在一个经济学模拟中,个体可能是公司、证券代理人、分红利者和中央银行。 |
| + | - 时间表。 |
| + | 除了对象的集合,模型“swarm”还包括模型中行为的时间表。时间表是一个数据结构,定义了各个对象的独立事件发生的流程,即各事件的执行顺序。通过确定合理的时间调度机制,可以使用户在没有并行环境的状况下也能进行研究工作,也就是说,在并行系统下agent之间复杂的消息传送机制在该swarm中通过行为表的方式可以在单机环境下实现。例如,在狼/兔子这个模拟系统中可能有三种行为:“兔子吃胡萝卜”,“兔子躲避狼的追踪”和“狼吃兔子”。每种行为是一个独立的动作。在时间表中,对这三种行为按照以下顺序排序:“每天,兔子先吃胡萝卜,然后它们躲避狼的追踪,最后狼试图吃兔子”。模型按照这种安排好的事件的执行顺序向前发展,并尽量使这些事件看起来象同步发生的。 |
| + | - 输入输出。 |
| + | 模型“swarm”还包括一系列输入和输出。输入是模型参数:如世界的大小,主体的个数等环境参数。输出是可观察的模型的运行结果:如个体的行为等等。 |
| + | |
| + | |
| + | ====观察员“swarm”==== |
| + | |
| + | 模型“swarm”只是定义了被模拟的世界。但是一个实验不应只包括实验对象,还应包括用来观察和测量的实验仪器。在Swarm计算机模拟中,这些观察对象放在一个叫观察员“swarm”的“Swarm”中。 观察员“swarm”中最重要的组件是模型“swarm”。 它就像实验室中一个培养皿中的世界,是被观测的对象。观察员对象可以向模型“swarm”输入数据(通过设置模拟参数),也可以从模型“swarm”中读取数据(通过收集个体行为的统计数据)。 |
| + | |
| + | 与模型“swarm”的设置相同,一个观察员“swarm”也由对象(即实验仪器),行为的时间表和一系列输入输出组成。观察员行为的时间表主要是为了驱动数据收集,即从模型中将数据读出,并画出图表。观察员“swarm”的输入是对观察工具的配置,例如生成哪类图表,输出是观察结果。 |
| + | 在图形模式下运行时,观察员“swarm”中的大部分对象被用来调节用户界面。这些对象可能是平面网格图,折线图或探测器,它们一方面与模型“swarm” 相连以读取数据,同时把数据输出到图形界面,为用户提供了很好的实验观察方式。 实验结果的图形化有助于直觉地判断,但重要的实验都需要收集统计结果。这意味着要做更多地工作并存储用于分析的数据。作为图形观察员“swarm”的另一种选择,你可以建立批处理“swarm”(batch swarms)。它和用户之间没有交互操作。它从文件中读取控制模型的数据并将生成的写入另一个文件中用于分析。它这只是观察方式不同罢了。 |
| + | |
| + | |
| + | ====模拟主体==== |
| + | |
| + | swarm不仅是一个包含其它对象的容器,还可以是一个不包含其它对象的主体本身。这是最简单的“swarm”情形,它包括一系列规则、刺激和反应。而一个主体自身也可以作为一个“swarm”:一个对象的集合和动作的时间表。在这种情况下,一个主体“swarm”的行为可以由它包含的其它个体的表现来定义。层次模型就是这样由多个“swarm”嵌套构成。例如,你可以为一个居住着单细胞动物的池塘建立模型。在最高层,生成包括个体的“swarm”:“swarm”代表池塘而每个个体代表池塘里的一个动物。动物的细胞也可以看作是由多个个体(细胞质)组成的“swarm”。这时需要连接两个模型,池塘作为一个由细胞组成的“swarm”,细胞也作为一个可分解的“swarm”。 |
| + | |
| + | 还由于“swarm”可以在模拟运行过程中建立和释放,Swarm可用来建立描述多层次的动态出现的模型。 通过建造模型“swarm” 和观察员“swarm”, 将模型和数据收集分离开,一个完整的实验仪器就建立起来了。就像一个玻璃下的模拟世界,不同的观察员“swarm” 可用来实现不同的数据收集和实现控制协议,但是模型本身没有发生变化。 |
| + | |
| + | |
| + | ====环境==== |
| + | |
| + | 在一些模型中,特别是在那些具有认知部件的个体模拟中,系统运动的一个重要因素在于一个主体对于自己所处环境的认识。Swarm的一个特点就是不必设计一个特定类型的环境。环境自身就可以看作一个主体。通常情况下,主体的环境就是主体自身。 |
| | | |
| == 复杂性的演变 Evolution of complexity == | | == 复杂性的演变 Evolution of complexity == |