【问题标题】:Is it possible to modify experiment parameter values after a model is run?模型运行后是否可以修改实验参数值?
【发布时间】:2021-01-08 03:58:07
【问题描述】:

我正在关注Integrating AnyLogic Models with External Java Applications 模块,虽然我能够在运行导出的 java 应用程序之前更改参数,但一旦模型运行,这些值似乎变得不可变。有没有办法在运行时动态修改参数值?

下面是我的 Java 代码的 sn-p:

    final Simulation s = new Simulation();
    IExperimentHost host = new ExperimentHost(s);
    s.parameter1 = 50;
    s.setup(host);
    host.launch();
    s.runTheModel();
    s.parameter1 = 100;

结果是 parameter1 永远不会从 50 变为 100。有没有办法绕过这个?

【问题讨论】:

    标签: java anylogic


    【解决方案1】:

    尝试设置参数。帮助菜单稍微谈到了这一点。

    编辑: 您最初的问题与作为外部 java 应用程序运行没有直接关系,但我认为这确实可以简化事情。导出 java 应用程序时,请查看 .bat 文件。您将看到命令行运行模型的样子。当我们从外部应用程序运行时,我们所做的只是让外部应用程序调用此命令行,而不是 AnyLogic 在帮助菜单中讨论的内容。这样做的一个显着优势是您可以在开发环境中轻松模仿导出模型中发生的情况。

    问问自己为什么要在运行时更改这些参数。是因为有一条 read 语句,而您只是在模型运行之前没有数据吗?如果是这样,请考虑实例化对象的顺序,并且在设置好要使用的变量之前不要启动它们。这可以通过将参数传递给 main、设置数据库值或让主代理执行各种读取语句来完成。

    您只是希望项目随时间变化吗?如果是这样,请考虑变量,而不是参数。考虑其他可以让您更轻松地更改流程的对象。例如,管道或其他序列之前的阀门是否可以提供您想要的控制级别?

    此时,可能需要有关您正在尝试完成的任务/您正在建模的系统的更详细信息,以便提供更具体的建议。

    【讨论】:

    • 我试过了,但似乎 set_parameter1 无法识别:“方法 set_inflowPar1(int) 未定义为 Simulation 类型。”为清楚起见,我在外部 Java 环境中将这个模型作为独立的 Java 应用程序运行。我可以访问 s.inflowPar1 但不能访问 s.set_inflowPar1()。
    • 更详细地重新阅读您的原始帖子。我正在编辑答案以扩展从命令行运行的更多内容和其他常规项目。在模型开始运行后,我们在主(或其他代理)级别使用 set_parameter。在实验级别可能无法使用它,这就是“s”。或者,可能是您在实验级别更改了它,但它不会向下传播,具体取决于您使用它的位置/方式。
    • 可能是流体库中的某些参数启动后无法更改。我知道几年前流体库是全新的时就是这种情况。我们根据需要使用其他组件来管理流程。
    • 感谢您的编辑!我确实在尝试随着时间的推移更改项目;我们正在尝试制作一个 API,以便允许在运行时远程修改这些项目,这就是我们使用独立 Java 应用程序的原因。我们已经公开了变量,但是我在访问我的 Java 代码中的变量时遇到了问题,如帖子中所述。如果有任何帮助,可以通过以下方式访问我们的简单模型:dropbox.com/s/zf30b9n67rrucew/Simplified_launch3.alp?dl=0
    • 我现在意识到我几乎可以互换使用参数和变量。我想澄清一下,我们确实在使用变量以便在运行时更改它们。
    猜你喜欢
    • 1970-01-01
    • 2019-09-27
    • 2011-07-16
    • 1970-01-01
    • 2019-06-06
    • 2017-04-26
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    相关资源
    最近更新 更多