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

AnyLogic个人学习版如何导出模型带时间戳输出作为另一模型输入

AnyLogic拆分模型间带时间戳数据的导出导入方法

流程A模型(上游)数据导出操作

  • 先明确需要传递的实体字段,至少包含仿真时间戳、实体唯一标识、业务属性(如加工状态、类型、优先级等)三类核心信息。
  • 推荐使用CSV格式存储导出数据,无需额外依赖。你可以在流程A的最终Sink块的「On enter」触发逻辑中写入数据,提前在模型中创建CSVWriter对象并初始化表头,示例写入逻辑如下:
// outputWriter为提前创建的CSVWriter实例,需配置好文件输出路径
outputWriter.writeLine(
    getEngine().time(), // 输出当前事件对应的仿真时间戳
    agent.id, // 实体唯一ID
    agent.productType, // 自定义业务属性,按需调整
    agent.priority // 其他需要传递的参数
);
  • 流程A仿真结束时调用outputWriter.close()关闭文件流,避免数据丢失。如果仿真运行时间长,也可以配置每写入1000条自动调用outputWriter.flush()刷入磁盘。

流程B模型(下游)数据导入操作

  • 将流程A导出的CSV文件放入流程B模型的resources文件夹下,确保模型运行时可以直接读取。
  • 采用时间匹配的方式驱动实体生成,逻辑如下:
    • 模型启动阶段,用CSVReader一次性读取所有CSV数据存入自定义的ArrayList集合,按时间戳字段做升序排序。
    • 维护一个全局读取指针,初始值为0,创建一个动态事件,每次触发时判断当前仿真时间是否等于指针指向数据的时间戳:如果匹配,就按数据的属性参数生成对应实体,送入流程B的起始Source块,指针加1后再触发下一次动态事件;如果不匹配,就将动态事件的下次触发时间设置为指针指向数据的时间戳。
  • 示例启动读取逻辑如下:
// 提前定义实体数据存储类InputData,inputReader为提前创建的CSVReader实例
ArrayList<InputData> inputList = new ArrayList<>();
while (inputReader.hasNextLine()) {
    InputData row = new InputData();
    row.timestamp = inputReader.readDouble();
    row.entityId = inputReader.readInt();
    row.productType = inputReader.readString();
    // 其余字段赋值
    inputList.add(row);
}
// 按时间戳升序排序,避免上游导出数据时序混乱
Collections.sort(inputList, (a, b) -> Double.compare(a.timestamp, b.timestamp));

注意:两个拆分模型的仿真时间单位必须完全一致,若使用日历时间作为基准,需要统一时间转换规则,避免时序错位。

内容的提问来源于stack exchange,提问作者Francisco Marques

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:18:00