イベントの実行が時間に依存しない離散イベントシミュレーションを設計しようとしています。次に発生するイベントの選択は、モデル(私の場合は人)の条件にのみ依存し、一度に1つずつ実行されます。
私はそこにいくつかのデザインを見つけました:
イベントスケジューリング-イベントのキューが保持され、各イベントの実行中に、新しいイベントがスケジュールされるか、古いイベントがキャンセルされます。
アクティビティスキャン-各サイクル中に、すべてのイベントが繰り返され、人の現在の状態がイベントの実行条件を満たしている場合、そのイベントが実行されます。
イベントのグラフ-イベントのグラフを作成し、各エッジが遷移の状態を表すようにします。
それぞれの方法について私が考慮していることは次のとおりです。
イベントスケジューリング-追加するイベントのロジックはイベント全体に分散されているため、追跡が困難です。さらに、キューは大幅に変更されます。時間ベースではないため、変更を加えるたびにキュー全体を反復処理して、削除するイベントを見つける必要があります(たとえば、必要な場合)。 2つのイベントAが先行する場合にイベントBを削除します)。
アクティビティスキャン-特に、各サイクル中に実行する次のイベントを見つけるために多くのイベントを反復処理する必要がある場合は、パフォーマンスが低下する可能性があります。
イベントのグラフ-グラフが非常に大きい場合、グラフを初期化してすべてのエッジを設定するのが面倒になる可能性があります。
どの方法が最も適切であるか、もしそうなら、どのように私が述べられた考慮事項に対処できるかについて、あなたの意見を求めました。たぶん、完全に異なるデザインが適切かもしれません。