版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第四章 多主体系统仿真的软件工具,建议10课时,第1,2节4课时, 34节2课时(部分内容可略过),中国人民大学经济科学实验室 张树人 ,本章要求,学完本章后要求掌握以下知识点 理解工具在多主体建模中的作用 至少掌握下面工具的一种:SwarmRepast/Ascape/Netlogo,掌握该工具建立多主体建模的 一般工作原理和步骤,能够编写Swarm经济社会 模型,大纲,第一节 综述 第二节. Swarm 第三节 Repast 第四节 Ascape,Swarm:基于CAS理论的 模拟平台,SWARM,主要内容,CAS理论简介 SWARM介绍 SWARM的诞生 发展历史 简介 建模思想 结构 类
2、库 建模流程标准化 模型实例,SWARM介绍 SWARM的诞生 发展历史 简介 建模思想 结构 类库 建模流程标准化 模型实例,CAS理论简介,CAS理论简介,所谓复杂适应系统,是指系统与外部环境交互作用的过程中,通过自适应改变系统本身的组织结构和行为特点,从而不断向前发展和演化。 将组成系统的元素视为具有适应性的主体,简称主体,所谓具有适应性,是指它能够与环境以及其他主体进行交互作用,在这种交流的过程中不断“学习”或“积累经验”,并根据学到的经验改变自身结构和行为方式。 复杂适应系统理论强调主体行为是系统进化的根本动因,其核心思想是适应性造就复杂性,这一理论对于生态、物理、经济、社会等领域的
3、研究具有很强的指导意义。,SWARM介绍 SWARM的诞生 发展历史 简介 建模思想 结构 类库 建模流程标准化 模型实例,CAS理论简介,SWARM的诞生,在科学研究,特别是复杂系统的研究中,人们常常要借助计算机来完成他们的工作。 为了使计算机建模成熟起来,我们需要一个工艺精良的,标准的软件工具集。,SWARM的诞生(续),从1994 年开始,圣菲研究所(SFI)开展了一个研究项目,以开发一个工具集来研究复杂适应系统,从而将建模者们从编写程序的繁琐劳动中解放出来,可以将精力集中于他们所研究的专业领域。 这个模拟工具集就叫做Swarm。1995 年SFI 发布了Swarm的beta 版。,SW
4、ARM介绍 SWARM的诞生 发展历史 简介 建模思想 结构 类库 建模流程标准化 模型实例,CAS理论简介,SWARM发展历史,Swarm最初只能在Unix操作系统和 X Windows界面下运行。 1998年四月,伴随着1.1版的发布,Swarm推出了可以在Windows 95/98/NT上运行的版本。 1999年,Swarm又提供了对Java的支持,(在此之前只能使用Objective-C)从而使Swarm 越来越有利于非计算机专业的人士使用。,SWARM介绍 SWARM的诞生 发展历史 简介 建模思想 结构 类库 建模流程标准化 模型实例,CAS理论简介,SWARM简介,Swarm 是
5、一个用于复杂适应系统(CAS)模拟的多主体软件平台。 Swarm用来支持建模者对复杂适应系统的研究使用多主体模拟(Multi-Agent Simulation) 的方法开展研究工作。,SWARM简介(续),用户可以使用Swarm 提供的类库构建模拟系统,使系统中的主体和元素通过离散事件进行交互。 SWARM可以用于各个广泛的研究领域,比如说生物学,经济学,物理学,化学和生态学等。,CAS理论简介 SWARM介绍 SWARM的诞生 发展历史 简介 建模思想 结构 类库 建模流程标准化 模型实例,SWARM建模思想,Swarm的整个思想是提供一个执行环境,在这个环境中,大量的对象能够“生活”,并以
6、一种分布式的并行方式互相作用。 在Swarm上的很多工作并不仅仅是为了使并行性的任务易于管理,而且是建立一种机制,使人们意识到在它们的实验装置中多个时间线程是如何互相作用的。,SWARM建模思想(续),Swarm支持分级建模方法,在嵌套结构中,个体可由其它个体的swarms所组成。 Swarm提供了面向对象的可重用组件库,用来建模并进行分析,显示以及对实验进行控制。,CAS理论简介 SWARM介绍 SWARM的诞生 发展历史 简介 建模思想 结构 类库 建模流程标准化 模型实例,Swarm的结构,一个Swarm模型包括 模型Swarm (ModelSwarm) 观察者Swarm (Observ
7、erSwarm) 分层的“Swarm”可以将模型的数据收集和实现进行分离.,SWARM,Swarm的递归结构,Swarm,Sub-Swarm,Agent,Schedule,The Interface,The Model,Probes,Sub-sub-Swarm,ModelSwarm,ModelSwarm 是swarm的子类。 ModelSwarm 中的每一个对象对应模型世界中的一个主体。 ModelSwarm包括模型中行为的时间表。 ModelSwarm 还包括一系列输入和输出。输入的是模型参数,如对象的个数、初始值等;输出的是要观测的变量的值及模型的运行结果。,ObserverSwarm,O
8、bserverSwarm 同样是swarm的一个子类。 ObserverSwarm 是一个特殊的对象,它可以通过探测器接口观察其它个体。 ObserverSwarm 包括一组个体和一个行为时间表。 ObserverSwarm 的个体是用来观测的探测器以及输出界面,如图表、二维格点等。 ObserverSwarm的行为时间表用来描述各探测器采样的间隔和顺序。,两类SWARM的合并,先建ObserverSwarm 在ObserverSwarm 中建立ModelSwarm 作为自身一个 subswarm,并为它分配内存空间; ModelSwarm 建立模型的主体(agent)以及主体的行为。,Swa
9、rm 建模,Integration of Swarm activities,CAS理论简介 SWARM介绍 SWARM的诞生 发展历史 简介 建模思想 结构 类库 建模流程标准化 模型实例,SWARM类库的简介,SWARM有七个核心库: defobj,collection ,random ,tkobjc ,activity, swarmobject和simtools 。 前四个是支持库,有可能在Swarm 之外用到;后三个是Swarm 专有的类库。 目前,Swarm还为建模提供三个领域相关的库:space、ga和neuro。 可以将自行编写的库文件加入到其中。,Swarmobject,Swar
10、mobject 库包括swarmobject 和swarm。 Swarmobject是所有模拟主体的根类,它定义了内存管理的接口,并提供对探测器(probe)的支持。 Swarm是模型的总控,ModelSwarm 和ObserverSwarm 都是从这一基类继承的。,Major Activity classes,ActionGroup Actiongroup相当于一系列动作的计划,它由对主体建立的一系列动作所构成。 ActionGroups把在同一时间各个主体的不同行为集合在一起。 Schedule 时间表是模型运行的时序列表,用户可以将周期性执行的动作按顺序放入这个数据结构中,并指明运行间隔
11、和触发条件,就可以按照这个约定运行而不需人为的干预。,Simtool,Simtool库中包括支持探测器(probe)的类,可以在模型的运行过程中观察或修改变量(可增加agent)。 Simtools 还提供数据分析和显示支持的工具,能够产生统计数据汇总以及画时序图等等功能。,The Probe,Swarm 对标准面向对象编程的一个发展是探测器技术 探测器的主要功能 在Swarm模型中,实时观测所有主体的行为。 为建立GUI提供有效数据。,探测器,主体,Executes method,Input value for variable,Open probe for class,Close prob
12、e,Collection,Collection提供了一系列对象的列表。 Swarm 支持向一个列表中的所有对象传递消息,还可以将列表中的对象按某个属性排序。 Collection 主要的子类包括 Array, List, Set和 Map.,Collection,List,Keyed Collection,Array,Map,Set,List list是根据建立成员的先后顺序建立的一个线性列表 KeyedCollection Map 建立从key objects到 member objects的联系。 Map 定义了从key values 到member values的映射。 Set Set
13、中的每一个主体的 key value 是由主体自身确定的,它是和 主体一一对应的。 Array Array 是collecton成员的集合。 通过这个固定的数据结构,根据每一个成员偏移量 ,能够很快计算出它的位置。,Ramdom,Ramdom库提了一套随机数生成器。 Swarm 的随机数库支持正态分布、均匀分布、指数分布等多种随机分布。 Ramdom被分为Distributions和Generators,Generators,.,Distributions,.,random,随机数列的产生,从某种分布中获取随机数序列,需要 一个generator 对象 必须提供一个产生随机数序列的“种子”(s
14、eed),这也是 generator的主要功能。 一个distribution对象 产生随机数的序列,Generator,Distribution,seed,random 随机数序列 number,Defobj,Defobj中提供了对消息、错误处理、调试和内存分配的支持。 增强了Objective-C 的功能。 支持对象界面,并能够实现分离,从而使Swarm 编写的程序的层次性更加清晰。,Space,Space是一个简单的空间库。 包括一系列用于二维离散模型的类。这些空间类型在生态系统模拟中经常用到。 Space中的类大多数是从Grid2D,一个可以在指定格点上存储对象和整型值的二维数组继承得
15、来。,Graphical User Interface(GUI),GUI对象可提供如下管理 曲线图表 柱状图 主体随时间变化情况的反应 在这个过程中,要进行数据的收集,计算以及实时更新,Tkobjc,ZoomRaster 定义显示光栅图 Graph 定义图表 Histogram 显示柱状图,CAS理论简介 SWARM介绍 SWARM的诞生 发展历史 简介 建模思想 结构 类库 建模流程标准化 模型实例,SWARM的诞生,在科学研究,特别是复杂系统的研究中,人们常常要借助计算机来完成他们的工作。 为了使计算机建模成熟起来,我们需要一个工艺精良的,标准的软件工具集。,SWARM的诞生(续),从19
16、94 年开始,圣菲研究所(SFI)开展了一个研究项目,以开发一个工具集来研究复杂适应系统,从而将建模者们从编写程序的繁琐劳动中解放出来,可以将精力集中于他们所研究的专业领域。 这个模拟工具集就叫做Swarm。1995 年SFI 发布了Swarm的beta 版。,SWARM发展历史,Swarm最初只能在Unix操作系统和 X Windows界面下运行。 1998年四月,伴随着1.1版的发布,Swarm推出了可以在Windows 95/98/NT上运行的版本。 1999年,Swarm又提供了对Java的支持,(在此之前只能使用Objective-C)从而使Swarm 越来越有利于非计算机专业的人士
17、使用。,SWARM简介,Swarm 是一个用于复杂适应系统(CAS)模拟的多主体软件平台。 Swarm用来支持建模者对复杂适应系统的研究使用多主体模拟(Multi-Agent Simulation) 的方法开展研究工作。,SWARM简介(续),用户可以使用Swarm 提供的类库构建模拟系统,使系统中的主体和元素通过离散事件进行交互。 SWARM可以用于各个广泛的研究领域,比如说生物学,经济学,物理学,化学和生态学等。,SWARM建模思想,Swarm的整个思想是提供一个执行环境,在这个环境中,大量的对象能够“生活”,并以一种分布式的并行方式互相作用。 在Swarm上的很多工作并不仅仅是为了使并行
18、性的任务易于管理,而且是建立一种机制,使人们意识到在它们的实验装置中多个时间线程是如何互相作用的。,SWARM建模思想(续),Swarm支持分级建模方法,在嵌套结构中,个体可由其它个体的swarms所组成。 Swarm提供了面向对象的可重用组件库,用来建模并进行分析,显示以及对实验进行控制。,Swarm的结构,一个Swarm模型包括 模型Swarm (ModelSwarm) 观察者Swarm (ObserverSwarm) 分层的“Swarm”可以将模型的数据收集和实现进行分离.,SWARM,Swarm的递归结构,Swarm,Sub-Swarm,Agent,Schedule,The Inter
19、face,The Model,Probes,Sub-sub-Swarm,ModelSwarm,ModelSwarm 是swarm的子类。 ModelSwarm 中的每一个对象对应模型世界中的一个主体。 ModelSwarm包括模型中行为的时间表。 ModelSwarm 还包括一系列输入和输出。输入的是模型参数,如对象的个数、初始值等;输出的是要观测的变量的值及模型的运行结果。,ObserverSwarm,ObserverSwarm 同样是swarm的一个子类。 ObserverSwarm 是一个特殊的对象,它可以通过探测器接口观察其它个体。 ObserverSwarm 包括一组个体和一个行为时
20、间表。 ObserverSwarm 的个体是用来观测的探测器以及输出界面,如图表、二维格点等。 ObserverSwarm的行为时间表用来描述各探测器采样的间隔和顺序。,两类SWARM的合并,先建ObserverSwarm 在ObserverSwarm 中建立ModelSwarm 作为自身一个 subswarm,并为它分配内存空间; ModelSwarm 建立模型的主体(agent)以及主体的行为。,Swarm 建模,Integration of Swarm activities,SWARM类库的简介,SWARM有七个核心库: defobj,collection ,random ,tkobjc
21、 ,activity, swarmobject和simtools 。 前四个是支持库,有可能在Swarm 之外用到;后三个是Swarm 专有的类库。 目前,Swarm还为建模提供三个领域相关的库:space、ga和neuro。 可以将自行编写的库文件加入到其中。,Swarmobject,Swarmobject 库包括swarmobject 和swarm。 Swarmobject是所有模拟主体的根类,它定义了内存管理的接口,并提供对探测器(probe)的支持。 Swarm是模型的总控,ModelSwarm 和ObserverSwarm 都是从这一基类继承的。,Major Activity cla
22、sses,ActionGroup Actiongroup相当于一系列动作的计划,它由对主体建立的一系列动作所构成。 ActionGroups把在同一时间各个主体的不同行为集合在一起。 Schedule 时间表是模型运行的时序列表,用户可以将周期性执行的动作按顺序放入这个数据结构中,并指明运行间隔和触发条件,就可以按照这个约定运行而不需人为的干预。,Simtool,Simtool库中包括支持探测器(probe)的类,可以在模型的运行过程中观察或修改变量(可增加agent)。 Simtools 还提供数据分析和显示支持的工具,能够产生统计数据汇总以及画时序图等等功能。,The Probe,Swar
23、m 对标准面向对象编程的一个发展是探测器技术 探测器的主要功能 在Swarm模型中,实时观测所有主体的行为。 为建立GUI提供有效数据。,探测器,主体,Executes method,Input value for variable,Open probe for class,Close probe,Collection,Collection提供了一系列对象的列表。 Swarm 支持向一个列表中的所有对象传递消息,还可以将列表中的对象按某个属性排序。 Collection 主要的子类包括 Array, List, Set和 Map.,Collection,List,Keyed Collectio
24、n,Array,Map,Set,List list是根据建立成员的先后顺序建立的一个线性列表 KeyedCollection Map 建立从key objects到 member objects的联系。 Map 定义了从key values 到member values的映射。 Set Set 中的每一个主体的 key value 是由主体自身确定的,它是和 主体一一对应的。 Array Array 是collecton成员的集合。 通过这个固定的数据结构,根据每一个成员偏移量 ,能够很快计算出它的位置。,Ramdom,Ramdom库提了一套随机数生成器。 Swarm 的随机数库支持正态分布、
25、均匀分布、指数分布等多种随机分布。 Ramdom被分为Distributions和Generators,Generators,.,Distributions,.,random,随机数列的产生,从某种分布中获取随机数序列,需要 一个generator 对象 必须提供一个产生随机数序列的“种子”(seed),这也是 generator的主要功能。 一个distribution对象 产生随机数的序列,Generator,Distribution,seed,random 随机数序列 number,Defobj,Defobj中提供了对消息、错误处理、调试和内存分配的支持。 增强了Objective-C
26、的功能。 支持对象界面,并能够实现分离,从而使Swarm 编写的程序的层次性更加清晰。,Space,Space是一个简单的空间库。 包括一系列用于二维离散模型的类。这些空间类型在生态系统模拟中经常用到。 Space中的类大多数是从Grid2D,一个可以在指定格点上存储对象和整型值的二维数组继承得来。,Graphical User Interface(GUI),GUI对象可提供如下管理 曲线图表 柱状图 主体随时间变化情况的反应 在这个过程中,要进行数据的收集,计算以及实时更新,Tkobjc,ZoomRaster 定义显示光栅图 Graph 定义图表 Histogram 显示柱状图,CAS理论简
27、介 SWARM介绍 SWARM的诞生 发展历史 简介 建模思想 结构 类库 建模流程标准化 模型实例,建模流程标准化,此规范主要是基于面向主体的建模方法的,其他建模方法(如DYNAMO等)可以参照它,建立符合自己特点的建模流程规范:,CAS理论简介 SWARM介绍 SWARM的诞生 发展历史 简介 建模思想 结构 类库 建模流程标准化 模型实例,模型实例(从单主体到多主体),Heatbug Mousetrap Babysitter Akerlof Consume,Heatbug模型,这是swarm的经典示例之一,也是swarm的入门example(与HelloWorld有异曲同工之妙)。 我们
28、利用这个模型来观察简单主体如何通过局部信息上的动作产生复杂的全局行为结果。,模型背景 在这模型中,每一个heatbug都是一个主体(agent)。 World有一个特殊的属性heat,热量经过一定的时间散发和消失。 每一个heatbug都放射出一定的热量,并且都有自己的一个适于自身生存的理想温度。,Heatbug在释放热量的同时,也在向着更接近于适于自己生存的理想温度的附近的点不断移动。 单独一个 heatbug并不能获得足够的热量继续生存,因此它们倾向于聚成一堆的生存,以便获得足够的热量。 模型的开始,随机分布着一定数量的heatbug。,模拟结果,结果分析,我们可以把heatbugs模型看
29、作一个最优化问题:每一个heatbug 都试图寻找自己最理想的生存环境。 每个热虫完全根据自身的需要在移动,但是所有热虫平均的不满意程度呈下降趋势,也即整个系统在不断优化。,Mousetrap模型,这是一个古老的小学的核子分裂的示例。 是对离散事件的模拟。 Swarm同时支持离散事件和时间步进(time-stepped)事件。,模型背景 在地上放一些捕鼠器,每个捕鼠器(agent)上有两个ping pong球。 模型开始时中间的一个捕鼠器被触发。 当一个捕鼠器被触发,它上面的两个球将随机飞向一定的范围之内,同时出发两个捕鼠器。,将ping pong球的触发作为时间步进事件处理的话,在多数时间里
30、mousetrap是空闲的,这样就是整个系统低效运转。 将每个ping pong球的触发作为时间表的一个事件,显然,这样的模拟更高效。这就形成了对离散事件的模拟。,模拟结果:,结果分析,捕鼠器的触发事件开始呈上升趋势,达到一定峰值之后回落。 在有足够触发资源的情况下呈指数增长,之后由于多数的捕鼠器已被触发,受此限制,每一时刻的触发事件减少,最后趋向于0。所以触发事件的总量也趋于平衡。,总结,基于CAS理论的建模方法 Adaptive Multi-Agent Swarm的结构及其对模型的实现,REPAST建模介绍,理论回顾:复杂系统无法线性分析,一般地说,在复杂性研究中,复杂系统由若干元素组成,
31、元素间互相作从用而产生了整个系统行为特征,由于系统的行为特征不等价于组成元素个体行为特征叠加之和,所以无法用传统的数量方程或回归统计进行线性分析。,理论回顾:复杂系统在简化基础上可动态推演,随着计算机的计算能力的提高,人们发现可以把复杂系统中各个因素之间的非线性关系转化为可执行的程序,以模型程序自动运行的方式推演模拟系统,从而能以简化换时间的方式对那些实际中需要长时间演化的系统进行动态仿真。这就是计算机建模方法。,理论回顾:自底向上的多主体建模研究复杂涌现机制,在统一的形式化理论和研究框架下,多主体模型都需要实现并发控制、主体设计、多主体交互、涌现、显示、统计等功能特征,于是人们便希望能借助软
32、件来自动化地完成一些建模设计工作。 Swarm、Repast的应用比较广泛,设计思想很接近也很典型,且模型开发通用Java语言,因此学习起来比较方便。,理论回顾:多主体建模工具软件,多主体建模工具软件都提供了用于多主体建模的基本类库,把那些适合于所有多主体模型的共同的底层机制和功能封装起来,建模设计相当于在固定的框架基础上的二次开发。 “工欲善其事,必先利其器”,熟练掌握一种适合的多主体建模工具,往往会为复杂系统的研究带来事半功倍的效应。,目 录,1、对Repast的感性认识 2、Repast的简介 3、Repast的思想和目标 4、Repast的体系结构 5、Repast的安装 6、建模过程
33、 7、Repast类库简介,1、对Repast的感性认识界面例子,1、对Repast的感性认识界面例子,三个著名的糖域模型,SugarScape 城市人口迁移仿真 财富的分配 原始经济的诞生,城市人口迁移仿真,城市人口迁移仿真,程序中,用黄色代表食物的存在,颜色越重的地方表示食物就越多。而这里为了简化设计,只是用糖来代表食物。每个迁移的人都有视野,他在迁移以前,会判断视野内食物的多少,然后向着食物最多的方向迁移。每迁移一步,他都要消耗掉一部分的自身食物,在这里设计的是 ,每走一步,损失3个糖份。 可以将人口迁移的众多因素尽可能科学、全面的纳入到程序中来,从而为城市的决策者提供改善城市生活、就业
34、、社会福利等方面的支持。 为了使例子模拟的过程更接近现实生活,在例子中为人口设计了变化的指数增长函数、为作物生长率、城市资源的新陈代谢原则等等都设计了相应的函数关系。,财富分配问题,替换规则 1) 当Agent的寿命age超过他的最大寿命maxage就会死去。 2) 每个仿真周期,每个Agent的age都+1 3) 当一个Agent死掉的时候,环境会产生一个新的Agent替换这个死掉的agent,这个新生Agent的所有属性都随机的分配,包括它的最大寿命maxage以及它在世界中的位置。,财富分配问题,财富分配问题,随着时间的推移,财富分配不均的现象将会涌现出来。也就是说少数Agent拥有大量
35、的糖资源,而多数的Agent仅仅拥有少量的糖。 因此也可以说,财富的分配不均匀是系统自发产生的一种必然现象。这就是社会科学中著名的马太效应。 因为一些Agent可能在开始由于它的个人能力、所处地方资源的分布等等一些优势可以获得较多的资源糖,那么因为新陈代谢率不变随着它所获得资源的增多,这就相当于它的活动能力会增强,并更加有可能存活下去。这就是说,该Agent具有了更多的机会收集更加大量的财富。,原始经济的诞生(一),起源: 人们之所以相互交换商品促使经济的诞生是因为可以在交换中获得好处。一个人对资源的需求是多方面的,而因为个人的能力有限,所以他不可能同时拥有多种资源,这个时候交换就在所难免。,
36、原始经济的诞生(二),假设糖域中不仅含有糖,而且含有另外一种资源,我们称其为香料。 每一个Agent不仅仅需要糖同样也需要香料。而糖和香料分配在不同的区域,这样在糖资源较多的区域中,Agent可以收集到很多的糖却有较少的香料,而在香料资源多的区域中,糖却很少。这时两类Agent就会在边界地区进行商品的交换,从而使得两方Agent都能得到较大的满足。 Agent在每个周期中既要消耗糖也要消耗香料,因此需要有两个新陈代谢率来刻画m1是糖的新陈代谢率,m2是香料的代谢率。,2、RePast的简介,Repast(Recursive Porous Agent Simulation Toolkit)是芝加
37、哥大学社会科学计算研究中心研制的多主体建模工具 Repast提供了一系列用以生成、运行、显示和收集数据的类库,并能对运行中的模型进行“快照”,记录某一时刻模型的当前状态,还可以生成模型运行过程中状态动态演化的视频资料。 Repast从Swarm中借鉴了不少的设计结构和方法,所以常常称Repast为类Swarm的架构。,3、 Repast的思想和目标,由于Swarm对建模者来说还是有些过于复杂, Repast项目希望提供一系列简化Swarm模型开发的Java类库,然而,随着Java Swarm 版本的推出,这种仅仅希望作为Swarm的Java扩展的想法很快就被摒弃了。设计者们开始尝试使用Java
38、语言设计一个完全独立的模型平台,而不再是从Swarm中做一些现成的提取和外围的包装。 一个由Swarm开发小组发布的运行在Swarm 核心上Java应用层。,3、 Repast的思想和目标,RePast项目拟订了三个设计目标: 使用方便 容易学习 容易扩展 设计者通过让模拟软件的底层结构具备抽象性、可扩展性以及“良好”的表现来实现这些目标。,4、Repast的体系结构,Repast模型的设计建模相当于设计一个状态机 状态机的核心状态是模型中所有成员的集体状态属性集合 成员则分为底层结构和表层结构 底层结构是各种各样用于运行模型、显示和收集数据等架构的机制。底层结构的状态就是模型的种种显示状态、
39、数据收集对象的状态等等 表层结构是设计者创立的模型。表层结构的状态指模型的描述状态,比如:所有主体变量的当前值,模拟环境空间的当前状态值,或他们运行的空间以及别的可能有的各种表层对象(例如:聚合“协同”的对象统计值等)。 在这种状态机模式下,所有对状态机的改变都通过同一对象界面接口来实现,这个对象界面接口是SimModelImpl类。这种设计为建模者减轻了学习负担,也简化了当工具包的功能不足时的扩展编程。,典型内部机制,时间序列机制 图形用户界面,时序表:时间序列机制,在Repast模拟环境下,时间序列机制负责所有用户定义的状态的变化。其设计基础是Swarm的观察员结构(Observer Sw
40、arm)中的时间序列机制。作为核心机制,时间序列机制由已建立好的一些方法调用组成,这些现成的方法调用在一些特定的时间激活一些主体。Repast表现为对独立事件的模拟,它的时间单位就是前面已经提到的时钟步(tick)。时钟步的存在类似于一个钩子可把事件的执行按顺序挂上。,时间序列机制,典型的Repast模型可能包含一系列异质的主体,这些主体可能排列成特定的结构(如一个公司和它的雇员)。但无论其构成如何,每个主体都具有一定的行为,建模者所关心的是这些行为间的相互作用关系。时间序列本身是基于时钟步的,这使得事件行为以一定的时间顺序在特定的时钟步上发生,并且只在特定的时钟步上或特定的间隔内发生。,基于
41、时钟步的时间序列机制,这种基于时钟步的时间序列机制很灵活,可适合于不同的动态模型,无论是连锁反应型的还是离散的独立事件型。 时间序列还能相互嵌套,允许以不同的时间粒度与不同的环境或对象结合起来使用。建模者因此可以专注于模型的动态特征和相互间的作用上,方便了从概念模型到计算机模型的转化,设计模式的共享意味着完成概念模型后就能建立起相同模式的计算机模型。,图形用户界面,显示机制用来实现正在运行的模型的实时显示。这一机制包括space类库中的space类、space相关的绘图类(SimGraphics类)、各种可绘制对象与Display类、和space类相关的可绘制接口(如Draw able,Dra
42、wable2Dnode等)、以及来自GUI类库的Local Painter和DisplaySurface等,对象容器:空间,其中spaces是描述模拟对象拓扑关系的容器。如space类的Object2Dtorus描述显示一种2维曲面栅格,该曲面栅格的每一个单元都能容纳一个对象。SimGraphics类封装了java.awt.Graphics2D,简化了绘制圆圈、矩形、正文、色彩等等的工序。Display类包含一个space,并且提供了显示该space中对象的接口及实现工具。如果space中的对象要能显示,那么该对象必须构成一定的形式状态。各种可绘制接口(Drawable*)定义了这些形式状态。
43、这些接口能够通过任何对象来解释执行。,可探测接口,显示机制还能实现Probeable(可探测)接口,指定屏幕坐标的定位,可将这些坐标转化成相应的拓扑坐标,并可返回坐标所在的对象列表等。 LocalPainter是存放绘图类的容器,它能处理实际绘制描述这些绘图类,处理双缓冲和Graphics2D的操纵控制。DisplaySurface处理探测任务,它还是绘制描述机制(drawing mechanism)的公用接口建立一个Repast模型的显示程序,实际上就是决定在一个空间(a space)上还是很多空间(spaces),在这些空间所包含的对象中实现适于这些空间的可图形化接口,把这些空间添加到合适
44、的显示机制中,之后,将这些显示机制添加到DisplaySurface中去,5、 Repast的安装,从3.0版开始,模型的设计语言有了更多的选择;Repast3.0提供了java版、python版和DotNet版三个版本让最终用户选择安装,除Java和python外,还可以应用DotNet框架下的各种程序设计语言编制模型。 java版Repast的开发环境 与普通java开发程序一样。 使用eclipse进行Repast模型的开发,使用eclipse进行Repast模型的开发,安装jdk 安装eclipse 安装Repast 有suite、java、pyhton、donet版本下载,6、建模基
45、本过程,数据结构上,RePast模型一般至少有两个由用户编写的类:主体类和模型类。 主体(Agent)类描述主体的行为(例如,在博弈中合作或者对立),模型类负责控制模型的创建和运行。 主体类大多需要专门构造,尽管RePast已经通过GameAgent接口以及Game抽象类为合作类型的主体提供了最基本的支持。,6、建模基本过程,如果希望主体能够被图形化显示,主体类必须实现某一类型的Drawable接口。 如果用户希望主体是可探测的,即主体状态的可视化和可运行时干预设置,则主体的属性必须用附属方法模式(Accessor)编写,即以get和set打头的固定格式的方法,用于属性的存取。 习惯上还会有一
46、个用户编写的类:空间类,在图形化显示中,用来表示主体与图形显示之间的关系。,7、 Repast类库简介,Repast共有近130个类,封装在6个库中,下面是6个类库的简要介绍。 分析库Analysis 分析库中的类是用来聚集、记录数据以及建立数据表。通过使用DataRecorder类,建模者能将收集到的数据分类整理,并将这些数据以表格格式写人文件。 引擎库Engine 引擎类负责建立、操纵和运行模型。SimModel接口(Interface)是Repast中所有模型的超类(继承树状图表示中的根类)。作为SimModel一个子类,SimModellmp类可以作为绝大多数用Repast创立的模型的
47、基类。控制类(BaseController,Controller,BatchController)负责通过图形用户界面处理用户交互,或通过批处理参数文件自动处理交互。时序表及相关行为类主要用来改变模型中的状态。,博弈库Games 博弈库中包含了一些建立对策论模型(比如囚徒困境等)所用的基本类。 图形用户界面库GUI GUI类负责实现模型的图形可视化,包括对图形界面显示的快照功能以及制作模型运行的活动录像(影像资料,quicktime格式)。各种。Display类与 Space空间库中的类协同工作,把空间位置关系的抽象和空间关系的显示分离开来,可以针对不同的空间特征设计不同的可视化显示方案。通过
48、一个显示界面(Displaysurface),。Painter类处理这些空间库在屏幕上的显示,而显示界面本身就能够完成对所显示对象的探测。对可视化的模拟对象点击鼠标左键,就会弹出一单独舷窗口,其中显示点中主体的当前状态。,空间库Space 空间类是表述各种空间的基础容量类(在通常的计算机术语中,容量类是指以包含其他类作为自己的元素的类,比如数组、集合、链表等)。空间类包括二维表空间(有边界)、圆环面空间(上下无边界)等。这些空间类允许在x,y坐标轴的基础上对对象进行括人和检索。空间库中还包含了一些节点类和链接类,以方便建立基于网络的模型。空间类和在GUI库中的显示类协同操作,以实现空间和对象的
49、可视化。 Util类库 Util类库中只有一个类:SimUtiltities。该类提供了一些产生无序表单、显示信息对话框等静态方法。,参考资料,Repast主页 Repast上的开发使用方法介绍 官方API ,3.Ascape及其在社会经济领域的应用,经济科学实验室,Ascape介绍,布鲁金斯研究所开发 完全用Java编写 主要是为了支持社会经济系统的模型,Ascape设计目标,有表达力的 Expressive 通用的 Generalized 功能应该是强大的 Powerful 抽象的 Abstract 简单适用 Easy to Use 功能健全 Robust 快速 Fast,有表达力的Exp
50、ressive,可以用尽可能少的描述来定义一个完整的模型,仔细的设计可以提供强大的功能和可控制性,但由此可能出现把重要的细节遗漏的问题。,通用的Generalized,可以用多种方式表达同样的基础建模思想,然后用不同的环境和配置来测试这些思想;同样适用于很多领域的问题;拥有尽可能常用的特征:图表,模型视图,参数控制工具等,以及大量的常用结构和行为的类库。,功能应该是强大的Powerful,可以提供给高水平用户导向型工具使其不用编程就可实现模型交互,但是它也该提供一个能对不同的复杂的系统建模的环境。,抽象的Abstract,可以用尽可能高的水平封装建模思想和方法论,能够不影响其他方面而在模型的某
51、一方面进行重大的改动,比如改变维数,拓扑结构,规则,结构以及规则的执行命令;可以促进探索和试验,允许模型的设计和工具的简单混合与匹配 。,其它特点:,简单适用Easy to Use: 基本假设是用户由小部分的专家,大部分的潜在的聪明用户组成;避免挫败产生使用障碍; 功能健全Robust: 允许不同的使用风格和方法,中断的时候出现报告,并且在编译的时候中断不会在运行时中断; 快速Fast,Ascape安装,下载安装网址: /dybdocroot/Collab/CSED/install.htm,Ascape的操作,运行Ascape首先出现下面的界面,可以选择要
52、运行的模型,然后单击OPEN即可。,Ascape运行界面,以模型“囚徒两难“Prinsoners Dilemma为例,打开后基本界面如下:,控制条,大多数模型的交互通过模型的控制条实现。对于所有的Ascape模型下面这个控制条是缺省提供的。 控制条反复演示当前的模型,允许使用者在不同的表达方式间很容易的切换。它包括模型的开始,停止,暂停和重新开始。模型运行的速度可用标记滑动栏控制。 控制条还可以让使用者退出运行环境, 改变模型的设置,显示关于这个模型的信息和创建新的图表。 “照相”按钮可以给正在运行的模型的拍摄电影(需要安装quicktime for jaja:,视图,Ascape提供了大量的
53、常用视图类型以及不常用的一些视图: Ascape 的Overheadview就有多种表现方式:关联的2维视图、一维滚动视图、向量表示法以及单一视图; Ascape里的所有视图都是可扩展的。比如可以添加,最小化或者动态的移去视图。当前不活动的视图不占用计算资源。,图表,Ascape提供了强大且易用的制图和统计工具,模型设计者可以容易地通过此平台建立模型统计表并提供给模型用户和研究者使用。这些统计表可以用于制图,输出和其他用途。可以创建一个图表作为一个标准模型视图的一部分,这样模型的设计者就可以把他们作为标准可视化工具。 提供的另一种视图图表视图Chartview也有三种不同的表达形式:时间序列、
54、柱状图、饼状图,Ascape的设计机制,Ascape的设计机制关键在于抽象abstractions 和Scape。Ascape设计提供了大量关键抽象使基于主体的模型的开发变得容易。这些抽象还利于上述的用户导向的革新。 首先,Scape本质上是功能强大的主体的集合 第二个重要的抽象是: Scape结构对于主体来说是隐藏的; 最后一个抽象就是:行为仅在Scape层次上发生。,Scape本质上是功能强大的主体的集合,在Ascape中,模型都是由scapes和主体分层次组成。比如下面是囚徒两难统计模型中局中人运动、博奕、复制时的网格图,以及包含局中人人数的向量。这种集合机制允许映射局中人的位置到网格上
55、去,如图,局中人和网格都属于根scape。,scape结构对于主体来说是隐藏的,隐藏的意思是:主体的查找和互相交互的行为可能且应该设计成不与一个特定的拓扑结构或活动区域相关。 这样允许Ascape的模型通过一小段代码的改变或者不需任何的改变就能从属于exposure不同的拓扑结构个活动区域。下面是一个模型的多种拓扑结构表示:,行为仅在Scape层次上发生,也就是说:没有任何其他的行为执行高级机制建立在主体上,行为仅仅在Scapes基础上进行。这种抽象保证了在模型中的行为以特定的方式发生,给用户工具相应的行为提供了一个自然的层次结构,直截了当的说明以及便于陈述的设计的步骤。,基于Ascape平台
56、的模型例子,下面主要介绍一个在Ascape上开发的模型:囚徒两难(Prinsoners Dilemma)模型,通过模型的背景知识介绍,及它在Ascape中实现的过程,可以更具体的了解Ascape中模型的实现机制,模型背景介绍,囚徒困境: “囚徒困境”说的是两个囚犯的故事。这两个囚徒一起做坏事,结果被警察发现抓了起来,分别关在两个独立的不能互通信息的牢房里进行审讯。在这种情形下,两个囚犯都可以做出自己的选择:或者供出他的同伙(即与警察合作,从而背叛他的同伙),或者保持沉默(与警察不合作,也就是与他的同伙合作)。 这两个囚犯都知道,如果他俩都能保持沉默的话,就都会被释放,因为只要他们拒不承认,警方
57、无法给他们定罪。但警方也明白这一点,所以他们就给了这两个囚犯一点儿刺激:如果他们中的一个人背叛,即告发他的同伙,那么他就可以被无罪释放,同时还可以得到一笔奖金。而他的同伙就会被按照最重的罪来判决,并且为了加重惩罚,还要对他施以罚款,作为对告发者的奖赏。当然,如果这两个囚犯互相背叛的话,两个人都会被按照最重的罪来判决,谁也不会得到奖赏。,如果在计算机中实现,任何参加这个实验的人都扮演“囚徒困境”案例中一个囚犯的角色。他们把自己的策略编入计算机程序,然后他们的程序会被成双成对地融入不同的组合。分好组以后,参与者就开始重复玩“囚徒困境”的游戏。他们每个人都要在合作与背叛之间做出选择。 这就是博弈论专家所谓的“重复的囚徒困境” a demographic Prisoners Dilemma,它更逼真地反映了具有经常而长期性的人际关系 。,在Ascape平台上开发囚徒两难模型,在这个博弈论案例的基础上,在Ascape平台上开发了囚徒两难(Prinsoners Dilemma)模型,下面是运行的结果: 这是囚徒两难模型运行时 的上置式主体视图:圆形 色点为主体,红色圆点 是不合作者(defector),蓝 色圆点
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- QC/T 60-2026摩托车和轻便摩托车整车性能台架试验方法
- 膝关节结核护理查房
- 浙江中医药大学推拿学
- 2026下半年小学教师资格证考试小学语文专项试卷及解析
- 2026年历史事业编考试模拟试卷
- 外科医院感染工作总结(2篇)
- 沈阳北方就业机会分析
- 2026 年洪涝灾害期间饮水净化简易处理科普
- 间质性肺纤维化宣教
- 2026及未来5年中国吸尘器电机定转子铁芯数据监测研究报告
- 2026福建泉州交发集团(第一批)校园招聘89人笔试备考题库及答案详解
- 影像医学技术操作规程大全
- 2026年河南高考地理考试试卷及答案
- 2026年综合评标专家库专家考试(法律法规)试题及解析(浙江浙江)
- 2025年度中国展览数据统计报告
- 安全生产规章制度汇编2026版
- 2026年事业单位宣传岗招聘考试题及答案
- 2026年高考(浙江卷)英语试题及答案
- 2025年安徽评标专家题库及答案(可下载)
- 江苏省建设工程监理现场用表(第七版修订版)
- 印刷领域消防培训
评论
0/150
提交评论