如何在AnyLogic中处理EVENT提取的运输机Fleet速度数据?
解决方案:运输机速度采集、存储/可视化及最大速度获取
一、实时速度的采集、存储与图表展示
1. 周期性采集速度(EVENT组件配置)
- 将EVENT组件的触发类型设为周期性,周期值填
1(单位为秒)。 - 在EVENT的动作代码中,根据需求选择采集方式:
- 采集舰队平均速度:
double fleetAvgSpeed = transporterFleet.getSpeed(); - 采集单台运输机的速度(遍历舰队):
for(Transporter t : transporterFleet) { double singleTransSpeed = t.getSpeed(); // 后续单台数据处理逻辑 }
- 采集舰队平均速度:
2. 存储到数据库
- 先配置数据库连接(如SQLite、MySQL),创建存储表(示例表结构:
transporter_speed_data,含timestamp、fleet_speed、transporter_id、single_speed字段)。 - 在EVENT动作中写入插入逻辑:
- 插入舰队平均速度:
try { insertInto(transporter_speed_data) .columns(transporter_speed_data.timestamp, transporter_speed_data.fleet_speed) .values(new Date(), fleetAvgSpeed) .execute(); } catch(SQLException e) { traceln("数据存储失败:" + e.getMessage()); } - 插入单台运输机速度:
try { for(Transporter t : transporterFleet) { insertInto(transporter_speed_data) .columns(transporter_speed_data.timestamp, transporter_speed_data.transporter_id, transporter_speed_data.single_speed) .values(new Date(), t.getId(), t.getSpeed()) .execute(); } } catch(SQLException e) { traceln("单台数据存储失败:" + e.getMessage()); }
- 插入舰队平均速度:
3. 展示到时间序列图表
- 拖入
Time Series Chart组件到画布,可提前配置数据系列(如“舰队平均速度”“运输机1速度”等)。 - 在EVENT动作中添加数据到图表:
- 舰队平均速度:
chartSpeed.addDataPoint(new Date(), fleetAvgSpeed); - 单台运输机速度:
for(Transporter t : transporterFleet) { chartSpeed.addDataPoint(t.getName(), new Date(), t.getSpeed()); }
- 舰队平均速度:
二、正确获取运输机最大速度(解决getMaximumSpeed(MPS)报错)
报错原因是调用方式错误:getMaximumSpeed()是单个Transporter的方法,且无需传入单位参数(MPS是单位枚举,用于单位转换而非方法入参)。
1. 获取单台运输机的最大速度
// 先判断舰队非空,避免空指针 if(!transporterFleet.isEmpty()) { double singleMaxSpeed = transporterFleet.get(0).getMaximumSpeed(); // 如需转换单位(如转成KMH) double maxSpeedKMH = Units.convert(singleMaxSpeed, Units.METERS_PER_SECOND, Units.KILOMETERS_PER_HOUR); }
2. 获取舰队中所有运输机的最大速度(取最大值)
double fleetMaxSpeed = 0; for(Transporter t : transporterFleet) { double tMax = t.getMaximumSpeed(); if(tMax > fleetMaxSpeed) { fleetMaxSpeed = tMax; } }
三、注意事项
- 触发EVENT前确保运输机舰队已初始化,避免空指针异常。
- 数据库操作需用
try-catch包裹,防止模型因存储失败崩溃。 - 若舰队规模较大,可适当调整采集周期,避免性能损耗。
内容的提问来源于stack exchange,提问作者Jahidul Hasan Razib
相关产品推荐
相关产品推荐

