两个 "parallel" 进程的状态图定义

Statechart definition of two "parallel" processes

我试图定义两个独立但相关的过程,犯罪生涯和犯罪执法(监禁)。这是一个图表:

  1. 只有当代理人已经通过内部过渡开始了他的犯罪生涯时,才会实施犯罪。 Desistance(远离犯罪)是当代理人被监禁时可能发生的最终状态(这就是为什么我将这个问题定义为两个独立的过程)。
  2. 当犯罪发生时(内部转换 commitCrime)变量 committedCrime 被设置为 truecommitCrime 转换有守卫 this.ImprisonmentStateChart.isStateActive(Free),因此如果代理人被监禁,他就不能犯罪。
  3. 每次犯罪时,都会从状态 Free 评估条件转换:this.committedCrime == true。一旦入狱,特工最终将被释放。

我的问题是 commitCrime 转换在回到自由状态后没有重新启动。我的想法是在 releaseFromPrison 被触发后重新启动 commitCrime 转换,但我还没有找到如何使用 Anylogic 7 来做到这一点。

有什么想法吗?

我认为最简单的方法是删除保护并将操作包装在 if 语句中:

if ( ImprisonmentStateChart.isStateActive(Free) )
     committedCrime == true;