Repast仿真学习

来源:互联网 发布:linux存储服务器有哪些 编辑:程序博客网 时间:2024/06/05 01:12

Repast模型包括:model对象(仿真模型本身,运行也是从这个文件运行)、space对象(Agent动作发生的环境)、agent

Model会继承RePast的SimModelImpl对象。





Repast仿真分为:batch-run(运行过程中不需要人的交互)和non-batch(需要人的交互)

Repast仿真过程阶段:1.准备阶段(Setup)

 2.实际运行阶段


Repast仿真实现流程:1.定义各种类型对象的属性和状态

 2.定义对象所处于的环境

 3.定义Agent的移动规则和博弈规则

 4.程序用户界面的设计

时间表机制:负责仿真中用户定义的状态的改变。

这些时间步执行的动作由BasiceAction的子类来封装

Class BasicAction{

execute();//必须实现

}

动作的调度方式有五种:1.每个时间步运行一次

    2.特定的时间步运行一次

    3.固定时间间隔运行

    4.仿真暂停时候运行

    5.仿真结束时候运行

显示机制

界面显示包括两类对象:Agent(必须实现Drawable接口)、环境(Spaces类、Spaces对应的Displays类)、DisplaySruface类

界面程序实现的流程:1.Class Model{

     setup(){

New DisplaySurface;

}

     }

 2.BuildDisplay{

New Display;

Display.add(Space);

Display.add(Agent);

DisplaySurface.add(Display);

DisplaySurface.updatedisplay();//进行显示

     }

仿真界面的实际绘制过程如下:1.Schedule调用DisplaySurface.updateDisplay();

    DisplaySurface.LocalPainter();//描绘自己本身

2.LocalPainter从off-screen的BufferImage创建一个java.awtGraphics2D对象

3.围绕Graphics2D封装一个SimGraphics对象

4.LocalPainter调用Display对象的DrawDisplay(){Display.add(SimGraphics)}

5.Display对象获取它所包含的空间中所有对象的一个列表。Display轮循该列表,通过每一个对象的Drawable接口请求一些图形的绘制信息,并使用这些信息准备好的SimGraphics对象,列表中的每一个要显示的对象都被请求使用SimGraphics秒回自己本身

6.当Painter完成对所有Display对象的轮循之后,它描绘这个off-screen图像给屏幕,绘制结束

在Repast中创建仿真的图像界面主要就是实现与仿真对象对应的空间的Drawable接口,并把这些控件添加到对应的Display对象中去,然后减这些Display对象添加到DisplaySurface中去,显示机制的实质是每一个对象容器将是机会值得责任委托给自己所包含的对象,而这些对象如果也是一个对象容器的话,也会类似的逐级委托下去知道该对象不是一个容器为止。

Repast仿真程序框架:Agent类(描述Agent的行为)、Model类(实现仿真的准备阶段和实际运行)

Model类的实现方式:1.继承SimModel接口类的程序框架

2.实现SimModelImpl抽象类的程序框架

SimModel程序框架包括: 1.基础变量(与Repast仿真程序框架相关的变量)和描述变量(与具体仿真模型相关的变量)

2.构造函数

3.构成仿真程序框架的几个主要方法:getImintParam()、buildModel()、buildDisplay()、buildGraphs()、begin()、setup()、step()

4.继承SimModel类的其他方法

5.变量的Get和Set方法

6.用户定义的与具体仿真模型相关的函数

7.Main方法

SimModel整体框架描述如下:

public class MyModel extends SimpleModel{

//变量定义

private DisplaySurface dsurf;

//构造函数

public MyModel(){

}

//返回用户需要显示和通过界面调整的描述变量的字符数组

public String[] getInitParam(){

}

//创建仿真过程图形界面,在Batch-run方式下可不包含这个方法

private void buildDisplay(){

}

//创建方针统计数据结果的图形界面,Repast中仿真结果的统计图表有三种形式,分别是曲线图,柱状图和块状图

private void buildGraphs(){

}

//创建仿真的Agent和Space还可以包括收集对象(collection)

public void buildModel(){

}

//该方法准备模型的运行,以及调用buildDisplay、buildGraphs、buildModel这三个方法

public void begin(){

}

//将仿真过程创建的对象设置为NULL,抛弃所有的DisplaySurfaces对象、统计图表和动作序列表。创建时间表等

public void setup(){

}

//其他部分,用户创建的其他函数代码

//创建Model对象,开始运行

Main(){

}

}

程序框架中几个主要方法的执行顺序:setup()->begin()->BuildModel->BuildSchedule->BuildDisplay->Step

SimModelImpl程序框架与SimModel程序框架大致类似,最大的差别在于没有Step方法,所有动作调度,主要通过Schedule变量进行

0 0
原创粉丝点击