Mason 入门例子1 --- 基本概念及建立空仿真

来源:互联网 发布:java ftp下载文件状态 编辑:程序博客网 时间:2024/05/19 19:57

1. 安装Mason及GeoMason

Mason 官方网站:

http://cs.gmu.edu/~eclab/projects/mason/#Download

GeoMason官方网站:

http://cs.gmu.edu/~eclab/projects/mason/extensions/geomason/

GeoMason例子:

http://www.css.gmu.edu/node/194


按照官方网站的介绍,下载Jar包,源代码,以及相关文档和教程。


2. Mason架构介绍

Mason的架构布局

 

Mason由模型层(Model)和可视化层(Visualization)两部分组成,这两层互相分离。

模型层:

可以通过建立检查点把当前仿真模型存储到磁盘上,并且可保存和恢复上一次仿真结束时的状态。

包括一个事件时刻表(Schedule),用于安排Agent出现的时机,控制着仿真中的时间。

包括一个或多个域(Fields),由一系列的对象或者值所组成,例如内置的网络(networks), 网格(grids)等,用于表现空间。

还包括一个高质量的随机数发生器(Random Number Generator)。

 

可视化层:

为仿真提供2D或者3D的可视化工具。

包括一个controller,用于控制schedule,最常见的controller有console窗口。他们也负责管理进行可视化工作的displays。

Displays使用field portrayals对fields进行可视化。他们通常会调用simpleportrayals来进行特定的值或者对象的可视化。

当使用鼠标选择对象后,simple portrayal会创建inspector能进行细节的监控。


3. Mason建立空仿真

最好复制一份原工程,在复制版上进行更改,在Eclipse中导入复制后的Mason的源代码工程。

其中vecmath, j3dcore, j3dutils是我下载后添加进去的,原包中应该没有。

为了方便我把mason文件夹中的docs文件夹移出来了。




在mason文件夹下建立一个空的仿真:



import sim.engine.*;public class Students extends SimState{    public Students(long seed)    {         super(seed);    }    public static void main(String[] args)    {         doLoop(Students.class, args);         System.exit(0);    }}


Mason会建立一个单一的SimState的子类对象,负责维护整个仿真的状态。

SimState包括一个ec.util.MersenneTwisterFast的实例(比Java自己的Random效率更高),但是不是同步的,当在多线程环境下时,需要手动同步。构造器中的seed就是用来

初始化随机数生成器的,只是用seed的前32位。

还包括一个离散事件时间表(discrete event schedule),它是Schedule或者其子类的实例对象。用于控制Agent的动作,表征时间的变化。

 

运行Mason应用时,doLoop方法的作用:

1.      创建SimState子类对象,初始化RNG(很可能用当前时间作为seed)。

2.      调用SimState的start方法初始化Model.

3.      按照离散事件时间表重复调用step(SimState state),使Agent按照时间表行动。

4.      当时间表中的Agent行动完了或者step方法调用了一定次数,调用finish方法进行清理工作。

 

伪代码如下:

 

SimState state = new Students(System.currentTimeMillis());state.start();doif (!state.schedule.step(state)) break;while(state.schedule.getSteps() < 5000);state.finish();

运行:

先打印版本信息和Job数和seed的值,然后开始SimState的仿真,最后打印Exhausted表示结束仿真。


PS: 最后的exit(0)是为了关闭多余的线程,保证程序正常退出。



参考: Mason的一个英文教程,在官网上有,讲的十分详细。

http://cs.gmu.edu/~eclab/projects/mason/manual.pdf

0 0
原创粉丝点击