1

イベントの実行が時間に依存しない離散イベントシミュレーションを設計しようとしています。次に発生するイベントの選択は、モデル(私の場合は人)の条件にのみ依存し、一度に1つずつ実行されます。

私はそこにいくつかのデザインを見つけました:

  • イベントスケジューリング-イベントのキューが保持され、各イベントの実行中に、新しいイベントがスケジュールされるか、古いイベントがキャンセルされます。

  • アクティビティスキャン-各サイクル中に、すべてのイベントが繰り返され、人の現在の状態がイベントの実行条件を満たしている場合、そのイベントが実行されます。

  • イベントのグラフ-イベントのグラフを作成し、各エッジが遷移の状態を表すようにします。

それぞれの方法について私が考慮していることは次のとおりです。

  • イベントスケジューリング-追加するイベントのロジックはイベント全体に分散されているため、追跡が困難です。さらに、キューは大幅に変更されます。時間ベースではないため、変更を加えるたびにキュー全体を反復処理して、削除するイベントを見つける必要があります(たとえば、必要な場合)。 2つのイベントAが先行する場合にイベントBを削除します)。

  • アクティビティスキャン-特に、各サイクル中に実行する次のイベントを見つけるために多くのイベントを反復処理する必要がある場合は、パフォーマンスが低下する可能性があります。

  • イベントのグラフ-グラフが非常に大きい場合、グラフを初期化してすべてのエッジを設定するのが面倒になる可能性があります。

どの方法が最も適切であるか、もしそうなら、どのように私が述べられた考慮事項に対処できるかについて、あなたの意見を求めました。たぶん、完全に異なるデザインが適切かもしれません。

4

3 に答える 3

3

http://www.simjs.comで Javascript Discrete Event Simulation ライブラリを試すことができます。イベントスケジューリングと離散時間の流れをサポートしています。将来の「イベント」をスケジュールしたり、述語を待機させたり、(シミュレートされた) 時間が期限に達したり、述語が満たされたときに呼び出されるコールバック関数を登録したりできます。

于 2011-07-03T19:01:47.457 に答える
1

あなたの質問は私にはあまり明確ではありませんが、離散イベントシミュレーションシステムを使用して時間成分を無視することができると思います。すべてのイベントを「今すぐ」スケジュールでき、時間領域に関係なく機能するはずです。私はSimPyhttp://simpy.sourceforge.net/を使用しており、IMOはそれが可能です。

于 2011-03-11T12:32:20.713 に答える
1

ペトリネットを調べることをお勧めします。これらはビジネス プロセス モデリングに広く使用されており、時間を必要としません。色付きのペトリネットは、必要に応じて時間を表すこともできます。確率的ペトリネットは、ランダム性と時間にも対処できます。これは、それらが何であるか、および何ができるかについての決定的な紹介です。

http://www2.ing.unipi.it/~a009435/issw/extra/murata.pdf

さまざまな言語でそれらのパッケージがたくさんあり、高速な実装のために代数的方法論を使用して独自のパッケージを開発できます。

于 2015-06-24T20:34:43.773 に答える