repast中文教程

上传人:小** 文档编号:46747303 上传时间:2018-06-27 格式:DOC 页数:43 大小:283KB
返回 下载 相关 举报
repast中文教程_第1页
第1页 / 共43页
repast中文教程_第2页
第2页 / 共43页
repast中文教程_第3页
第3页 / 共43页
repast中文教程_第4页
第4页 / 共43页
repast中文教程_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《repast中文教程》由会员分享,可在线阅读,更多相关《repast中文教程(43页珍藏版)》请在金锄头文库上搜索。

1、RepastJavacswarm 脚本编译模型,用 Javaswarm 脚本运行模型。作为一个开源项目,在遵循 GNU 协议的基础上,所有人都可以分享 Swarm 的资料,这也意味着所有人都可以自由地奉献自己的智慧。因此,对 Swarm 感兴趣的研究人员可以结合自己的研究需要和建模经验,提出相关的设想,参与到 Swarm 的研究中去,本节后面的资源链接中列出了相关网址。Repast(Recurslve Porous Agent Simulation Toolkit)是芝加哥大学社会科学计算研究中心研制的多主体建模工具,她提供了一系列用以生成、运行、显示和收集数据的类库,并能对运行中的模型进行“

2、快照” ,记录某一时刻模型的当前状态,还可以生成模型运行过程中状态动态演化的视频资料。Repast 从 Swarm 中借鉴了不少的设计结构和方法,所以常常称 Repast 为类 Swarm 的架构。一、设计思想及目标一、设计思想及目标由于 Swarm 对建模者来说还是有些过于复杂,Repast 项目希望提供一系列简化 Swarm模型开发的 Java 类库。然而,随着 JavaSwarm版本的推出,这种仅仅希望作为 Swarm的 Java 扩展的想法很快就被摒弃了。设计者们开始尝试使用 Java 语言设计一个完全独立的模型平台,而不再是从 Swarm 中做一些现成的提取有外围的包装。RePast

3、 项目拟订了三个设计目标:使用方便、容易学习和容易扩展。设计者通过让模拟软件的底层结构具备抽象性、可扩展性以及“良好”的表现来实现这些目标。1抽象性抽象性RePast 的设计借鉴了很多别的主体建模软件,汲取了各个软件中最优秀的设计思想。类库设计时充分应用了面向对象和设计模式的思想,因此 RePast 的整个类库的结构非常明晰优美。类库提供了普通常用的底层抽象库(如安排时序、显示、数据收集等类库) ,类库还提供了一些用以建立表层元素的常用类。这些类可直接使用,也可以根据需要继承和扩展。与 Swarm 一样,Repast 还设计了一些关键的抽象数据结构,其中一些结构直接模仿了 Swarm,如时序表

4、等。2可扩展性可扩展性关键数据结构的抽象设计让 Repast 具备了可扩展的能力。为了充分从 Swarm 的抽象结构中获得方便,Repast 继承了 Swarm 时间测试的设计方法,这对于提高其扩展性十分有利。此外,Repast 还引人了设计模式中的一些经典抽象结构,使得其扩展性得到进一步的提高。如用设计模式中的综合模式实现时序的安排机制(时序表对象和各种行为类) ,由于这种综合模式允许终端用户在建模编程时,能够对单独行为和复合行为进行统一编码处理,因此模型中的时序安排机制便变得很清晰直观,且易于扩展。3 “良好良好” 的表现能力的表现能力表现能力是指应用该平台建立应用研究模型时,该平台能否有

5、效地适用于实际应用领域;如能否有效地用平台的开发接口把问题表述成计算机模型,模型能否在可承受的效率开销下运行,等等。 “良好”的表现能力是指:在不影响别的优越特性前提下,可接受的表现能力。当表现能力的最优化不是设计的主要目标时,设计者的注意力应集中在如何减少对象的生成开销,以达到一种能够接受的运行速度。RePast 可以算得上比较好地完成了这一目标,甚至有所超越,相比其他模拟软件平台,Repast 提供了更好的表现能力。此外,随着 Java 虚拟机性能的提高,Repast 模型的速度也会得到改善。虽然建模时仍然必须学习一门程序设计语言:Java 或 Python,但 Repast 仍然是一款相

