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

如何在AnyLogic仿真运行后提取Transporter随时间变化的速度至Excel/数据库?

在AnyLogic中导出Transporter随时间变化的速度数据到Excel或数据库

一、导出到Excel

1. 采集速度数据

首先需要在仿真运行过程中记录Transporter的时间-速度数据,常用两种采集方式:

  • 触发式采集:利用Transporter的onSpeedChange事件(速度变化时自动触发),或在onBeforeMove/onAfterMove事件中添加记录逻辑。
  • 定时采样:添加一个Event对象,设置固定时间间隔(比如0.1秒),每次触发时记录当前时间和Transporter速度。

在Main或Agent的初始化代码中创建Dataset存储数据(多Transporter场景建议增加标识列):

Dataset speedDataset = new Dataset("时间", "速度", "TransporterID");

在采集事件中添加数据:

// 触发式采集示例(Transporter的onSpeedChange事件)
speedDataset.add(time(), getSpeed(), getName());

// 定时采样示例(Event的onAction事件)
speedDataset.add(time(), myTransporter.getSpeed(), myTransporter.getName());

2. 导出到Excel文件

在仿真结束事件(比如Main的onStop事件)中调用导出函数:

  • 简单导出:
exportToExcel(speedDataset, "Transporter速度数据.xlsx", "Sheet1", true);
// 参数说明:数据集、文件名、工作表名、是否覆盖已有文件
  • 自定义导出(更灵活控制格式):
ExcelFile excelFile = new ExcelFile("Transporter速度数据.xlsx");
excelFile.writeDataset(0, 0, speedDataset); // 从第0行第0列开始写入数据集
excelFile.save();

文件默认保存在项目根目录,也可指定绝对路径(如"C:/仿真数据/Transporter速度数据.xlsx")。

二、导出到数据库

1. 配置数据库连接

在AnyLogic的Database面板中添加数据库连接:

  • 选择数据库类型(MySQL、SQLite、PostgreSQL等)
  • 填写连接URL、用户名、密码(SQLite只需指定数据库文件路径)
  • 测试连接确保正常访问

2. 准备数据表

提前在数据库中创建存储表,以MySQL为例:

CREATE TABLE IF NOT EXISTS transporter_speed (
    record_id INT AUTO_INCREMENT PRIMARY KEY,
    timestamp DOUBLE NOT NULL,
    speed DOUBLE NOT NULL,
    transporter_id VARCHAR(50) NOT NULL
);

也可在AnyLogic初始化代码中执行建表语句:

executeUpdate("CREATE TABLE IF NOT EXISTS transporter_speed (" +
    "record_id INT AUTO_INCREMENT PRIMARY KEY," +
    "timestamp DOUBLE NOT NULL," +
    "speed DOUBLE NOT NULL," +
    "transporter_id VARCHAR(50) NOT NULL)");

3. 插入数据

  • 实时插入:数据量小时,采集同时直接插入数据库(用参数化查询避免SQL注入):
executeUpdate("INSERT INTO transporter_speed (timestamp, speed, transporter_id) VALUES (?, ?, ?)",
    time(), getSpeed(), getName());
  • 批量插入:数据量大时,先将数据存入列表,仿真结束后批量插入提升效率:
// 初始化列表(在Main或Agent中定义)
List<Object[]> batchData = new ArrayList<>();

// 采集时添加数据到列表
batchData.add(new Object[]{time(), getSpeed(), getName()});

// 仿真结束时批量插入(Main的onStop事件)
executeBatchUpdate("INSERT INTO transporter_speed (timestamp, speed, transporter_id) VALUES (?, ?, ?)",
    batchData);

注意事项

  • 多Transporter场景务必加入唯一标识(名称/ID),避免数据混淆。
  • 定时采样间隔需根据仿真精度调整:间隔过小增加数据量,过大可能丢失关键速度变化。
  • 超大数据量导出Excel时,建议用CSV格式替代,提升性能。

内容的提问来源于stack exchange,提问作者Jahidul Hasan Razib

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 04:27:31