从 Excel 中逐行读取参数以进行 Anylogic 实验

Posted

技术标签:

【中文标题】从 Excel 中逐行读取参数以进行 Anylogic 实验【英文标题】:Reading Parameters row by row from excel for Anylogic Experiment 【发布时间】:2021-12-01 12:46:38 【问题描述】:

我想运行一个 Anylogic Parameter 实验,并且我希望从 excel 文件中连续读取参数,以便每行 excel 数据对应于一次运行的参数。同样,我希望它运行的次数与 excel 中的参数行一样多。我可以使用 ExcelControlName.getCellNumericValue("ExcelSheetName", RowNumber, ColNumber) 读取一行数据,但是如何设置它,使其通过运行所有行的参数自动运行多次。

【问题讨论】:

【参考方案1】:

在您的仿真模型中,创建一个名为 row 的参数,这将是您的参数变化实验中唯一更改的参数...然后您将在您的仿真中将您的参数转换为变量,每个变量将读取excel文件如下>

ExcelControlName.getCellNumericValue("ExcelSheetName", row, ColNumber)

其中 row 是在您的参数变化实验中发生变化的参数,而 colNumber 是代表您要评估的特定变量的列。

【讨论】:

比我的解决方案简单得多!但我会保留我的,因为它在模拟运行之前和之后的代码示例中提供了额外的灵活性。【参考方案2】:

一个非常有用的问题。

一种选择是使用模拟对象,而不是让模型跳过实验并运行模型。

这只会让您更好地控制模型执行,并且您可以使用一些模拟运行前后的代码。

如下图超简单模型

我有一个参数和一个跟踪参数然后停止模拟的事件。

然后在实验中,我有一个 Excel 对象,一个链接到 main 参数的变量,以及一个只调用 run() 的按钮

excel文件里面有一些简单的数据

现在在实验的 Java 部分你只需要添加以下代码。

这可确保根据运行计数使用正确的数据更新变量,并且当您停止模型时,如果 Excel 工作表中有更多值要加载,它将再次调用运行函数。

请注意,Excel 中的行索引从 1 开始,我们的数据有一个标题,所以我们想从第 2 行开始,因此我添加了2 + getExperiment().getRunCount()

如果您运行这个简单的模型,您将在控制台中看到打印出 Excel 文件中的值。

10.0
20.0
30.0

【讨论】:

以上是关于从 Excel 中逐行读取参数以进行 Anylogic 实验的主要内容,如果未能解决你的问题,请参考以下文章

按键精灵 从EXCEL固定列中逐行复制内容到另一界面

有没有办法从 ASC 文件中逐行读取并在特定子字符串后检查它?

从文件中逐行读取并存储到二维数组中

Objective C - 创建文本文件以在 Cocoa 中逐行读取和写入

Python从txt文件中逐行读取数据

DELPHI中逐行读取并复制