如何通过编程方式调整AnyLogic实验的运行速度?
模型运行速度控制逻辑失效问题排查及修复
常见失效原因
- 快进模式未正确退出
runFast()会强制模型以最高速度运行,且优先级高于setRealTimeScale()的参数设置,你当前代码在进入非快进时段时,没有先停止快进模式,导致后续的倍速设置完全不生效。 - 日期函数取值定义不匹配
不同工具库的getDayOfWeek()返回值规则不一致:部分库周日返回1、周六返回7,若你的预期是周六周日为非工作日,需要先确认当前库的返回值规则是否和你的判断逻辑匹配,避免把工作日误判为非工作日。 - 触发时机存在时间差
你使用每小时触发一次的循环事件执行逻辑,若时段切换节点(如8点、12点、17点)刚好落在两次事件触发的间隔中间,会导致最长1小时的配置不生效空档。 - 时间来源错误
需确认date()函数获取的是模型模拟时间,而非运行设备的本地系统时间,若取到系统时间会完全不符合模拟场景的时间逻辑。 - 事件触发时间类型错误
需确认循环事件的触发间隔是按照模拟时间计算,而非真实物理时间,若设置为真实时间间隔,模型快进时会跳过大量模拟时段的逻辑执行。
修复后代码示例
Date date = date(); // 先退出快进模式,避免之前的快进设置覆盖后续倍速配置 getEngine().stopRunFast(); if (getDayOfWeek(date)==1||getDayOfWeek(date)==7) { getEngine().runFast(); } else if (getHourOfDay(date)<8||getHourOfDay(date)==12||getHourOfDay(date)>=17) { getEngine().runFast(); } else { getEngine().setRealTimeScale(5); }
额外优化建议
- 可以把循环事件的触发时间调整到每个时段切换的节点(如每天的8点、12点、17点、0点)触发,避免时间差空档
- 增加一次模型启动时的初始化执行,避免模型启动初期的配置不生效
内容的提问来源于stack exchange,提问作者lll
相关产品推荐
相关产品推荐

