通过变量更新触发任何逻辑事件

Anylogic event triggering via variable update

在我尝试构建的代理中,我有一个可以从外部更改的动态变量,我想link此更改以触发事件或状态图转换。

我尝试了条件 variable != 0 但它有 2 个错误:它不考虑 0 以防它恰好出现并且它锁定了我的代理,因为它总是 true条件。

您知道 Anylogic 是否可以做到这一点吗?或者我应该尝试不同的方法?

这是一个冗长的解决方案,但我会在其他方法都不起作用时使用它。在流程图所在的代理内部创建虚拟源和汇块。请务必 select 在源代码中“调用 inject() 函数”。

并且主要是,每当这种情况发生时,将虚拟代理注入该源块。

只要在虚拟源块中使用该代理中的变量创建代理,您就可以控制转换。

正确的技术解决方案是:

  1. 使您的变量 private(因此它实际上根本无法从外部来源更改)
  2. 创建一个名为 setMyVariablepublic 函数,它接受一个名为 newValue
  3. 的双参数
  4. 在该函数中,写入myVariable = newValue;。在该行下方,您现在可以执行任何应在变量更新时触发的附加代码

这是面向对象的做事方式:)

为了完整性再添加一种解决方案:对于这种情况,我更喜欢使用消息传递。第一部分类似于 OOP 方法 - 将 variable 设为私有,这样就不能从代理外部直接更改它。然后使用 AnyLogic 的 agent communication 函数更改变量发送代理消息。一旦收到值已更改的消息,它就会更改值,然后将其转发到状态图以触发转换。这解决了您的问题:

  1. 必要时可以对“0”采取行动,
  2. 状态图未锁定,因为您只对值变化做出反应而不是它的值