如何在AnyLogic中基于Dep28 Sink条目创建小时级条目数直方图
AnyLogic中基于Sink条目实现每小时数量直方图的方法
1. 记录条目进入Sink的时间
在Dep28 Sink的On enter事件中添加代码,记录每个条目的到达时间(转换为小时单位):
- 先在模型中创建一个
List<Double>类型的变量,命名为sinkEntryTimes,用于存储所有条目进入Sink的时间(小时)。 - 在Sink的On enter事件中写入:
sinkEntryTimes.add(time() / 3600);
2. 统计每小时的条目数量
创建一个TimeSeries<Integer>变量hourlyEntryCounts,用于存储各小时对应的条目总数,再编写自定义函数完成统计:
void calculateHourlyCounts() { hourlyEntryCounts.clear(); int totalHours = (int) Math.ceil(time() / 3600); // 遍历每个小时区间统计数量 for (int hour = 0; hour <= totalHours; hour++) { int count = 0; for (double entryTime : sinkEntryTimes) { if (entryTime >= hour && entryTime < hour + 1) { count++; } } hourlyEntryCounts.add(hour, count); } }
- 若需实时更新统计结果,在Sink的On enter事件末尾调用
calculateHourlyCounts();;若仅需仿真结束后展示,在Main的On stop事件中调用该函数。
3. 创建并配置图表
根据需求选择合适的图表组件:
选项1:使用柱状图(适配离散小时计数)
- 添加Bar Chart组件到界面,在右侧属性面板的Data标签页,设置Series为
hourlyEntryCounts。 - 自定义横轴标签为「仿真时间(小时)」,纵轴标签为「每小时条目数」。
- 若需实时更新,在
calculateHourlyCounts()函数末尾添加yourChartName.update();(替换为你的图表组件名称)。
选项2:使用直方图组件
- 添加Histogram组件到界面,在Data标签页设置Data source为
sinkEntryTimes。 - 设置Bin width为1,Minimum value为0,Maximum value为仿真总时长(单位:小时,如仿真时长24小时则填24)。
- 在Appearance标签页,将Y-axis represents改为
Count,确保纵轴显示条目数量。
4. 验证结果
运行仿真后,检查图表显示的每小时计数是否与实际条目进入情况一致,若有偏差可调试时间转换逻辑或统计函数。
内容的提问来源于stack exchange,提问作者Kevin Etter
相关产品推荐
相关产品推荐

