2012-11-01 121 views
2

我正在爲離散事件模擬開發一個時鐘類。我已經在PriorityQueue中保存了事件,並根據哪個事件有最近的事件時間進行了排序。但是有一件事我無法擺脫困境。在我讀過的有關離散事件模擬的論文中,清楚地表明,時鐘從事件跳轉到事件,因此不需要有「滴答」的時鐘。離散事件模擬中的時鐘

但是,這將如何工作,我有一個EventScheduler類,其中包含PriorityQueue中的事件。因此,當它計算出下一個事件的時間後,是否可以在EventScheduler調用下一個事件給定時間的時鐘中調用「setTime」方法?但那麼它永遠不會像一個時鐘那樣真正運行,它會繼續跳到下一個事件?

我在考慮時鐘運行(滴答),然後它知道EventScheduler何時發生事件,當時鍾達到那個時間時,它處理事件,更新系統狀態並可能生成輸出事件。

對不起,有點不清楚,但我只是有興趣提供有關時鐘如何工作的任何提示,是否打勾,然後只在事件發生時「做」,或者只是從事件跳轉到事件?

也有在Java中的任何內置功能,你建議我可以使用它?例如。計時器類

回答

5

這個想法是沒有任何發生而沒有進入你的事件隊列。想一想:在「滴答」的時候你在做什麼,但沒有事件發生?沒有。那麼爲什麼要處理這些時間呢?

所以是的,你只是從事件到隊列中的事件。實際上,離散事件中的「時鐘」幾乎與你所創建的完全一樣:按「按時間順序」排序的優先級隊列和在隊列中的「現在」的某種意義。

如果你彈出排隊隊列,那麼「現在」可能只是排隊的頭,你就完成了。通常情況下,更復雜的模型可能具有更多的功能,比如在「現在」之前檢測事件是否計劃安排的能力 - 例如,這表示模型的響應速度太慢:在現實世界中,它總是會「遲到」並且追蹤整個模擬過程中發生的事情。

如果您有例如一個需要每秒更新一次的模型,那麼你必須將這些事件放入隊列中,否則就不會發生。通常,對於適合離散事件仿真模型的問題(在我的職業生涯中,這是基於物理學的建模),這不是一個問題:當沒有事件並且可以計算其狀態時,模型通常是「閒置的」在未來的任何特定時間,當事件沒有改變其狀態時。

如果這不適用於您的模型,那麼離散事件建模可能不適合您的問題域。

+0

非常感謝你馬特。這確實清除了很多東西。 – DSF