将数据库链接到动态变量 AnyLogic

时间:2021-07-19 04:52:28

标签: anylogic

如果我能在以下方面获得任何帮助,我将不胜感激。我有一个包含降水预测的 Excel 电子表格。该表有两列(天和降水),并且有超过 20,000 行,即超过 20,000 天的降水。我将此表加载到 AnyLogic 上。我正在使用系统动力学模型并有一个名为 Rainfall 的动态变量。对于模拟的每一天,我希望 Rainfall 从加载的数据库中提取值,但不知道如何将动态变量链接到数据库。我已经尝试了以下操作:插入一个名为 ProjectedRainfall 的 tableFunction 并且它的值是“从数据库加载的”。对于“参数列”,我选择了“天”,对于“值列”,我选择了降水。然后我插入了一个名为 getrainfall 的函数,在函数体下我写了“return ProjectedRainfall(time())。然后我添加了一个设置为等于“getrainfall(time())”的动态变量。这会产生一个错误,指出“The类型 Main 中的 getrainfall() 方法不适用于参数(double)。” 关于我可能做错了什么的任何想法或如何将动态变量链接到数据库的替代方法?谢谢您的帮助!

2 个答案:

答案 0 :(得分:0)

无需通过表函数。您可以使用 SQL 直接从表中提取数据。

学习使用数据库查询向导。将光标放在代码字段中并如下打开它。它允许您选择任何数据,甚至为您编写正确的代码: enter image description here

有很多关于这方面的示例模型和帮助文章,希望这对您有所帮助

答案 1 :(得分:0)

虽然可以在需要时直接从数据库中查找数据,但如果在模型执行期间会多次发生这种情况(在您的模型中似乎就是这种情况),则不建议这样做。

使用数据库时的最佳选择是仅从数据库中获取数据一次,然后将数据放入您创建的代理或新的 Java 类中。

请参阅此处的 SO 答案以了解更多详情What is the fastest way to look up continuous data on Anylogic (Java, SQL)

因此,将所有数据放入 tableFunction 是防止访问数据库的代价高昂的好方法。

我复制了你的情况,它似乎有效

这是带有一些虚拟数据的表格 enter image description here

这里是表格功能的设置 enter image description here

这里是动态变量的设置 - 看到我在动态变量中添加了一个参数,以便它可以在默认值中使用 enter image description here

这是运行模型时的表函数

enter image description here

这里是一些使用动态变量显示当天降水量的文本。您也可以在这里直接访问 table 函数,无需通过动态变量。虽然我假设您需要系统动力学模型的动态变量 enter image description here

相关问题