【MASON】ABM仿真笔记(二)预备篇——Mason核心之概述

本文翻译并提炼自官方文档

MASON的核心模拟代码在sim.engine包中,该包主要包含以下类:

  • sim.engine.SimState:保存Agent模型的全局对象。
  • sim.engine.Schedule:离散事件调度队列(Scheduling Queue)。
  • sim.engine.Stepable:由Agent实现的接口,step方法将作为Schedule的任务
  • 其他工具类。

SimState模拟实体,Schedule模拟时间,而fields模拟空间和Agent之间的关系。fields相关类不在sim.engine中,而在以下包中:

  • sim.field.grid:保存二维或三维网格。
  • sim.field.continuous:保存连续的二维或三维网格数据。
  • sim.field.network:保存图形和网络。

(一)模型

启动主程序需要创建一个sim.engine.SimState的子类,模拟所需的所有元素将组合在此类中。包括模型参数、自定义类型数据等,可以作为SimState子类的一个成员变量保存。
UML diagram of MASON’s core simulation and discrete-event schedule facility.
由于模型中的所有数据最终都存储在SimState子类的某个成员变量上,MASON可以将整个模型序列化为checkpoint文件,这意味着可以随时冻结模拟将其全部保存到文件中,并可以从此文件重新启动模型。为了实现这一点,所有MASON模型对象都实现了java.io.Serializable,这意味着它们可以写入流或从流中读取。
SimState已经包含了以下两个成员变量:

public MersenneTwisterFast random;
public Schedule schedule;

random是采用Mersenne Twister算法实现的随机数快速生成器。与java.util.Random的伪随机数不同,这是一个高质量的随机数生成器(尽管MersenneTwisterFast也是伪随机数生成器)。

MersenneTrusterFast不是线程同步的。通常MASON模拟是单线程的,也就没有问题。但如果模拟被分解为多个线程,需要确以线程安全的方式访问random,示例代码如下:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值