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
- Mason 入门例子1 --- 基本概念及建立空仿真
- Mason 入门例子4 --- 增加UI
- Mason 入门例子2 --- 增加操场空间和静态学生
- Mason 入门例子3 --- 让学生动起来
- Mason 入门例子5 --- 增加学生之间的联系
- Oracle RAC 基本概念及入门
- Oracle RAC 基本概念及入门
- Oracle RAC 基本概念及入门
- Oracle RAC 基本概念及入门
- MySQL 基本概念了解及入门
- 图论入门及基本概念
- LATTICE FPGA 工具介绍之ACTIVE-HDL 建立工程及仿真步步来(1)
- 1_netty入门例子及原理
- python仿真入门-Simulation(1)
- TQ2440裸奔程序建立工程进行仿真过程及注意事项
- 算法入门1:基本概念
- Spring入门1-基本概念
- Oracle RAC学习笔记:基本概念及入门
- 视频 背景建模,运动物体检测
- 河内塔算法
- 【OpenGL/ES】 第04讲 glTexImage2D用法的区别
- c++2
- 拷贝文件目录(可根据后缀过滤文件)
- Mason 入门例子1 --- 基本概念及建立空仿真
- iOS海哥开发笔记(开发中如何使用数据持久化)海哥原创,让你对存储知识一目了然
- Java程序运行机制及运行过程
- eclipse安装quick text search插件,全文搜索
- 自定义简单常用的RadioButton
- git 操作
- PC与串口通信
- rpm|yum包管理|源代码包安装
- Hadoop RPC远程过程调用源码解析及实例