AnyLogic快餐仿真:双源时长、队列长度测量及仿真参数设置求助
快餐仿真模型AnyLogic问题解决方案
1. 获取队列长度
- 直接调用队列对象的
size()方法,比如点餐队列queue_order,在仪表盘、数据收集模块中使用queue_order.size()即可实时获取当前队列长度。 - 若需统计队列长度的历史数据,可拖拽Statistics > Queue Statistics模块,关联目标队列后,系统会自动收集队列长度、平均等待时间等数据;也可使用Data Set模块,在队列的
onEnter和onExit事件中添加记录当前size()的代码。
2. 测量不同Source的系统停留时间
- 给每个Source生成的Agent添加自定义属性(如
sourceType,字符串或枚举类型),在Source的On agent created事件中赋值,例如第一个Source设置agent.sourceType = "Source1",第二个设置agent.sourceType = "Source2"。 - 在Agent进入系统时(Source生成环节)记录时间:
agent.entryTime = time();在Agent离开系统的Sink模块On enter事件中,计算停留时间:agent.stayTime = time() - agent.entryTime。 - 使用Statistics > Histogram或Data Set模块,按
sourceType分组统计stayTime,实现分Source的停留时间测量。
3. 设置仿真重复次数与特定运行时长
- 设置运行时长:在主窗口的Experiment面板中,选择对应实验类型(如Single Run、Monte Carlo),在
Stop time栏输入指定时长(例如8*60代表8小时,时间单位可在模型设置中调整)。 - 设置重复次数:选择Monte Carlo实验,在
Number of runs栏输入所需重复次数,系统会自动完成多轮运行并汇总结果;若用普通实验,可通过代码循环控制,但优先推荐Monte Carlo实验的可视化配置方式。
4. 时间测量起止模块结果不准确的修正方案
- 检查模块触发时机:确保Time Measure Start在Agent进入系统时触发(如Source的
On agent created或首个队列的On enter事件),Time Measure End在Agent离开系统时触发(Sink的On enter事件)。 - 避免重复触发:给Agent添加
isTimed布尔属性,触发Start时设为true,触发End时设为false,防止同一Agent多次触发计时模块。 - 改用Agent自带属性计时:直接在Agent中记录
entryTime并计算stayTime,这种方式更可控,能避免模块关联错误导致的计时偏差。
内容的提问来源于stack exchange,提问作者thesyisyi
相关产品推荐
相关产品推荐