6、当方便易用的软件。用 Java 作为实现语言避免了内存泄漏的问题,且 Java 的跨平台特性使得在不同的平台上的安装和使用也很简便。从 Repast 30 版开始,模型的设计语言有了更多的选择;Repast 30 提供了 Java 版、Python 版和 DotNet 版三个版本让最终用户选择安装,除 Java 和 Python 外,还可以应用 DotNet 框架下的各种程序设计语言编制模型。、Repast 的体系结构的体系结构RePast 建模相当于设计一个状态机,状态机的核心状态是模型中所有成员的集体状态属性集合。成员则分为底层结构和表层结构。底层结构是各种各样用于运行模型、显示和收集数据

7、等架构的机制;表层结构是设计者创立的模型。底层结构的状态就是模型的种种显示状态、数据收集对象的状态等等;表层结构的状态指模型的描述状态,比如所有主体变量的当前值,模拟环境空间的当前状态值,或他们运行的空间以及别的可能有的各种表层对象(例如聚合“协同”的对象统计值等) 。在这种状态机模式下,所有对状态机的改变都通过同一对象界面接口来实现,这个对象界面接口是 SirnModellmnl 类。这种设计为建模者减轻了学习负担,也简化了在工具包的功能不足时的扩展编程。通过继承 SimModellmpl 来建模,在用户模型与 SimModellmpl 中间一般还会有一个Template 结构。各部分间的路

