ONE模拟器
WorkingDayMovement
WorkingDayMovement是工作日移动模型,节点按照以下的活动模式进行运动:
在家休息-从家到单位-在单位上班-从单位到商场-在商场活动-从商场到家
public class WorkingDayMovement extends ExtendedMovementModel
BusTravellerMovement
此模型运行需要额外的一些参数作者正在研究中
OfficeActivityMovement
在办公室移动的模型封装在此类中
初始化参数
//参数文件设置的参数
workDayLength
nrOfOffices
distance//officeSize
officeWaitTimeParetoCoeff
officeMinWaitTime
officeMaxWaitTime
startedWorkingTime
//其他参数
pathFinder//路径查找算法,这里用的是Dijkstra
mode:
private static final int WALKING_TO_OFFICE_MODE = 0;
private static final int AT_OFFICE_MODE = 1;
officeLocation:
如果配置文件中没有officeLocationsFile则随机设置办公室坐标
如果有则读取后以随机顺序放入officeLocation
deskLocation
桌子位置,在办公室范围内随机一个点
paretoRNG
使用帕累托分布随机一个办公室等待时间
其他重要方法:
#获取桌子位置,在办公室范围内随机一个点
public Coord getRandomCoorinateInsideOffice()
#初始化节点位置
public Coord getInitialLocation()
#获取路径
public Path getPath(){
if (mode == WALKING_TO_OFFICE_MODE){return path;}//去上班的路径
if (startedWorkingTime == -1) {}//第一次执行上班模型
if (SimClock.getIntTime() - startedWorkingTime >= workDayLength) {return path;}//下班时间到
if (sittingAtDesk) {}
else{}
return path;
//模拟来回走动
}
#获取等待时间
protected double generateWaitTime()
#返回变量
public Coord getLastLocation()
public boolean isReady()
public Coord getOfficeLocation()
#如果需要上下翻转地图则初始化一些变量
public void setLocation(Coord lastWaypoint)
HomeActivityMovement
在家移动的模型封装在此类中
初始化参数
//参数文件设置的参数
timeDiffSTD
//其他参数
distance=100//以家的坐标为正方形的中心,distance为边长的正方形是家的范围。...离谱,默认10000平的家
pathFinder//路径查找算法,这里用的是Dijkstra
mode:
private static final int WALKING_HOME_MODE = 0;
private static final int AT_HOME_MODE = 1;
private static final int READY_MODE = 2;
homeLocationsFile:
如果配置文件中没有homeLocationsFile则随机设置家坐标
如果有则读取后以随机顺序放入homeLocation
timeDifference
随机一个-43000(43000秒=12小时)到43000的数
其他重要方法:
#初始化节点位置
public Coord getInitialLocation()
#获取路径
public Path getPath(){
if (mode == WALKING_HOME_MODE){return path;}//回家的路
}
#获取等待时间
protected double generateWaitTime()
#返回变量
public Coord getLastLocation()
public boolean isReady()
public Coord getOfficeLocation()
#如果需要上下翻转地图则初始化一些变量
public void setLocation(Coord lastWaypoint)
EveningActivityMovement
在商场移动的模型封装在此类中
初始化参数
//参数文件设置的参数
nrOfMeetingSpots
minGroupSize
maxGroupSize
maxWaitTime
minWaitTime
scsID//shoppingControlSystemNr
//其他参数
distance=100//以家的坐标为正方形的中心,distance为边长的正方形是家的范围。...离谱,默认10000平的家
pathFinder//路径查找算法,这里用的是Dijkstra
mode:
private static final int WALKING_TO_MEETING_SPOT_MODE = 0;
private static final int EVENING_ACTIVITY_MODE = 1;
meetingSpotLocations:
如果配置文件中没有shoppingSpotsFile则随机设置商场坐标
如果有则读取后以随机顺序放入meetingSpotLocations
id
scs//实例化商场,初始化随机种子,放置给商场放置节点,放置商场坐标
maxPathLength = 100;
minPathLength = 10;
其他重要方法:
#初始化节点位置
public Coord getInitialLocation()
#获取路径
public Path getPath(){
if (mode == WALKING_TO_MEETING_SPOT_MODE){return path;}//去商场的路
else if (mode == EVENING_ACTIVITY_MODE){return path;}//模拟逛商场的移动模型
}
#获取等待时间
protected double generateWaitTime()
#返回变量
public int getID()
public boolean isReady()
public Coord getShoppingLocation()
public boolean isReadyToShop()
public int getMinGroupSize()
public int getMaxGroupSize()
#将节点设置为准备开始购物旅行。
public Coord getShoppingLocationAndGetReady()
#
public static void reset(){nextID = 0;}
CarMovement
保证汽车只能沿路行走
public void setNextRoute(Coord nodeLocation, Coord nodeDestination)
//设置下一段路的起点和终点
其他参数
movementUsedForTransfers//确定交通工具
doEveningActivityProb//下班后购物的概率
移动模型从HomeActivityMovement开始
mode从HOME_MODE开始
private static final int BUS_TO_WORK_MODE = 0;
private static final int BUS_TO_HOME_MODE = 1;
private static final int BUS_TO_EVENING_ACTIVITY_MODE = 2;
private static final int WORK_MODE = 3;
private static final int HOME_MODE = 4;
private static final int EVENING_ACTIVITY_MODE = 5;
方法:newOrders()
继承自:ExtendedMovementModel
方法在当前MM就绪时在每个getPath()请求之间调用(isReady()方法返回true)。子类应该实现所有需要在这里进行的状态更改,例如交换移动性模型等。
switch (mode) {
case WORK_MODE:
if (workerMM.isReady()){
setCurrentMovementModel(workerMM);//开车依旧开车,坐公交依旧坐公交
如果晚上购物
去商场并且将节点设置为准备开始购物旅行
mode = BUS_TO_EVENING_ACTIVITY_MODE;
如果不购物
回家
mode = BUS_TO_HOME_MODE;
}
case HOME_MODE:
if (homeMM.isReady()){
去上班
mode = BUS_TO_WORK_MODE;
}
case EVENING_ACTIVITY_MODE:
if (eveningActivityMovement.isReady()){
回家
mode = BUS_TO_HOME_MODE;
}
case BUS_TO_WORK_MODE:
if (movementUsedForTransfers.isReady()){
mode = WORK_MODE;
}
case BUS_TO_HOME_MODE:
if (movementUsedForTransfers.isReady()) {
mode = HOME_MODE;
}
case BUS_TO_EVENING_ACTIVITY_MODE:
if (movementUsedForTransfers.isReady()) {
mode = EVENING_ACTIVITY_MODE;
}
default:
其他方法
public Coord getInitialLocation()//初始化为家的位置
//返回变量
public Coord getOfficeLocation()
public Coord getHomeLocation()
public Coord getShoppingLocation()