Anylogic:你能在编辑框中输入概率分布吗?
Posted
技术标签:
【中文标题】Anylogic:你能在编辑框中输入概率分布吗?【英文标题】:Anylogic: can you type a probability distribution into an edit box? 【发布时间】:2020-03-29 12:53:36 【问题描述】:在模拟窗口中,在运行之前,我想通过在链接到变量的特定编辑框中键入例如“triangular(5,20,15)”来更改一些概率分布(例如延迟时间) . 我知道如何处理静态值,但不知道如何处理概率分布。
【问题讨论】:
【参考方案1】:AnyLogic 为 com.anylogic.engine.database.CodeValue 提供了内置功能。
它原本的意思是一个以文本形式存储在内部数据库中的分布函数可以被解析为java代码并执行,但实际上它也可以在没有数据库的情况下和任何类型的代码中工作。这与 Benjamin 的回答中的想法相同,只是您不需要添加任何外部 java 库。
像这样使用它:
CodeValue myCode = new CodeValue(this,"....java code to be executed");
myCode.execute();
在您的特定情况下,假设您有一个名为 variableA 的变量和一个名为 editbox 的编辑框,请使用以下内容来评估表达式,获取一个值并设置它对于变量:
CodeValue myCode = new CodeValue(this,"variableA = "+editbox.getText());
myCode.execute();
显然,允许用户在此处键入任何命令并在没有检查或错误处理的情况下运行它是一个坏主意,请注意这一点。
【讨论】:
非常感谢,你能解释一下把那个 CodeValue 表达式放在哪里吗? 在您的模拟实验中,添加 variableA。将代码放在用户可以单击以在文本框中评估其表达式的按钮中,或者将其添加到 Java Actions*/*Before each Experiment run 代码框下,以便它自动获取在模型启动时执行。要了解如何在启动时将模拟实验中的变量值传递给模型参数,请查看this video。 它可以工作,但是通过这种方式,我主要获得了我的参数的常量值(这取决于分布的类型,但在运行期间它仍然是一个静态值),相反我会喜欢在运行期间获得随机延迟时间 在这种情况下,您只需将用户输入转发到模型中字符串类型的参数。创建一个函数,使用上面的代码在每次执行时从文本中创建一个新值。在延迟时间等字段中,插入这个函数即可。 我在使用 CodeValue 时收到此错误:Annotation processing got disabled, since it requires a 1.6 compliant JVM
,有时我也会收到:error during model destruction: truncated class file
。有任何想法吗? @弗洛里安【参考方案2】:
这是一个 Java 问题。您需要将字符串(您的编辑框内容)转换为可执行代码。不是直截了当,但也不是不可能,请参阅 Convert String to Code 和类似的帖子。
【讨论】:
以上是关于Anylogic:你能在编辑框中输入概率分布吗?的主要内容,如果未能解决你的问题,请参考以下文章