WorkingDayMovement

该博客介绍了城市居民在工作日的移动模型,包括从家到办公室、商场的活动,以及晚上活动的详细模拟。模型涉及不同场景的路径规划、等待时间生成以及在特定地点的活动。此外,还涵盖了汽车出行的模拟,并根据节点状态切换不同的移动模式。
摘要由CSDN通过智能技术生成

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
	随机一个-4300043000=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() 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值