【问题标题】:Linking Database to dynamic variable, AnyLogic将数据库链接到动态变量 AnyLogic
【发布时间】:2021-09-26 19:22:53
【问题描述】:

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

【问题讨论】:

    标签: anylogic


    【解决方案1】:

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

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

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

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

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

    这是带有一些虚拟数据的表格

    这里是table函数的设置

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

    这是运行模型时的表格函数

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

    【讨论】:

    • 如果您已将雨量更改为动态参数,则需要在末尾添加()。如果您使用自动代码完成,您将看到这一点。请记住,动态参数就像函数一样,它们有参数并返回一个值,因此使用了括号。如果您不使用 (),那么 AnyLogic 正在寻找具有该名称的变量,而不是函数或动态参数。
    • 我使用了自动编码完成并填写了雨量(天),但新的错误说当天无法解析为变量。
    • 当我输入雨量()时,我收到一条错误消息,提示“Main 类型中的方法雨量(双)不适用于参数()
    • 看我的例子。我用 time() 替换了 day,因为我的模型单位是天。我的动态变量需要一个 double 类型的参数作为输入。
    • 我将动态参数更改为 ProjectedRainfall(time()) ,现在当我输入雨量(time()) 时,它可以工作了!非常感谢您的帮助!
    【解决方案2】:

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

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

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

    【讨论】:

    • 这可能需要更多的学习,但谢谢!对了解有关此工具的更多信息非常有帮助!
    • 这实际上是最简单的方法 :) PS:还要研究如何提出更好的问题并充分利用 StackOverflow:benjamin-schumann.com/blog/2021/4/1/…。欢迎来到社区:)
    • 我尝试了这种方法,但出现错误。我选择了正确的表,对于值列,我选择了 precip,我将选择操作留空,对于选择操作,我选择了“值列表”,对于语法,我选择了 SQL。我得到的错误是:无法从 List 转换为加倍。我尝试将选择操作切换为“选择表记录”,但错误是“类型不匹配:无法从 ResultSet 转换为双精度”
    • 如果您有新问题,请始终开始一个新问题(显然先搜索它,其他人在您之前遇到过类似问题:))。见stackoverflow.com/help/how-to-ask
    猜你喜欢
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    • 2021-02-08
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多