1、Click to edit Master title style,Click to edit Master text styles,Second Level,Third Level,Fourth Level,Fifth Level,复杂系统建模与仿真,第四章 多主体系统仿真的软件工具,建议,10,课时,第,1,,,2,节,4,课时,34,节,2,课时(部分内容可略过),中国人民大学经济科学实验室,张树人,一般工作原理和步骤,能够编写,Swarm,经济社会 模型,大纲,第一节 综述,第二节,.Swarm,第三节,Repast,第四节,Ascape,Swarm,:基于,CAS,理论的 模拟平台,
2、SWARM,主要内容,CAS,理论简介,SWARM,介绍,SWARM,的诞生,发展历史,简介,建模思想,结构,类库,建模流程标准化,模型实例,SWARM,介绍,SWARM,的诞生,发展历史,简介,建模思想,结构,类库,建模流程标准化,模型实例,CAS,理论简介,CAS,理论简介,所谓复杂适应系统,是指系统与外部环境交互作用的过程中,通过自适应改变系统本身的组织结构和行为特点,从而不断向前发展和演化。,将组成系统的元素视为具有适应性的主体,简称主体,所谓具有适应性,是指它能够与环境以及其他主体进行交互作用,在这种交流的过程中不断“学习”或“积累经验”,并根据学到的经验改变自身结构和行为方式。,复
3、杂适应系统理论强调主体行为是系统进化的根本动因,其核心思想是适应性造就复杂性,这一理论对于生态、物理、经济、社会等领域的研究具有很强的指导意义。,SWARM,介绍,SWARM,的诞生,发展历史,简介,建模思想,结构,类库,建模流程标准化,模型实例,CAS,理论简介,SWARM,的诞生,在科学研究,特别是复杂系统的研究中,人们常常要借助计算机来完成他们的工作。,为了使计算机建模成熟起来,我们需要一个工艺精良的,标准的软件工具集。,SWARM,的诞生(续),从,1994,年开始,圣菲研究所(,SFI,)开展了一个研究项目,以开发一个工具集来研究复杂适应系统,从而将建模者们从编写程序的繁琐劳动中解放
4、出来,可以将精力集中于他们所研究的专业领域。,这个模拟工具集就叫做,Swarm,。,1995,年,SFI,发布了,Swarm,的,beta,版。,SWARM,介绍,SWARM,的诞生,发展历史,简介,建模思想,结构,类库,建模流程标准化,模型实例,CAS,理论简介,SWARM,发展历史,Swarm,最初只能在,Unix,操作系统和,X Windows,界面下运行。,1998,年四月,伴随着,1.1,版的发布,,Swarm,推出了可以在,Windows 95/98/NT,上运行的版本。,1999,年,,Swarm,又提供了对,Java,的支持,(在此之前只能使用,Objective-C,)从而使
5、Swarm,越来越有利于非计算机专业的人士使用。,SWARM,介绍,SWARM,的诞生,发展历史,简介,建模思想,结构,类库,建模流程标准化,模型实例,CAS,理论简介,SWARM,简介,Swarm,是一个用于复杂适应系统(,CAS,)模拟的多主体软件平台。,Swarm,用来支持建模者对复杂适应系统的研究使用多主体模拟(,Multi-Agent Simulation,)的方法开展研究工作。,SWARM,简介,(,续,),用户可以使用,Swarm,提供的类库构建模拟系统,使系统中的主体和元素通过离散事件进行交互。,SWARM,可以用于各个广泛的研究领域,比如说生物学,经济学,物理学,化学和生态
6、学等。,CAS,理论简介,SWARM,介绍,SWARM,的诞生,发展历史,简介,建模思想,结构,类库,建模流程标准化,模型实例,SWARM,建模思想,Swarm,的整个思想是提供一个执行环境,在这个环境中,大量的对象能够“生活”,并以一种分布式的并行方式互相作用。,在,Swarm,上的很多工作并不仅仅是为了使并行性的任务易于管理,而且是建立一种机制,使人们意识到在它们的实验装置中多个时间线程是如何互相作用的。,SWARM,建模思想(续),Swarm,支持分级建模方法,在嵌套结构中,个体可由其它个体的,swarms,所组成。,Swarm,提供了面向对象的可重用组件库,用来建模并进行分析,显示以及
7、对实验进行控制。,CAS,理论简介,SWARM,介绍,SWARM,的诞生,发展历史,简介,建模思想,结构,类库,建模流程标准化,模型实例,Swarm,的结构,一个,Swarm,模型包括,模型,Swarm,(,ModelSwarm,),观察者,Swarm,(,ObserverSwarm,),分层的“,Swarm”,可以将模型的数据收集和实现进行分离,.,Swarm,model,swarm,observerswarm,SWARM,Swarm,的递归结构,Swarm,Sub-Swarm,Agent,Schedule,The Interface,The Model,Probes,Sub-sub-Swa
8、rm,ModelSwarm,ModelSwarm,是,swarm,的子类。,ModelSwarm,中的,每,一个对,象,对应,模,型,世界,中的一个主,体。,ModelSwarm,包括,模,型中行为的时间,表。,ModelSwarm,还包括一系,列输,入和,输,出。,输,入的是,模,型,参数,,如对,象,的个,数、,初,始,值,等;,输,出的是要,观,测,的,变量,的,值,及,模,型的运行,结,果,。,ObserverSwarm,ObserverSwarm,同样是,swarm,的一个子类。,ObserverSwarm,是一个特殊的对象,它可以通过探测器接口观察其它个体。,ObserverSwa
9、rm,包括一,组,个,体,和一个行为时间,表。,ObserverSwarm,的个,体,是用来,观,测,的,探测,器以及,输,出,界,面,如图,表、,二,维,格,点等。,ObserverSwarm,的,行为时间,表用来,描述,各探测,器,采,样,的间,隔,和,顺,序。,两类,SWARM,的合并,先建,ObserverSwarm,在,ObserverSwarm,中建立,ModelSwarm,作为自身一个,subswarm,,并为它分配内存空间;,ModelSwarm,建立模型的主体,(agent),以及主体的行为。,modelSwarm create:self;,modelSwarm buildO
10、bjects;,modelSwarm buildActions;,modelSwarm activateIn:self;,-,create:aZone;,-buildObjects;,-buildActions;,-activateIn:,swarmContext;,Observer,Model,Model,Swarm,建模,Animate agents,Inanimate agents,模型,观察者,Integration of Swarm activities,Operating System,Swarm kernel,GUI,Model,CPU,Sub-Swarm,ModelSwarm,
11、ObserverSwarm,Swarm kernel,CAS,理论简介,SWARM,介绍,SWARM,的诞生,发展历史,简介,建模思想,结构,类库,建模流程标准化,模型实例,SWARM,类库的简介,SWARM,有七个核心库,:,defobj,,,collection,,,random,,,tkobjc,,,activity,,,swarmobject,和,simtools,。,前四个是支持库,有可能在,Swarm,之外用到;后三个是,Swarm,专有的类库。,目前,,Swarm,还为建模提供三个领域相关的库:,space,、,ga,和,neuro,。,可以将自行编写的库文件加入到其中。,Swa
12、rmobject,Swarmobject,库包括,swarmobject,和,swarm,。,Swarmobject,是所有模拟主体的,根,类,,它,定,义,了,内存管,理的,接口,,并提供对,探,测,器(,probe,),的支持。,Swarm,是模型的总控,,,ModelSwarm,和,ObserverSwarm,都是,从,这一基类,继承的,。,Major Activity classes,ActionGroup,Actiongroup,相当于一系列动作的计划,它由对主体建立的一系列动作所构成。,ActionGroups,把在同一时间各个主体的不同行为集合在一起。,Schedule,时间表是
13、模型运行的时序列表,用户可以将周期性执行的动作按顺序放入这个数据结构中,并指明运行间隔和触发条件,就可以按照这个约定运行而不需人为的干预。,Simtool,Simtool,库中包括支持,探,测,器(,probe,),的类,可以在模型的,运行,过程中观,察,或,修,改变,量(可增加,agent,)。,Simtools,还提供数,据,分析和显示支持的工具,能,够,产生统,计,数,据汇总以及画时序图,等等功能。,The Probe,Swarm,对标准面向对象编程的一个发展是探测器技术,探测器的主要功能,在,Swarm,模型中,实时观测所有主体的行为。,为建立,GUI,提供有效数据。,探测器,主体,E
14、xecutes method,Input value for variable,Open probe for class,Close probe,Collection,Collection,提供了一系列对象的列表。,Swarm,支持向一个,列表,中的所有对象传,递,消息,还可以将列表中的对象按某个属性排序。,Collection,主要的子类包括,Array,List,Set,和,Map.,Collection,List,Keyed,Collection,Array,Map,Set,List,list,是根据建立成员的先后顺序建立的一个线性列表,KeyedCollection,Map,建立从,k
15、ey objects,到,member objects,的联系。,Map,定义了从,key values,到,member values,的映射。,Set,Set,中的每一个主体的,key value,是由主体自身确定的,它是和,主体一一对应的。,Array,Array,是,collecton,成员的集合。,通过这个固定的数据结构,根据每一个成员偏移量,,能够很快计算出它的位置。,Ramdom,Ramdom,库提了一,套随机,数生,成器。,Swarm,的,随机,数库支持,正态,分,布、,均,匀,分,布、指,数分,布,等多种,随机,分,布。,Ramdom,被分为,Distributions,和,
16、Generators,Generators,.,Distributions,.,random,随机数列的产生,从某种分布中获取随机数序列,需要,一个,generator,对象,必须提供一个产生随机数序列的“种子”(,seed,),这也是,generator,的主要功能。,一个,distribution,对象,产生随机数的序列,Generator,Distribution,seed,random,随机数序列,number,Defobj,Defobj,中提供了对消息、,错误,处理、,调试,和,内存,分,配,的支持。,增强,了,Objective-C,的,功,能。,支持对象,界,面,并能够实现分,离
17、从,而使,Swarm,编写,的程,序,的,层次,性,更加清晰。,Space,Space,是一个简单的空间库。,包括一系列用于二维离散模型的类。这些空间类型在生态系统模拟中经常用到。,Space,中的类大多数是从,Grid2D,,一个可以在指定格点上存储对象和整型值的二维数组继承得来。,Graphical User Interface,(,GUI,),GUI,对象可提供如下管理,曲线图表,柱状图,主体随时间变化情况的反应,在这个过程中,要进行数据的收集,计算以及实时更新,Tkobjc,ZoomRaster,定义显示光栅图,Graph,定义图表,Histogram,显示柱状图,Raster,Gr
18、aph,Histogram,Widget,ZoomRaster,CAS,理论简介,SWARM,介绍,SWARM,的诞生,发展历史,简介,建模思想,结构,类库,建模流程标准化,模型实例,SWARM,的诞生,在科学研究,特别是复杂系统的研究中,人们常常要借助计算机来完成他们的工作。,为了使计算机建模成熟起来,我们需要一个工艺精良的,标准的软件工具集。,SWARM,的诞生(续),从,1994,年开始,圣菲研究所(,SFI,)开展了一个研究项目,以开发一个工具集来研究复杂适应系统,从而将建模者们从编写程序的繁琐劳动中解放出来,可以将精力集中于他们所研究的专业领域。,这个模拟工具集就叫做,Swarm,。
19、1995,年,SFI,发布了,Swarm,的,beta,版。,SWARM,发展历史,Swarm,最初只能在,Unix,操作系统和,X Windows,界面下运行。,1998,年四月,伴随着,1.1,版的发布,,Swarm,推出了可以在,Windows 95/98/NT,上运行的版本。,1999,年,,Swarm,又提供了对,Java,的支持,(在此之前只能使用,Objective-C,)从而使,Swarm,越来越有利于非计算机专业的人士使用。,SWARM,简介,Swarm,是一个用于复杂适应系统(,CAS,)模拟的多主体软件平台。,Swarm,用来支持建模者对复杂适应系统的研究使用多主体模拟
20、Multi-Agent Simulation,)的方法开展研究工作。,SWARM,简介,(,续,),用户可以使用,Swarm,提供的类库构建模拟系统,使系统中的主体和元素通过离散事件进行交互。,SWARM,可以用于各个广泛的研究领域,比如说生物学,经济学,物理学,化学和生态学等。,SWARM,建模思想,Swarm,的整个思想是提供一个执行环境,在这个环境中,大量的对象能够“生活”,并以一种分布式的并行方式互相作用。,在,Swarm,上的很多工作并不仅仅是为了使并行性的任务易于管理,而且是建立一种机制,使人们意识到在它们的实验装置中多个时间线程是如何互相作用的。,SWARM,建模思想(续),
21、Swarm,支持分级建模方法,在嵌套结构中,个体可由其它个体的,swarms,所组成。,Swarm,提供了面向对象的可重用组件库,用来建模并进行分析,显示以及对实验进行控制。,Swarm,的结构,一个,Swarm,模型包括,模型,Swarm,(,ModelSwarm,),观察者,Swarm,(,ObserverSwarm,),分层的“,Swarm”,可以将模型的数据收集和实现进行分离,.,Swarm,model,swarm,observerswarm,SWARM,Swarm,的递归结构,Swarm,Sub-Swarm,Agent,Schedule,The Interface,The Model
22、Probes,Sub-sub-Swarm,ModelSwarm,ModelSwarm,是,swarm,的子类。,ModelSwarm,中的,每,一个对,象,对应,模,型,世界,中的一个主,体。,ModelSwarm,包括,模,型中行为的时间,表。,ModelSwarm,还包括一系,列输,入和,输,出。,输,入的是,模,型,参数,,如对,象,的个,数、,初,始,值,等;,输,出的是要,观,测,的,变量,的,值,及,模,型的运行,结,果,。,ObserverSwarm,ObserverSwarm,同样是,swarm,的一个子类。,ObserverSwarm,是一个特殊的对象,它可以通过探测器接口
23、观察其它个体。,ObserverSwarm,包括一,组,个,体,和一个行为时间,表。,ObserverSwarm,的个,体,是用来,观,测,的,探测,器以及,输,出,界,面,如图,表、,二,维,格,点等。,ObserverSwarm,的,行为时间,表用来,描述,各探测,器,采,样,的间,隔,和,顺,序。,两类,SWARM,的合并,先建,ObserverSwarm,在,ObserverSwarm,中建立,ModelSwarm,作为自身一个,subswarm,,并为它分配内存空间;,ModelSwarm,建立模型的主体,(agent),以及主体的行为。,modelSwarm create:self
24、modelSwarm buildObjects;,modelSwarm buildActions;,modelSwarm activateIn:self;,-,create:aZone;,-buildObjects;,-buildActions;,-activateIn:,swarmContext;,Observer,Model,Model,Swarm,建模,Animate agents,Inanimate agents,模型,观察者,Integration of Swarm activities,Operating System,Swarm kernel,GUI,Model,CPU,Su
25、b-Swarm,ModelSwarm,ObserverSwarm,Swarm kernel,SWARM,类库的简介,SWARM,有七个核心库,:,defobj,,,collection,,,random,,,tkobjc,,,activity,,,swarmobject,和,simtools,。,前四个是支持库,有可能在,Swarm,之外用到;后三个是,Swarm,专有的类库。,目前,,Swarm,还为建模提供三个领域相关的库:,space,、,ga,和,neuro,。,可以将自行编写的库文件加入到其中。,Swarmobject,Swarmobject,库包括,swarmobject,和,sw
26、arm,。,Swarmobject,是所有模拟主体的,根,类,,它,定,义,了,内存管,理的,接口,,并提供对,探,测,器(,probe,),的支持。,Swarm,是模型的总控,,,ModelSwarm,和,ObserverSwarm,都是,从,这一基类,继承的,。,Major Activity classes,ActionGroup,Actiongroup,相当于一系列动作的计划,它由对主体建立的一系列动作所构成。,ActionGroups,把在同一时间各个主体的不同行为集合在一起。,Schedule,时间表是模型运行的时序列表,用户可以将周期性执行的动作按顺序放入这个数据结构中,并指明运行
27、间隔和触发条件,就可以按照这个约定运行而不需人为的干预。,Simtool,Simtool,库中包括支持,探,测,器(,probe,),的类,可以在模型的,运行,过程中观,察,或,修,改变,量(可增加,agent,)。,Simtools,还提供数,据,分析和显示支持的工具,能,够,产生统,计,数,据汇总以及画时序图,等等功能。,The Probe,Swarm,对标准面向对象编程的一个发展是探测器技术,探测器的主要功能,在,Swarm,模型中,实时观测所有主体的行为。,为建立,GUI,提供有效数据。,探测器,主体,Executes method,Input value for variable,O
28、pen probe for class,Close probe,Collection,Collection,提供了一系列对象的列表。,Swarm,支持向一个,列表,中的所有对象传,递,消息,还可以将列表中的对象按某个属性排序。,Collection,主要的子类包括,Array,List,Set,和,Map.,Collection,List,Keyed,Collection,Array,Map,Set,List,list,是根据建立成员的先后顺序建立的一个线性列表,KeyedCollection,Map,建立从,key objects,到,member objects,的联系。,Map,定义了从
29、key values,到,member values,的映射。,Set,Set,中的每一个主体的,key value,是由主体自身确定的,它是和,主体一一对应的。,Array,Array,是,collecton,成员的集合。,通过这个固定的数据结构,根据每一个成员偏移量,,能够很快计算出它的位置。,Ramdom,Ramdom,库提了一,套随机,数生,成器。,Swarm,的,随机,数库支持,正态,分,布、,均,匀,分,布、指,数分,布,等多种,随机,分,布。,Ramdom,被分为,Distributions,和,Generators,Generators,.,Distributions,.,r
30、andom,随机数列的产生,从某种分布中获取随机数序列,需要,一个,generator,对象,必须提供一个产生随机数序列的“种子”(,seed,),这也是,generator,的主要功能。,一个,distribution,对象,产生随机数的序列,Generator,Distribution,seed,random,随机数序列,number,Defobj,Defobj,中提供了对消息、,错误,处理、,调试,和,内存,分,配,的支持。,增强,了,Objective-C,的,功,能。,支持对象,界,面,并能够实现分,离,从,而使,Swarm,编写,的程,序,的,层次,性,更加清晰。,Space,Sp
31、ace,是一个简单的空间库。,包括一系列用于二维离散模型的类。这些空间类型在生态系统模拟中经常用到。,Space,中的类大多数是从,Grid2D,,一个可以在指定格点上存储对象和整型值的二维数组继承得来。,Graphical User Interface,(,GUI,),GUI,对象可提供如下管理,曲线图表,柱状图,主体随时间变化情况的反应,在这个过程中,要进行数据的收集,计算以及实时更新,Tkobjc,ZoomRaster,定义显示光栅图,Graph,定义图表,Histogram,显示柱状图,Raster,Graph,Histogram,Widget,ZoomRaster,CAS,理论简介,
32、SWARM,介绍,SWARM,的诞生,发展历史,简介,建模思想,结构,类库,建模流程标准化,模型实例,建模流程标准化,此规范主要是基于面向主体的建模方法的,其他建模方法(如,DYNAMO,等)可以参照它,建立符合自己特点的建模流程规范:,1,分析问题,2,第一步抽象,3,第二步抽象,4,细化设计,5,具体实现,6,结果分析,7,形成论文,形成背景说明文档,DOC_BACG_*.doc,形成模型的 时序图,/,协作图,形成模型的 类图,状态跃迁图,组件图等等,并由此生成代码的初步框架,形成模型说明文档,DOC_MODL_*.doc,形成具体程序代码,*,.java,形成结果分析文档,DOC_RE
33、SL_*.doc,形成标准化的论文,DOC_PAPR_*.doc,CAS,理论简介,SWARM,介绍,SWARM,的诞生,发展历史,简介,建模思想,结构,类库,建模流程标准化,模型实例,模型实例(从单主体到多主体),Heatbug,Mousetrap,Babysitter,Akerlof,Consume,Heatbug,模型,这是,swarm,的经典示例之一,也是,swarm,的入门,example,(与,HelloWorld,有异曲同工之妙)。,我们利用这个模型来观察简,单主体如何通过局部信息上的动作产生复杂的全局行为结果。,模型背景,在这模型中,每一个,heatbug,都是一个主体(,ag
34、ent,)。,World,有一个特殊的属性,heat,,热量经过一定的时间散发和消失。,每一个,heatbug,都放射出一定的热量,并且都有自己的一个适于自身生存的理想温度。,Heatbug,在释放热量的同时,也在向着更接近于适于自己生存的理想温度的附近的点不断移动。,单独一个,heatbug,并不能获得足够的热量继续生存,因此它们倾向于聚成一堆的生存,以便获得足够的热量。,模型的开始,随机分布着一定数量的,heatbug,。,模拟结果,结果分析,我们可以把,heatbugs,模型看作一个最优化问题:每一个,heatbug,都试图寻找自己最理想的生存环境。,每个热虫完全根据自身的需要在移动,但
35、是所有热虫平均的不满意程度呈下降趋势,也即整个系统在不断优化。,Mousetrap,模型,这是一个古老的小学的核子分裂的示例。,是对离散事件的模拟。,Swarm,同时支持离散事件和时间步进(,time-stepped,)事件。,模型背景,在地上放一些捕鼠器,每个捕鼠器(,agent,)上有两个,ping pong,球。,模型开始时中间的一个捕鼠器被触发。,当一个捕鼠器被触发,它上面的两个球将随机飞向一定的范围之内,同时出发两个捕鼠器。,将,ping pong,球的触发作为时间步进事件处理的话,在多数时间里,mousetrap,是空闲的,这样就是整个系统低效运转。,将每个,ping pong,球
36、的触发作为时间表的一个事件,显然,这样的模拟更高效。这就形成了对离散事件的模拟。,模拟结果:,结果分析,捕鼠器的触发事件开始呈上升趋势,达到一定峰值之后回落。,在有足够触发资源的情况下呈指数增长,之后由于多数的捕鼠器已被触发,受此限制,每一时刻的触发事件减少,最后趋向于,0,。所以触发事件的总量也趋于平衡。,总结,基于,CAS,理论的建模方法,Adaptive Multi-Agent,Swarm,的结构及其对模型的实现,REPAST,建模介绍,理论回顾:复杂系统无法线性分析,一般地说,在复杂性研究中,复杂系统由若干元素组成,元素间互相作从用而产生了整个系统行为特征,由于系统的行为特征不等价于组
37、成元素个体行为特征叠加之和,所以无法用传统的数量方程或回归统计进行线性分析。,理论回顾:复杂系统在简化基础上可动态推演,随着计算机的计算能力的提高,人们发现可以把复杂系统中各个因素之间的非线性关系转化为可执行的程序,以模型程序自动运行的方式推演模拟系统,从而能以简化换时间的方式对那些实际中需要长时间演化的系统进行动态仿真。这就是计算机建模方法。,理论回顾:,自底向上的多主体建模研究复杂涌现机制,在统一的形式化理论和研究框架下,多主体模型都需要实现并发控制、主体设计、多主体交互、涌现、显示、统计等功能特征,于是人们便希望能借助软件来自动化地完成一些建模设计工作。,Swarm,、,Repast,的
38、应用比较广泛,设计思想很接近也很典型,且模型开发通用,Java,语言,因此学习起来比较方便。,理论回顾:,多主体建模工具软件,多主体建模工具软件都提供了用于多主体建模的基本类库,把那些适合于所有多主体模型的共同的底层机制和功能封装起来,建模设计相当于在固定的框架基础上的二次开发。,“工欲善其事,必先利其器”,熟练掌握一种适合的多主体建模工具,往往会为复杂系统的研究带来事半功倍的效应。,目 录,1,、对,Repast,的感性认识,2,、,Repast,的简介,3,、,Repast,的思想和目标,4,、,Repast,的体系结构,5,、,Repast,的安装,6,、建模过程,7,、,Repast,
39、类库简介,1,、对,Repast,的感性认识,界面例子,1,、对,Repast,的感性认识,界面例子,三个著名的糖域模型,SugarScape,城市人口迁移仿真,财富的分配,原始经济的诞生,城市人口迁移仿真,城市人口迁移仿真,程序中,用黄色代表食物的存在,颜色越重的地方表示食物就越多。而这里为了简化设计,只是用糖来代表食物。每个迁移的人都有视野,他在迁移以前,会判断视野内食物的多少,然后向着食物最多的方向迁移。每迁移一步,他都要消耗掉一部分的自身食物,在这里设计的是,每走一步,损失,3,个糖份。,可以将人口迁移的众多因素尽可能科学、全面的纳入到程序中来,从而为城市的决策者提供改善城市生活、就业
40、社会福利等方面的支持。,为了使例子模拟的过程更接近现实生活,在例子中为人口设计了变化的指数增长函数、为作物生长率、城市资源的新陈代谢原则等等都设计了相应的函数关系。,财富分配问题,替换规则,1),当,Agent,的寿命,age,超过他的最大寿命,maxage,就会死去。,2),每个仿真周期,每个,Agent,的,age,都,+1,3),当一个,Agent,死掉的时候,环境会产生一个新的,Agent,替换这个死掉的,agent,,这个新生,Agent,的所有属性都随机的分配,包括它的最大寿命,maxage,以及它在世界中的位置。,财富分配问题,财富分配问题,随着时间的推移,财富分配不均的现象将
41、会涌现出来。也就是说少数,Agent,拥有大量的糖资源,而多数的,Agent,仅仅拥有少量的糖。,因此也可以说,财富的分配不均匀是系统自发产生的一种必然现象。这就是社会科学中著名的,马太效应,。,因为一些,Agent,可能在开始由于它的个人能力、所处地方资源的分布等等一些优势可以获得较多的资源糖,那么因为新陈代谢率不变随着它所获得资源的增多,这就相当于它的活动能力会增强,并更加有可能存活下去。这就是说,该,Agent,具有了更多的机会收集更加大量的财富。,原始经济的诞生(一),起源,:,人们之所以相互交换商品促使经济的诞生是因为可以在交换中获得好处。一个人对资源的需求是多方面的,而因为个人的能
42、力有限,所以他不可能同时拥有多种资源,这个时候交换就在所难免。,原始经济的诞生(二),假设糖域中不仅含有糖,而且含有另外一种资源,我们称其为香料。,每一个,Agent,不仅仅需要糖同样也需要香料。而糖和香料分配在不同的区域,这样在糖资源较多的区域中,,Agent,可以收集到很多的糖却有较少的香料,而在香料资源多的区域中,糖却很少。这时两类,Agent,就会在边界地区进行商品的交换,从而使得两方,Agent,都能得到较大的满足。,Agent,在每个周期中既要消耗糖也要消耗香料,因此需要有两个新陈代谢率来刻画,m1,是糖的新陈代谢率,,m2,是香料的代谢率。,2,、,RePast,的简介,Repa
43、st,(,Recursive Porous Agent Simulation Toolkit,)是芝加哥大学社会科学计算研究中心研制的多主体建模工具,Repast,提供了一系列用以生成、运行、显示和收集数据的类库,并能对运行中的模型进行“快照”,记录某一时刻模型的当前状态,还可以生成模型运行过程中状态动态演化的视频资料。,Repast,从,Swarm,中借鉴了不少的设计结构和方法,所以常常称,Repast,为类,Swarm,的架构。,3,、,Repast,的思想和目标,由于,Swarm,对建模者来说还是有些过于复杂,,Repast,项目希望提供一系列简化,Swarm,模型开发的,Java,类库
44、然而,随着,Java Swarm,版本的推出,这种仅仅希望作为,Swarm,的,Java,扩展的想法很快就被摒弃了。设计者们开始尝试使用,Java,语言设计一个完全独立的模型平台,而不再是从,Swarm,中做一些现成的提取和外围的包装。一个由,Swarm,开发小组发布的运行在,Swarm,核心上,Java,应用层。,3,、,Repast,的思想和目标,RePast,项目拟订了三个设计目标:,使用方便,容易学习,容易扩展,设计者通过让模拟软件的底层结构具备,抽象性,、,可扩展性,以及,“良好”的表现,来实现这些目标。,4,、,Repast,的体系结构,Repast,模型的设计建模相当于设计一个
45、状态机,状态机的核心状态是模型中所有成员的集体状态属性集合,成员则分为底层结构和表层结构,底层结构是各种各样用于运行模型、显示和收集数据等架构的机制。底层结构的状态就是模型的种种显示状态、数据收集对象的状态等等,表层结构是设计者创立的模型。表层结构的状态指模型的描述状态,比如:所有主体变量的当前值,模拟环境空间的当前状态值,或他们运行的空间以及别的可能有的各种表层对象,(,例如:聚合“协同”的对象统计值等,),。,在这种状态机模式下,所有对状态机的改变都通过同一对象界面接口来实现,这个对象界面接口是,SimModelImpl,类。这种设计为建模者减轻了学习负担,也简化了当工具包的功能不足时的扩
46、展编程。,典型内部机制,时间序列机制,图形用户界面,时序表:时间序列机制,在,Repast,模拟环境下,时间序列机制负责所有用户定义的状态的变化。其设计基础是,Swarm,的观察员结构(,Observer Swarm,)中的时间序列机制。作为核心机制,时间序列机制由已建立好的一些方法调用组成,这些现成的方法调用在一些特定的时间激活一些主体。,Repast,表现为对独立事件的模拟,它的时间单位就是前面已经提到的时钟步(,tick,)。时钟步的存在类似于一个钩子可把事件的执行按顺序挂上。,时间序列机制,典型的,Repast,模型可能包含一系列异质的主体,这些主体可能排列成特定的结构(如一个公司和它
47、的雇员)。但无论其构成如何,每个主体都具有一定的行为,建模者所关心的是这些行为间的相互作用关系。时间序列本身是基于时钟步的,这使得事件行为以一定的时间顺序在特定的时钟步上发生,并且只在特定的时钟步上或特定的间隔内发生。,基于时钟步的时间序列机制,这种基于时钟步的时间序列机制很灵活,可适合于不同的动态模型,无论是连锁反应型的还是离散的独立事件型。,时间序列还能相互嵌套,允许以不同的时间粒度与不同的环境或对象结合起来使用。建模者因此可以专注于模型的动态特征和相互间的作用上,方便了从概念模型到计算机模型的转化,设计模式的共享意味着完成概念模型后就能建立起相同模式的计算机模型。,图形用户界面,显示机制
48、用来实现正在运行的模型的实时显示。这一机制包括,space,类库中的,space,类、,space,相关的绘图类(,SimGraphics,类)、各种可绘制对象与,Display,类、和,space,类相关的可绘制接口(如,Draw able,,,Drawable2Dnode,等)、以及来自,GUI,类库的,Local Painter,和,DisplaySurface,等,对象容器:空间,其中,spaces,是描述模拟对象拓扑关系的容器。如,space,类的,Object2Dtorus,描述显示一种,2,维曲面栅格,该曲面栅格的每一个单元都能容纳一个对象。,SimGraphics,类封装了,j
49、ava.awt.Graphics2D,,简化了绘制圆圈、矩形、正文、色彩等等的工序。,Display,类包含一个,space,,并且提供了显示该,space,中对象的接口及实现工具。如果,space,中的对象要能显示,那么该对象必须构成一定的形式状态。各种可绘制接口,(Drawable*),定义了这些形式状态。这些接口能够通过任何对象来解释执行。,可探测接口,显示机制还能实现,Probeable,(可探测)接口,指定屏幕坐标的定位,可将这些坐标转化成相应的拓扑坐标,并可返回坐标所在的对象列表等。,LocalPainter,是存放绘图类的容器,它能处理实际绘制描述这些绘图类,处理双缓冲和,Gra
50、phics2D,的操纵控制。,DisplaySurface,处理探测任务,它还是绘制描述机制(,drawing mechanism,)的公用接口建立一个,Repast,模型的显示程序,实际上就是决定在一个空间(,a space,)上还是很多空间(,spaces,),在这些空间所包含的对象中实现适于这些空间的可图形化接口,把这些空间添加到合适的显示机制中,之后,将这些显示机制添加到,DisplaySurface,中去,5,、,Repast,的安装,从,3.0,版开始,模型的设计语言有了更多的选择;,Repast3.0,提供了,java,版、,python,版和,DotNet,版三个版本让最终用户






