AnyLogic如何设置TimeMeasure块仅统计工作班次内的有效流程时间
AnyLogic工作时段专属流程耗时统计实现方案
可以实现该需求,原生TimeMeasure系列模块默认统计自然时间差,只需配合AnyLogic内置的ShiftCalendar组件做少量自定义开发即可,无需改动原有流程模块的核心逻辑。
前置准备
先在模型中添加ShiftCalendar组件,按需求配置班次规则:仅每日早7点至下午3点为工作时段,其余时间标记为非工作时段。
具体实现步骤
- 给需要统计流程时长的Agent添加2个自定义字段:
double类型的startMeasureTime:用于记录Agent进入统计节点的仿真时间戳double类型的validProcessDuration:用于存储最终计算出的有效工作时长
- 在
TimeMeasureStart模块的**On entry(进入时)**动作栏添加代码:agent.startMeasureTime = time(); - 在
TimeMeasureEnd模块的**On entry(进入时)**动作栏添加代码:// 计算start到当前时间之间的有效工作时长,返回值单位和仿真时间单位一致 agent.validProcessDuration = shiftCalendar.calculateWorkingTime(agent.startMeasureTime, time()); // 若需要存入统计数据集,可追加如下代码,替换为你自己的数据集对象名即可 // processDurationStats.add(agent.validProcessDuration);
效果验证
你举的示例场景中,Agent从14:30进入统计节点,次日8:30完成流程,calculateWorkingTime方法会自动扣除15:00到次日7:00的16小时非工作时段,最终返回的有效时长为2小时,完全匹配需求。
如果需要保留原生TimeMeasure的自然时长统计用于交叉验证,不需要修改原有模块的统计配置,两套统计逻辑可并行运行。
内容的提问来源于stack exchange,提问作者TRUESIM
相关产品推荐
相关产品推荐

