如何设置AnyLogic模型每日仅运行16小时(跳过22:00-06:00时段)
解决AnyLogic模型每日仅运行16小时(跳过22:00-06:00)的方案
AnyLogic没有直接修改仿真时间的可视化设置,但可以通过以下两种可靠方法实现跳过夜间时段:
方案一:直接跳转仿真时间(推荐,精准跳过无活动时段)
通过每日触发的事件,让模型从22:00直接跳转到次日06:00:
- 添加一个周期性事件,设置触发时间为每天22:00,周期24小时。
- 在事件的
onAction代码块中写入:// 计算次日6:00的仿真时间(当前时间 + 8小时,单位:秒) double targetTime = getTime() + 8 * 3600; // 直接推进模型到目标时间,跳过夜间所有过程 getExperiment().runUntil(targetTime);
这个方法会让仿真时间瞬间从22:00跳到06:00,期间不会执行任何实体活动、事件(除非事件触发时间正好是06:00),完全符合跳过夜间的需求。
方案二:临时调整时间缩放倍数
如果需要模拟“快速过夜间”的效果(而非直接跳转),可以通过动态调整时间缩放实现:
- 添加两个周期性事件:
- 事件1:触发时间为每天22:00,周期24小时
- 事件2:触发时间为每天06:00,周期24小时
- 在事件1的
onAction中写入:// 大幅提高时间缩放倍数,快速跑完夜间8小时 getExperiment().setTimeScale(10000); - 在事件2的
onAction中写入:// 恢复正常时间缩放 getExperiment().setTimeScale(1);
注意:如果模型夜间有需要执行的逻辑,这个方法会让这些逻辑快速完成,若不需要则优先选方案一。
额外注意事项
- 两种方法都会自动同步模型的日历时间(
getCalendar()),无需额外处理。 - 若夜间有必须执行的后台任务(如数据存档),可在时间跳转/加速前,在事件代码中先执行对应逻辑。
内容的提问来源于stack exchange,提问作者Steffen
相关产品推荐
相关产品推荐

