2.3 计算机仿真工具
能够实现复杂适应系统仿真的工具有Swarm、Repast、MASON和NetLogo,下面将针对本研究中所使用的Repast平台和NetLogo平台加以简单介绍。
2.3.1 Repast平台
1.Repast简介
Repast(Recursive Porous Agent Simulation Toolkit)是由芝加哥大学的社会科学计算研究所中心开发研制的一个基于主体的计算机仿真软件架构。它是一种在Java语言环境下用以设计生成基于主体的模拟模型的软件架构,提供了一系列用以生成、运行、显示和从一个基于主体的模拟平台收集数据的类库。此外,Repast还能够对运行中的模型进行“快照”,以及生成模型运行的影响资料。
图2-1 Repast建模流程
用Repast进行计算机建模,其建模的步骤如图2-1所示。第1步,对模型中的主体进行抽象并分析主体之间的关系;第2步,选择用哪种方式来控制模型的执行;第3步,封装主体的属性和行为;第4步,构建主体赖以生存的空间类;第5步,确定输入输出;第6步,进行仿真。
Repast仿真工具为开源项目,可聚集众多开发者的智慧,任何个人或机构都可以为完善软件平台贡献力量。由于Repast采用纯Java语言实现,因此与其他软件的兼容性强,具有良好的可扩展性,其本身还集成了多个第三方的Java类库。例如,它集成了可以高效生成多种分布类型的随机数类库Colt,还集成了遗传算法类库jgap,用户在建立Repast仿真模型时还可以使用其他类库。Repast平台不仅为多主体仿真提供了大量的基础性功能,还为仿真模型的实现提供了一个编程框架。它大量采用了模板方法、抽象工厂等软件设计模式来提高编程框架的通用性,软件设计模式的采用也提高了仿真模型的模块化程度。Repast平台的技术支持力度高,扩展性好,且易于使用。
2.Repast运行原理
Repast模型有两种运行方式:批处理运行方式和非批处理运行方式(也称为图形交互方式)。批处理运行需要一个特殊格式的参数文件,在这个文件中要详细给出模型各个参数的起始值、增量值和终止值,以及运行的次数等。有了参数文件后,模型就可以无须用户干预而自动连续重复运行。而非批处理运行则需要通过图形用户界面来交互地启动和终止模型。用户可以通过图形界面来设定模型的初始参数值,还可以在运行中监控主体和模型的各种状态。
Repast建模相当于设计一个状态机,状态机的核心状态是模型中的所有成员的集体状态属性集合。成员则分为底层结构和表层结构。底层结构是各种各样用于运行模型、显示和收集数据等架构的机制;表层结构是设计者创立的模型。底层机构的状态就是模型的种种显示状态、数据收集对象的状态等;表层结构的状态指模型的描述状态,比如所有主体变量的当前值,模拟环境空间的当前状态值。在这种状态机模式下,所有对状态机的改变都通过同一对象界面接口来实现。
2.3.2 NetLogo平台
1.NetLogo简介
NetLogo是美国西北大学网络学习和计算机建模中心(CCL)推出的一个基于多主体的可编程建模平台。它是一个基于计算机建模和仿真的软件包,能对自然系统和社会系统进行仿真,尤其适合随时间演变的复杂系统的建模。建模者可以让几百甚至几千个独立主体接收指令同时运作。这使得研究微观层面的个体行为与由于这些个体之间的相互作用而涌现出来的宏观现象之间的联系成为可能。
NetLogo不但可以基本实现各种复杂的社会现象仿真,而且能提供友好的界面来保证易学性和易用性。它使用了目前所有仿真平台中最高级的编程语言——Logo语言,非常接近人类的自然语言,因此能帮助没有太多计算机编程基础的研究者较快掌握使用技巧,进而实现研究设想。
2.NetLogo运行原理
在NetLogo中,主体分为三类:海龟(turtles)、块(patches)和观察员(observer)。其中,海龟和块构成仿真世界,观察员可以观察和控制仿真世界的运行。海龟可以代替现实世界中的任何一种有活动特性的物体,如一只昆虫、一辆汽车、一个人或一棵树;而块则代表了海龟所生存的环境,若干个块构成整个环境(canvas),如一片绿叶、一条道路、一个城市或一片土地。通过对海龟和块进行编程,即为之设定各种属性和运行规则,就可以并行地控制成千上万的海龟和块,使其具有自己的变化方式,并彼此进行交互作用。这里的交互作用包括海龟和块的交互及海龟和海龟的交互,前者体现了主体与环境的关系,后者则体现了主体之间的关系。