AnyLogic仿真中如何获取每次重复实验的队列平均长度并输出
AnyLogic队列平均长度跨重复实验取值方案
- 第一步:确认队列统计功能开启
选中目标Queue块,在属性面板的「统计」分类下,勾选收集队列长度统计数据,统计周期保持默认的「整个仿真运行」即可,若未开启该选项,统计对象只会记录当前瞬时值,无法生成全程均值。 - 第二步:创建存储变量
在实验级(不要放在智能体内部)创建两个变量:- 类型为
double的singleRunAvg,用于存储单次仿真的队列平均长度 - 类型为
ArrayList<Double>的allRunsAvg,初始值设为new ArrayList<Double>(),用于存储所有重复实验的单次均值
- 类型为
- 第三步:编写单次仿真结束的取值逻辑
打开重复实验的属性面板,在「仿真结束时」的动作编辑栏输入以下代码:
注意:代码中// 提取当前单次仿真全程的队列长度时间加权均值 singleRunAvg = QueueBlock.statsSize.mean(); // 将当前次结果存入总集合 allRunsAvg.add(singleRunAvg);statsSize为小写开头,需和你实际的队列块名称匹配,避免拼写错误。 - 第四步:计算多次重复的总平均
在重复实验属性面板的「所有仿真结束时」的动作编辑栏输入以下代码,即可得到10次重复实验的平均结果:// 计算所有重复实验的总平均队列长度 double finalAvgQueue = average(allRunsAvg); // 输出结果到控制台,也可写入输出表或自定义变量留存 traceln("10次重复实验总平均队列长度:" + finalAvgQueue); - 常见问题排查
如果你此前只能拿到最终队列长度,通常是两个原因:- 未开启队列长度统计功能,直接调用了
QueueBlock.size()获取瞬时值,而非统计对象的均值 statsSize.mean()的调用时机错误,没有在单次仿真完全结束时取值,导致统计数据不完整
- 未开启队列长度统计功能,直接调用了
- 补充说明
若你需要的是「每次实体进入队列时的队列长度算术平均」而非「随时间变化的时间加权平均」,将上述代码中的statsSize替换为statsCount即可。
内容的提问来源于stack exchange,提问作者Nora Seinfield
相关产品推荐
相关产品推荐