8、径和层次关系参见图 412 与图 413。图 412 的目录结构图显示了 Repast 自带文件、Template 及用户利用 Repast 建立的模型在计算机中存放的路径关系。图 413 层次关系图显示了一个典型的继承自 SimMod(,IImpl 的模型和Template 结构间的层次关系。三、类库简介三、类库简介Repast 共有近 130 个类,封装在 6 个库中,下面是 6 个类库的简要介绍。1分析库分析库 Analysis分析库中的类是用来聚集、记录数据以及建立数据表。通过使用 DataRecorder 类,建模者能将收集到的数据分类整理,并将这些数据以表格格式写人文件。2引擎库引

9、擎库 Engine引擎类负责建立、操纵和运行模型。SimModel 接口(Interface)是 Repast 中所有模型的超类(继承树状图表示中的根类) 。作为 SimModel 一个子类,SimModellmp 类可以作为绝大多数用 Repast 创立的模型的基类。控制类(BaseController,Controller,BatchController)负责通过图形用户界面处理用户交互,或通过批处理参数文件自动处理交互。时序表及相关行为类主要用来改变模型中的状态。3博弈库博弈库 Games博弈库中包含了一些建立对策论模型(比如囚徒困境等)所用的基本类。4因形用户界面库因形用户界面库 GU

10、IGUI 类负责实现模型的图形可视化,包括对图形界面显示的快照功能以及制作模型运行的活动录像(影像资料,quicktime 格式) 。各种。Dsplay 类与 Space 空间库中的类协同工作,把空间位置关系的抽象和空间关系的显示分离开来,可以针对不同的空间特征设计不同的可视化显示方案。通过一个显示界面(Displaysurface) , 。Painter 类处理这些空间库在屏幕上的显示,而显示界面本身就能够完成对所显示对象的探测。对可视化的模拟对象点击鼠标左键,就会弹出一单独舷窗口,其中显示点中主体的当前状态。5空间库空间库 Space空间类是表述各种空间的基础容量类(在通常的计算机术语中,

11、容量类是指以包含其他类作为自己的元素的类,比如数组、集合、链表等) 。空间类包括二维表空间(有边界) 、圆环面空间(上下无边界)等。这些空间类允许在 x,y 坐标轴的基础上对对象进行括人和检索。空间库中还包含了一些节点类和链接类,以方便建立基于网络的模型。空间类和在GUI 库中的显示类协同操作,以实现空间和对象的可视化。在 RePast 中,空间(sPaces)的存在有两种目的:(1)作为空间型主体的基类,比如附带的示例模型 Sugarscape and Lif;,中的 SugarSPace 或 InfiniteLifeSPace;(2)作为主体的容器,定义 iE 体间的空间位置关系。RePa

12、st 提供以下空间类:Diffuse2D 二维散射的离散近似。空间本身是一个上下左右都闭合的圆环形的(toriodal)网格,格子都有两层。Obect2DGrid 离散的二维网格,单元格中有对象。Object2DTorus 离散的二维圆环面,单元格中有对象。Multl2DGrid 二维网格,单元格中可以包括一个以上的对象。每个单元格中的对象的顺序不确定。OrdMMulti2DGrid 二维网格,单元格中可以包括一个以上的对象。每个单元格中的对象的顺序都是先进先出。Multi2DTOrus 二维圆环面,单元格中可以包括一个以上的对象。每个单元格中的对象的顺序不确定。OrderedMulti2DT

13、orus 二维圆环面,单元格中可以包括一个以上的对象。每个单元格中对象的顺序都是先进先出。Diffuse2DHexagoual 二维散射的离散近似。空间本身是一个 toriodal(甜甜圈形的)六边形网格,格子都有两层。Object2DHexaeonalGrid 离散的二维六边形网格,单元格中有对象。ONeconHexgonalTorus 离散的二维六边形圆环面,单元格中有对象。Multi2DHexalGrid 二维六边形网格。单元格中可以包括一个以上的对象,每个单元格中对象的顺序不确定。OrderedMulti2DRexagonalGrid 二维六边形网格。单元格中可以包括一个以上的对象,每

14、个单元格中对象的顺序都是先进先出。MultiZDHexasonaITorus 二维六边形圆环面。单元格中可以包括一个以上的对象,每个单元格中对象的顺序不确定。OrderedMultiZDHexagonalTorus 二维六边形圆环面。单元格中可以包括一个以上的对象,每个单元格中对象的顺序都是先进先出。RasterSPace 表现地理数据的二维网格。每个单元格可以包含一个对象,在这个空间中移动可以用距离、坐标系或者离散的单元格位置。更多空间类信息可参见 Repast 的 API 文档。另外值得注意的是,网络空间与空间是完全不同的,将在 436 节网络模型中介绍网络空间。此外,前面提到的六边形指的

15、是单元格的形状,所以在六边形的网格或者回环面中,每个单元格都是六边形的,因此有六个邻居。这些空间类都有通过坐标系对 item 进行插人和删除的方法,还有能返回相邻单元格的item 列表的方法,以及找出相邻单元格中最大或最小 item 的方法等。至于什么是最大、最小,可以由用户自己定义。用空间类存放主体的坐标方便了增删主体和排序主体的操作,也方便针对一个主体的邻居空间进行查询。通常在一个特定空间中,所有的主体都由该空间的实例变量负责主体位置的部署。如在 build-Modlel 方法中,可能有下述代码:Object2DGrid space =new Object2DGrid(spaceWidth

16、,spaceHeight) ;for(int i=0;inumagents;i+)in x,y;do x=Random.uniform.nextIntFromTo(0,space.getSizeX()-1) ;y=Random.uniform.nextIntFromTo(0,space.getSizeY()-1) ;while(space.getObjectAt(x,y)!=null) ;MyAgent agent=new MyAgent(x,y,space) ;space.putObjectAt(x,y,agent) ;agentList.add(agentt) ; 上边第一行代码创建了一个 ObjectZDGrid 空间,Do 循环返回随机的 x,y 坐标,如果这个坐标位置被占用则继续返回新的坐标位置。然后创建了主体,把主体的弓佣(reference)按这些坐标加人到空间。如果空间是可重空间(Multi spaces) ,则不需要核查空间中的单元格是否被占用,可重空间中一个单元格可放置多个主体。无论选择

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 宣传企划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号