一些背景和示例模型“打开”了一些幕后发生的事情,应该可以帮助您理解 AnyLogic 响应。
背景
AnyLogic 条件在模型的每一步都被检查(即,在模型开始时以及在开发人员显式创建或通过所使用的 AnyLogic 元素隐式创建的每个事件之后)。AnyLogic 还在后台使用 timeout 0 事件来实现状态转换;即,如果它决定任何类型的转换到期,它不会立即执行此操作,而是在相同的模拟时间安排一个事件来执行此操作,如果没有其他事件,它将在模型的下一步触发相同的模拟时间。如果您有专业版,您可以在模型运行时通过事件查看器看到这一点(见下文)。
条件转换
由于上述原因,在模型开始时评估条件。如果是true
,则安排一个超时 0 事件来实现转换。当此触发时,将再次检查条件(因为可能由于在同一模拟时间的干预事件而不再正确)。如果是true
第二次,则过渡继续进行。
示例模型
我改编了你的例子。我只有一个Main
带有两个状态和两个转换的状态图:randomTrue(0.95)
从状态 1 到状态 2 的条件一(带有您的条件),以及将状态 2 发送回状态 1 的超时 1。通过将条件放入函数中( check
),我可以添加一些额外的traceln
语句,以便我们更好地了解发生了什么。

使用显示的事件查看器运行此(设置为运行直到时间 0,因此它在模型启动时暂停)。条件评估为真,因此您可以看到设置了超时 0 转换事件。

我还traceln
为发生条件转换和转换回状态 1 添加了一些消息。这是一个运行示例。(一旦条件没有true
连续计算两次,转换将停止,因此将取决于为运行选择的随机种子。)
Checking condition at time 0.0: sampled true
Checking condition at time 0.0: sampled true
Probabilistically transitioned to state 2
Going back to state 1
Checking condition at time 1.0: sampled true
Checking condition at time 1.0: sampled true
Checking condition at time 1.0: sampled true
Probabilistically transitioned to state 2
Going back to state 1
Checking condition at time 2.0: sampled false
Checking condition at time 2.0: sampled true
Checking condition at time 2.0: sampled true
Probabilistically transitioned to state 2
Going back to state 1
Checking condition at time 3.0: sampled true
Checking condition at time 3.0: sampled true
Checking condition at time 3.0: sampled true
Probabilistically transitioned to state 2
Going back to state 1
Checking condition at time 4.0: sampled true
Checking condition at time 4.0: sampled false
请注意,在第一次转换之后,每次都会进行三个条件评估。我认为这是因为当状态 2 --> 状态 1 转换事件触发时也会评估条件(在其操作代码完成之后但在转换实际完成之前)。它是否评估true
或false
在这些点是无关紧要的,因为代理尚未处于状态 1,因此状态 2 转换不是“活动的”。(这似乎有点奇怪,因为如果代理处于条件转换处于活动状态的状态下,只检查条件会更有效。但是,我对这个额外的评估没有其他解释。)
然后它到达状态 1,因此检查条件(立即,没有事件),如果为真,则设置状态 2 转换事件(在触发时导致第二次检查)。