如何在 Anylogic 的比较运行实验中保存不同运行的结果?

Posted

技术标签:

【中文标题】如何在 Anylogic 的比较运行实验中保存不同运行的结果?【英文标题】:How can I save the results of different runs in a compare runs experiment in Anylogic? 【发布时间】:2021-02-05 11:06:45 【问题描述】:

我想将 Anylogic 中比较运行实验中不同运行的结果保存在 Excel 工作表中,或者保存到某个变量或输出中,以便我使用这些值进行一些进一步的计算。我该怎么做呢

【问题讨论】:

【参考方案1】:

最好使用内置数据库,并在所有运行结束时将其写入 Excel。

创建包含“run_number”、“replication_number”、“experiment_parameter_X”、“my_result_y”等列的 dbase 表。您在 Main 上的每个参数都应该有一个列(至少是您改变的那些)和您感兴趣的每个输出值。

这样,您可以在每次模型运行后使用insertInto 命令 (link) 轻松编写模型结果。

最后,只需勾选数据库中的“写入 Excel”复选框,选择文件,它就会写入所有原始结果。

还检查使用 dbase 的示例模型,有几个使用这种方法

【讨论】:

【参考方案2】:

另一种灵活的方法是将结果写入 CSV。这应该适用于任何类型的 AnyLogic 模拟或实验。

您必须将标准外部库导入环境中,并将代码添加到要在模拟运行结束时执行的实验中。

在进口部分你可以有这个:

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.OutputStream;
import java.io.PrintStream;

首先为名为 csvFileName 的文件名创建一个变量(您可以随意调用它)。然后在 root 中创建一个名为 updateMyCSV() 或类似的函数。该函数的一般结构为:

FileWriter pw = new FileWriter(csvFileName, true);

StringBuilder sb;
sb = new StringBuilder();
sb.append(<variablename>); sb.append(',');

然后对要导出的每个变量重复上述操作

然后完成函数:

sb.append('\n');
    
pw.append(sb);
pw.flush();
pw.close();

【讨论】:

以上是关于如何在 Anylogic 的比较运行实验中保存不同运行的结果?的主要内容,如果未能解决你的问题,请参考以下文章

将实验的所有复制数据保存在anylogic中

从主实验获取变量结果到参数变化实验 - AnyLogic

如何设置 Anylogic 优化实验?

在 AnyLogic 中保存变量

从 Anylogic 数据库中导出数据

我可以使用优化实验在 Anylogic 中实现多目标优化问题吗?