2011-02-04 33 views
1

我想設計一個事件執行與時間無關的離散事件模擬。選擇接下來發生的事件僅取決於模型的條件(在我的情況下是一個人),並且它們一次執行一個。與時間無關的離散事件模擬

我已經發現一對夫婦設計出有:

  • 事件安排 - 事件的隊列保持和每個事件執行過程中,新的事件定或舊的取消。

  • 活動掃描 - 在每個週期中,所有事件都會迭代,並且如果人員的當前狀態滿足事件的條件以執行,則執行該事件。

  • 事件圖 - 有一個事件圖,並有每個邊代表過渡的條件。

我對每一種方法的注意事項如下:

  • 事件安排 - 應增加整個事件被分配什麼事件的邏輯,使它很難跟蹤的。此外,隊列會發生很大變化,並且由於它不是基於時間的,所以每次想要更改以查找要刪除的事件時,都必須遍歷整個隊列(例如,如果您想要在兩個事件A之前移除事件B)。

  • 活動掃描 - 它的性能可能很差,特別是如果它必須迭代許多事件才能在每個週期中查找下一個要執行的活動。

  • 事件圖 - 如果圖形非常大,則初始化它並設置所有邊可能會變得很麻煩。

我想你的意見哪種方法可能是最合適的,如果是這樣,有什麼辦法,我可以解決的事項說明。也許一個完全不同的設計可能是合適的。

回答

0

你的問題對我來說不是很清楚,但我認爲你可以使用離散事件模擬系統並忽略時間分量。您可以立即安排所有事件,並且它應該獨立於時間域工作。我正在使用SimPy http://simpy.sourceforge.net/和IMO它是有能力的。

2

你可以嘗試使用Javascript離散事件模擬庫http://www.simjs.com。它支持事件調度和離散時間流程。您可以爲將來安排「事件」,或讓他們等待某個謂詞,並註冊回調函數,當(模擬)時間到達截止期限或謂詞滿足時將調用這些函數。

0

我會建議調查Petri網。它們廣泛用於業務流程建模,並且不需要時間。如果需要,有色Petri網也可以代表時間。而隨機Petri網也可以解決隨機性和時間問題。 這是一個明確的介紹它們是什麼,以及它們可以做什麼。

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

有噸不同的語言包人,你可以用自己的代數方法快速實施開發自己。