2

離散イベントシミュレーション用のクロッククラスを開発しています。PriorityQueueですでにイベントが開催されているため、イベント時刻が最も近いイベントに従って並べ替えられています。しかし、頭を悩ませることができないことが1つあります。私が読んだ離散イベントシミュレーションに関する論文では、時計がイベントからイベントにジャンプすることが明確に述べられているため、「目盛り」を付ける時計を用意する必要はありません。

しかし、これはどのように機能するのでしょうか。PriorityQueueにイベントを保持するEventSchedulerクラスがあります。したがって、この次のイベントがいつであるかを把握した後、EventSchedulerが次のイベントの指定された時間に呼び出すClockの「setTime」メソッドを呼び出すことができますか?しかし、それでは実際には時計として実行されることはなく、次のイベントにジャンプし続けるだけでしょうか?

クロックが実行され(ティック)、EventSchedulerからイベントがいつ発生するかを認識し、クロックがその時間に達すると、イベントを処理し、システム状態を更新し、おそらく出力イベントを生成すると考えていました。

少し不明瞭で申し訳ありませんが、時計がどのように機能するかについてのヒントに興味があります。時計はカチカチ音をたてて、イベントが発生したときにのみ「実行」しますか、それともイベントからイベントにジャンプしますか?

また、これに使用できると提案するJavaの組み込み機能はありますか?例:タイマークラス

4

2 に答える 2

5

アイデアは、イベントキューに入らなければ何も起こらないということです。考えてみてください。「カチカチ」と音を立てているのに、イベントがないときに、時計は何をしているのでしょうか。何もない。では、なぜそれらの時間を処理するのでしょうか。

そうです、キュー内のイベントからイベントに移動するだけです。実際、離散イベントの「時計」は、作成したものとほぼ同じです。「時系列」の順序で並べ替えられた優先キューと、キュー内の位置である「今」の感覚です。

ヘッドキューをポップオフすると、「now」がキューのヘッドになる可能性があり、これで完了です。多くの場合、より洗練されたモデルには、イベントが「今」より前にスケジュールされようとしたときを検出する機能など、さらに機能が備わっている場合があります。これは、たとえば、モデルの応答が遅すぎることを示しています。現実の世界では、常に「遅れ」、シミュレーション全体で何が起こっているかに追いつくでしょう。

たとえば、毎秒更新する必要があるモデルがある場合は、それらのイベントをキューに入れる必要があります。そうしないと、発生しません。多くの場合、離散イベントシミュレーションモデルによく適合する問題(私のキャリアでは、これは物理ベースのモデリングでした)の場合、これは問題ではありません。モデルは通常、イベントがないときに「アイドル」になり、状態を計算できます。イベントが状態を変更しない将来の特定の時間。

これがモデルに当てはまらない場合は、離散イベントモデリングが問題のドメインに実際には適していない可能性があります。

于 2012-11-01T23:44:29.393 に答える
1

java.util.concurrentパッケージ(Java 5以降で使用可能)は、マルチコアシステムおよびDESアプリケーションの恩恵を受けることができる並行アプリケーションの構築に役立ちます。このようなアプリケーション用に設計されたアイテムのリストは次のとおりです。 http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/package-summary.html

于 2015-06-24T20:30:52.517 に答える