参数变化:跟踪元数据

问题描述

我正在尝试在 AnyLogic 中使用参数变化。我的输入是 3 个参数,每个参数变化 5 次。我的输出是需水量。我从参数变化中需要的是需求根据三个参数的不同组合而变化的方式。我想像这样:有 10,950 行(每天一个),第一列是时间(以天为单位),第二列是第一个组合的值,第二列是第二个组合,依此类推向前。跟踪此元数据然后能够将其导出到 excel 的最佳方法是什么?我已经在我的 main 中添加一个“数据集”来跟踪每次模拟的需求,但我不确定要向参数变化实验界面添加什么来跟踪不同迭代的输出。有一种方法来知道哪个输入组合产生了给定的输出(例如,将组合作为每列的名称)也很有帮助。我看到有 Java Actions,但我一直无法弄清楚代码来做我需要的。感谢您对此事的任何帮助。

解决方法

最简单的方法是在输出数据库表中跟踪它,然后在运行结束时将其导出到 Excel。只要这些表包含多次运行的输出(例如,仅在实验开始时清除,而不是在运行时清除),您的参数变化实验就会结束使用包含所有运行结果的 Excel 文件。 (您可能需要在 PV 实验中关闭并行执行,以免在尝试并行写入同一个 Excel 文件时遇到问题。)

例如,您可能有表格:

  • run_details 包含 idparm1parm2parm3(根据您的实际参数和一些生成的唯一 ID 使用正确的列名每次运行)

  • output_demand 包含 run_idsim_time_hrsdemand_value 列(假设您在模拟时间的每小时存储一些需求值)其中 { {1}} 交叉引用 run_id

    中的运行 ID

(如何分配唯一的运行 ID 以及写入/清除这些表的方式和时间有额外的复杂性,但我只是介绍核心设计。您也可以绕过需要串行执行通过编程控制何时导出到 Excel,而不是使用内置的“在模型执行结束时导出表”功能,但这也更复杂。)