原文 :https://www.theanylogicmodeler.com/post/dynamic-vs-static-property-in-block
作者:Vitor Lemoshttps:/www.theanylogicmodeler.com/post/dynamic-vs-static-property-in-block
更新:Feb 22, 2022
阅读:7 min
您是否在使用流程建模库的模块时,浪费了数小时来解决各种未知行为?你是否知道动态和静态属性的区别?下面让我们通过示例的延迟(Delay)模块来仔细介绍一下。
假设我们有一个小流程,其中智能体会经历延迟,然后在蓝色方块或红色方块中随机等待:
假设我们希望智能体随机出现在两个方块中,但当运行仿真时,可能会发生所有智能体都出现在其中一个块中的情况:
出现这种情况是因为,与“延迟时间(Delay time)”为动态属性不同,“智能体位置(Agent location)”这个属性是静态属性
在上面的例子中,模型的行为实际上是在模型启动时随机选择了红色方块,并且在整个仿真过程中,该决策/计算保持TRUE。
相关的信息在每个模块的“帮助”部分加以说明——通常会高亮显示动态特性。更简单的方法是将鼠标悬停在属性名称旁边的小箭头/图标上,它将显示类型(灰显文本)。
对于所有静态属性,都有一个可以“设置”的方法,在这个示例中,我们有 set_entityLocation() ,允许我们在创建模块时更改设置的值。
在这个例子中,当一个智能体进入模块时调用这个方法,同时也会改变之前进入的智能体的位置,当一个新的智能体进入模块时,你会看到原先在一个方块中等待的智能体会全部跳转到另一个方块中。
因此,请注意对静态参数使用这些内置的“设置”方法,因为这可能会导致像本示例这样的意外行为产生。
这个特定示例的实际解决方案是让每个智能体处理其各自的位置,而不是依赖延迟模块来完成。
您可以在此处下载具有正确解决方案的示例:
或者您可以运行或下载放置在AnyLogic云的模型