两个 "parallel" 进程的状态图定义
Statechart definition of two "parallel" processes
我试图定义两个独立但相关的过程,犯罪生涯和犯罪执法(监禁)。这是一个图表:
- 只有当代理人已经通过内部过渡开始了他的犯罪生涯时,才会实施犯罪。 Desistance(远离犯罪)是当代理人被监禁时可能发生的最终状态(这就是为什么我将这个问题定义为两个独立的过程)。
- 当犯罪发生时(内部转换
commitCrime
)变量 committedCrime
被设置为 true
。 commitCrime
转换有守卫 this.ImprisonmentStateChart.isStateActive(Free)
,因此如果代理人被监禁,他就不能犯罪。
- 每次犯罪时,都会从状态 Free 评估条件转换:
this.committedCrime == true
。一旦入狱,特工最终将被释放。
我的问题是 commitCrime
转换在回到自由状态后没有重新启动。我的想法是在 releaseFromPrison
被触发后重新启动 commitCrime
转换,但我还没有找到如何使用 Anylogic 7 来做到这一点。
有什么想法吗?
我认为最简单的方法是删除保护并将操作包装在 if 语句中:
if ( ImprisonmentStateChart.isStateActive(Free) )
committedCrime == true;
我试图定义两个独立但相关的过程,犯罪生涯和犯罪执法(监禁)。这是一个图表:
- 只有当代理人已经通过内部过渡开始了他的犯罪生涯时,才会实施犯罪。 Desistance(远离犯罪)是当代理人被监禁时可能发生的最终状态(这就是为什么我将这个问题定义为两个独立的过程)。
- 当犯罪发生时(内部转换
commitCrime
)变量committedCrime
被设置为true
。commitCrime
转换有守卫this.ImprisonmentStateChart.isStateActive(Free)
,因此如果代理人被监禁,他就不能犯罪。 - 每次犯罪时,都会从状态 Free 评估条件转换:
this.committedCrime == true
。一旦入狱,特工最终将被释放。
我的问题是 commitCrime
转换在回到自由状态后没有重新启动。我的想法是在 releaseFromPrison
被触发后重新启动 commitCrime
转换,但我还没有找到如何使用 Anylogic 7 来做到这一点。
有什么想法吗?
我认为最简单的方法是删除保护并将操作包装在 if 语句中:
if ( ImprisonmentStateChart.isStateActive(Free) )
committedCrime == true;