【问题标题】:Export one dataset each replication from a Parameter Variations experiment从参数变化实验中每次复制导出一个数据集
【发布时间】:2021-03-06 00:10:22
【问题描述】:

在参数变化实验中,我正在绘制来自位于 Main 的数据集的数据。像这样:

我使用以下代码在图中显示数据:

if(root.p_X == 7) {
plot.addDataSet(root.ds_waitTime,
    "X = " + root.p_X,
    transparent(red, 0.5), true, Chart.INTERPOLATION_LINEAR,
1, Chart.POINT_NONE);
else if(root.p_X == 14) {
plot.addDataSet(root.ds_waitTime,
    "X = " + root.p_X,
    transparent(red, 0.5), true, Chart.INTERPOLATION_LINEAR,
1, Chart.POINT_NONE);

我的问题与导出基础数据有关。我不确定导出数据的最佳方法是什么。对于每次模拟运行,我想将数据集 root.ds_waitTime 导出到 csv 或 excel 文件中,并用 root.p_X == 14 的值进行注释。我知道您可以将数据集添加到 2d 直方图数据集,但这也会转换数据,因此这似乎不是一个好的选择。另外,我没有建立外部数据库,我不想这样做。

是否可以将root.ds_waitTime 保存到第 1 列和第 2 列以进行模拟运行 1,将 root.ds_waitTime 保存到第 3 列和第 4 列以进行模拟运行 2,依此类推?

【问题讨论】:

    标签: anylogic


    【解决方案1】:

    在“实验”窗口中执行以下操作:

    1. 添加一个名为 i 的变量并将 0 赋值为它的初始值
    2. 在其属性中添加一个 Excel 文件元素并将其链接到您 PC 上所需的文件。将块命名为“excelFile”,这是默认名称。

    然后,在“模拟运行后”字段中“Java 操作”下的“实验”窗口属性中,使用以下代码(其中 dataSet 是数据集的名称):

    excelFile.writeDataSet(dataSet, 1, 2, 1 + i*2);
    i++;
    

    这样,每次模拟运行后,数据集都会写入接下来的 2 行。

    我使用的语法是指:

    • 工作表编号,即 1
    • 行号,即 2;我使用 2 为顶行留出空间,您可以在其中将 AnyLogic 之外的标题直接添加到文件中
    • 列号,即 1 + i*2

    对于标题行,您也可以添加以下代码:

    excelFile.setCellValue(dataset name, 1, 1, 1 + i*2);
    

    【讨论】:

    • 谢谢你,埃米尔。这正是我想要的,而且非常简单。有没有办法将我在实验中改变的参数的名称和值添加到 Excel 标题行?
    • 我很高兴这有帮助。要执行您的要求,您需要使用 excelFile.setCellValue("parameter", 1, 1, 1 + i*2); 遵循相同的逻辑使用“setCellValue”而不是“writeDataSet”可以只填充一个单元格。您只需要使用行号和列号来匹配您要执行的操作。
    猜你喜欢
    • 2021-04-17
    • 2016-12-14
    • 1970-01-01
    • 2013-01-03
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    • 2019-11-13
    • 2020-07-15
    相关资源
    最近更新 更多