AnyLogic中如何将ResourcePool利用率时间图表数据导出至Excel?
实现带时间戳的ResourcePool利用率导出到Excel
你需要的是时间序列数据集(而非直方图数据集)来记录每个时间点的资源池利用率,以下是具体操作步骤:
1. 创建时间序列数据集
- 在仿真软件的「Projects」面板中,右键点击「Datasets」→ 新建「Dataset」,命名为
utilizationTimeSeries - 双击打开该数据集,添加两列:
- 第一列:命名
timestamp,类型选择「Date/Time」 - 第二列:命名
utilization,类型选择「Double」
- 第一列:命名
- 添加一个周期性事件到主代理或Main模块,设置事件的触发间隔(比如每1分钟,根据你的仿真时间单位调整),在事件的「Action」中写入代码:
注意:将// 记录当前仿真时间戳和资源池利用率 utilizationTimeSeries.add(today(), yourResourcePool.utilization());yourResourcePool替换为你实际的ResourcePool对象名称。
2. 导出数据集到Excel
你可以选择在仿真结束时自动导出,或者添加手动触发按钮:
自动导出(仿真结束时)
- 找到Main模块的「onDestroy」事件(仿真结束时触发),写入以下代码:
ExcelFile excel = new ExcelFile(); // 将数据集写入Excel的Sheet1,从A1单元格开始,包含表头 excel.writeDataSet("Sheet1", 1, 1, utilizationTimeSeries, true); // 保存文件,可自定义路径和文件名 excel.save("资源池利用率统计.xlsx");
手动导出(按钮触发)
- 拖一个「Button」控件到仿真界面,设置按钮文本为「导出统计数据」
- 在按钮的「onClick」事件中写入上述相同的Excel导出代码。
3. 额外优化
- 如果需要自定义时间戳格式(比如
yyyy-MM-dd HH:mm:ss),可以修改数据集的timestamp列为「String」类型,然后修改采集代码:SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String formattedTime = sdf.format(new Date(today())); utilizationTimeSeries.add(formattedTime, yourResourcePool.utilization()); - 若仿真周期长、数据量大,可设置周期性写入Excel(比如每小时写入一次),避免内存占用过高:在周期性事件中添加写入代码,每次写入时追加数据(需调整
writeDataSet的参数,或使用writeRange方法)。
内容的提问来源于stack exchange,提问作者user20346372
相关产品推荐
相关产品推荐

