You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AnyLogic按计划统计资源利用率:洗车模型每10小时存储资源池数据方法

AnyLogic固定时间区间统计资源池利用率实现方案

1. 搭建数据存储载体

提前创建用于存储统计结果的数据集(DataSet),设置4个列分别对应:

  • 时间区间起始值
  • 时间区间结束值
  • 资源池名称
  • 区间平均利用率
    如果需要直接导出到本地文件,可以额外添加Excel导出组件,绑定该数据集。

2. 配置周期触发事件

在Main代理中拖入Event组件,参数配置如下:

  • 触发类型选择Cyclic(循环触发)
  • 首次触发时间设为10.0(单位和仿真时间单位统一为小时)
  • 循环周期设为10.0

3. 编写统计逻辑

先创建一个元素类型为ResourcePool的集合targetPools,把所有需要统计的资源池全部加入该集合,避免后续重复编码。
在Event的触发动作栏写入以下代码:

// 计算当前统计区间的起止时间
double start = time() - 10;
double end = time();

// 遍历所有目标资源池统计区间利用率
for (ResourcePool pool : targetPools) {
    // 调用AnyLogic原生方法获取指定时间区间的平均利用率(8.5及以上版本支持)
    double util = pool.utilization(start, end);
    // 将统计结果写入提前创建的数据集
    statsDataSet.add(start, end, pool.getName(), util);
}

// 仿真运行到100小时结束时自动导出数据到本地
if (time() >= 100) {
    statsDataSet.exportToExcel("D:\\洗车仿真利用率统计.xlsx");
}

4. 低版本兼容方案

如果你使用的AnyLogic版本低于8.5,没有utilization(start, end)方法,可以通过累计工作时间差值计算区间利用率:

  1. 先在Main代理中添加一个HashMap变量lastWorkTimeMap,变量类型写java.util.Map<ResourcePool, Double>,初始值设为new java.util.HashMap<>()
  2. 将Event的触发动作替换为以下代码:
double start = time() - 10;
double end = time();
for (ResourcePool pool : targetPools) {
    double currentWorkTime = pool.getUtilizationTotal();
    double lastWorkTime = lastWorkTimeMap.getOrDefault(pool, 0d);
    // 区间利用率=区间内累计工作时长/区间长度
    double util = (currentWorkTime - lastWorkTime) / 10;
    statsDataSet.add(start, end, pool.getName(), util);
    // 更新存储的累计工作时间
    lastWorkTimeMap.put(pool, currentWorkTime);
}

内容的提问来源于stack exchange,提问作者HARSH GOYAL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 07:18:04