张运坤 ,刘 磊,张勇强
(1.邯郸学院 信息工程学院,河北 邯郸 056005; 2.中铁十八局集团第五工程有限公司,天津 300450)
基于Agent的建模仿真相对于一般数学建模而言,在解决离散、非线性系统模拟方面有显著优势,是研究复杂系统产生的全局、自适应行为的一个基本方法。它主要有封装在计算机系统中的Agen、Agent间的相互作用、Agent所在的组织结构三个基本要素组成。建模者的任务是定义系统中具有自适应性的Agent,然后赋予它们必要的行为规则和合适的参数,让它们在一个系统中进行博弈。
Repast是目前使用较多的基本Agent的建模与仿真平台之一,通过在Repast平台上进行可控制和可重现的仿真实验,观察分析仿真过程中的表格、图表和图标显示的输出结果,进一步研究Agent的行为[1]113-117。
Agent(主体)是一个计算机硬件或者软件系统实现的对象,其组成之间以及与所在的环境之间存在着某种特定的关系,能够连续不断地感知外界的变换及自身的状态变化,并能自主的产生响应动作。即具有主动学习和适应性。
基于Agent模型主要特征是,即便Agent的设计只遵循一些简单的规则,集体的行为也会由于Agent并发引起的非线性变化而呈现非常复杂的模型。在传统的建模中,目的是面向规划或者仿真用物体作为实体去实现任务。物体缺乏开发意想不到的选择去寻找目标或者情况的智能,因为他们仅能遵循用户或其他物体提供的操作指南。如果其他物体或者用户不能及时的提供策略,他们就不能同时的更新。自治是基于Agent建模的一个关键特征[2]。一个自治的Agent可以用自己的引擎或者智能执行任务来解决问题,不需要额外的从用户或其他Agent的介入。它可以对应不同的情况和应用选择性的策略去寻找适当的目标。但是,自治可能会在不同的代理的利益上导致冲突。在这种情况下,一个特殊的Agent分配来协调和解决这些矛盾。
基于Agent的建模方法是一种自底向上的建模方法,把Agent作为系统的基本抽象单元,先建立组成系统的个体Agent模型,然后采用适合的多Agent系统结构MAS(Multi-Agent System)来组装这些个体Agent,最终建立起系统模型。[3]13-16
Repast (Recursive Porous Agent Simulation Toolkit)是芝加哥大学的社会科学计算研究中心设计的一个基于Agent的类Swarm的模拟软件架构。它提供了一系列用以生成、运行、显示和收集数据的类库,并能对运行中的模型进行“快照”,记录某一时刻模型的状态。其主要的设计目标集中在仿真框架的抽象、可扩展性以及高性能仿真上。[4]
Repast现在由非赢利组织机构ROAD(Repast Organization for Architecture and Development)来维护。Repast的核心部分可以看作是对基于Agent建模服务的规范。它包括三个具体的工具,这些工具都有着相同的内核服务,而区别仅在于底层平台和模型开发语言的不同。
Repast可以在现有的所有计算平台上应用,包括Windows,Mac OS和linux。这个平台支持个人计算机者和大型科学计算的群体使用。[5]18-20Repast的支持实现模型的特征有三个特性和四个机制:
(1)Repast在Agent中支持非线性即使他们的行为完全的被用户设计。Repast的系统动态行,遗传算法,神经网络,随机数生成和社会网络库使得他们的程序变得简单。
(2)Repast支持多样性,即通过给用户完全的控制权来定义定义代理和初始化。另外,Repast库简明的介绍了多样性。
(3)Repast允许用户指定和保持Agent组的集体特征。
(4)Repast支持了特征的流动机制,例如它的系统动态工具和社会网络库。
(5)Repast支持标签机制为Agent显示任意的标记。
(6)Repast通过agent的灵活定义和更多的行为库使得内在模型机制可用。
(7)Repast支持基于目标的多态性的建筑块机制。
Repast实际上是一组类库,提供了用于Agent仿真建模的各种基类。建模者可以通过直接使用这些类或者从这些继承子类来构造自己的模型。Repast主要的类库有:分析(Analysis)库,用来聚集、记录数据以及建立数据表;引擎(Engine)库,负责建立、操纵以及运行一个模拟模型;图形用户界面(GUI)库,负责实现模拟模型的图形可视化;空间(Space)库,通过恰当的接口有效地描述了各种类型的空间,与GUI库中的显示类联合工作,可实现它们所包含的空间以及对象的可视化;使用工具包(Util)库,提供了仿真程序的常用静态方法。
热虫(Heatbug)模型是由 SFI提供的一个标准的应用范例,显示了由一些简单的、仅根据局部信息进行动作的Agent构成的系统是如何产生复杂的系统行为的。
整个系统的基本构成单位是 Agent,每个Agent代表一个热虫(一种生物)。很显然,热虫有其活动的时空范围(即环境),在 Repast中将其称为Space。在该模型中,Space有空间属性(热虫所处的位置)和热量(它在系统动作的时间内不断的产生并散失)。Repast提供了2维的显示平面来显示Space和在其中运行的所有Agent(点或方框)如图1、图2。
系统中的每个Agent(即热虫)都会放出少量的热量,而且每个Agent还有一个理想的温度(在这个温度下,Agent将感到最舒服)。系统本身是一个简单的离散时间模型:在每个时间步,每个Agent(只知道附近点的温度,即局部信息)寻找并移到一个临近的点以使自己舒服些,然后放出一点热量。一个Agent自身不能产生足够的热量以使自己舒服,所以在整个运行时间内,它们倾向于聚集在一起以产生足够的热量,以使自己感到舒服。
图1 系统初始状态
图2 运行一段时间的系统状态图
依据Repast设计思想,热虫模型共分为三个类:Heatbug模型类(HeatBug)、仿真模型类(HeatBugsModel)和热度空间模型类(HeatSpace)。Heatbug模型类封装Heatbug的行为和执行规则;仿真模型类继承自SimModelImp 1,实现SimModel接口,负责仿真的建立和运行;热度空间模型类继承自Diffuse2D,用于描述热虫居住的环境。[6]1-25
模型实现分为三个步骤:第一步是建立模型,通过仿真模型类中的setup和buildModel两个方法实现。在仿真模型类中有一个由SimModel提供的Agent列表,用于存储创建的Agent(热虫),仿真时首先执行setup方法进行仿真基本信息的建立,然后执行buildModel方法创建规定数量的热虫Agent并加入到Agent列表中;第二步是建立显示机制,通过仿真模型类中的buildDisplay方法实现,负责将热虫模型的运行结果显示在屏幕上;第三步是建立时间序列机制,由仿真模型类的step和buildSchedule两个方法实现。首先实现step方法以确定在每一次仿真运行中模型的行为,然后将step方法作为参数加入到时间序列表中。
热虫模型采用Java语言并在Java开发平台(Eclipse)上进行开发和实现。模型完成后,即可将模型加入到Repast仿真平台中。通过该仿真平台,建模人员可以运行模型,收集运行结果,从而对系统的复杂适应性进行分析。[7]13-15
模型参数选择如图3所示,系统的初始状态见图1。
经过模型的运行,可以看出:虽然每个Agent的行为很简单(发热、移动),它所知道信息也很有限(仅知道相邻点的温度),但经过运行一段时间后整个系统出现了图2中那样聚集的复杂系统现象。
图3 模型参数图
Repast为基于Agent建模仿真构建了一个灵活、简洁、健壮的可扩展平台,本文只是给出了简单的模型及仿真实例,在Heatbug模型,仿真,热度空间等模型下进行了简化的处理。随着研究的进一步深入,我们将通过仿真框架中的模型参数及规则的动态扩展,不断的完善Heatbug模型,并将深入的学习基于Agent的模型的建模仿真。
[1]廖守亿,戴金海.复杂适应系统及基于Agent的建模与仿真方法[J].系统仿真学报,2004,16(1).
[2]Swarm Development Group.Documentation set for swarm 2.1.1 .2002.
[3]李宏亮,金士尧,沈锐,等.Cluster环境中多Agent系统分布仿真的容错技术[J].计算机工程与科学,2001,23(5).
[4]王红卫.建模与仿真[M].北京:科学出版社,2002.
[5]方美琪,张树人.社会经济系统复杂性探索[M].北京:中国人民大学出版社,2005.
[6] Michael J North, Nicholson T Collier and Jerry R Vos.Experiences Creating Three Implementations of the Repast Agent Modeling Tool2kit [J].ACM Transactions on Modeling and Computer Simulation.2006, 16 (1) .
[7]M J North, T R Howe, N T Collier and J R Vos.Repast Simphony Runtime System[C].In Proceedings of the Agent 2005 Conference on Generative Social Processes, Models, and Mechanisms, 2005,10.