1

私は、犯罪経歴と犯罪執行 (投獄) という、独立しているが関連している 2 つのプロセスを定義しようとしています。以下に図を示します。

  1. 犯罪は、エージェントが内部移行を通じて犯罪歴をすでに開始している場合にのみ実行されます。欲望 (犯罪から遠ざかる) は、エージェントが投獄されている間に発生する可能性のある最終的な状態です (そのため、私はこの問題を 2 つの独立したプロセスとして定義しています)。
  2. 犯罪が発生すると (内部遷移commitCrime)、変数committedCrimeは に設定されtrueます。commitCrimeトランジションには警備員がthis.ImprisonmentStateChart.isStateActive(Free)いるので、エージェントが投獄されている場合、エージェントは犯罪を犯すことができません。
  3. 犯罪が行われるたびに、状態 Free: から状態遷移が評価されますthis.committedCrime == true。刑務所に入ると、エージェントは最終的に釈放されます。

私の問題はcommitCrime、Free 状態に戻った後に遷移が再開されないことです。commitCrimeがトリガーされた後に遷移を再開するという考えreleaseFromPrisonですが、Anylogic 7でそれを行う方法が見つかりませんでした.

何か案は?

4

1 に答える 1

1

最も簡単な方法は、ガードを外してアクションを if ステートメントでラップすることだと思います。

if ( ImprisonmentStateChart.isStateActive(Free) )
     committedCrime == true;
于 2016-05-17T10:31:12.183 に答える