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

Linking Database to dynamic variable, AnyLogic

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

无需通过 table 函数。您可以使用 SQL.

直接从 table 中提取数据

学习使用数据库查询向导。将光标放在代码字段中,然后如下打开它。它允许您 select 任何数据,甚至可以为您编写正确的代码:

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

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

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

查看此处的 SO 答案了解更多详情

因此将所有数据放在一个 table 函数中是防止访问数据库的昂贵操作的好方法。

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

这是带有一些虚拟数据的 table

这里是 table 函数的设置

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

这里是 table 函数当 运行 模型

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