2012-11-25 60 views
4

我們有一個單線程應用程序,它可以模擬隨着時間的推移與成千上萬的對象與共享內存模型的交互。顯然,它無法擴展多CPU硬件。基於時間的模擬與演員模型

在閱讀了一些關於基於代理的建模和函數式編程/ actor模型之後,我正在考慮用消息傳遞範式重寫。

這個想法非常簡單 - 每個對象都將是一個actor,他們的交互將成爲消息,以便模擬可以並行發生。給定一定時間的對象配置 - 可以輕鬆計算其未來結果。

問題是如何建模時間:
例如,讓我們假設對象X的行爲取決於A和B,因爲演員和消息計算順序不能保證,可能是當X是被計算A已經將其消息發送給X但B沒有。 如何確保計算正確?

我希望問題是明確
在此先感謝。

回答

7

您使用消息傳遞並行化(離散事件?)模擬的方法是衆所周知的,並且本身不需要函數式樣(當然,這並不妨礙您像這樣實現它) 。

您描述的基本問題w.r.t.到事件的時間也被稱爲本地因果約束(例如參見this textbook)。基本上,您需要使用同步協議以確保每個對象(或代理)以正確的順序處理其消息。在並行離散事件模擬的領域中,這些對象被稱爲邏輯進程,並且它們通過事件(即時間戳消息)進行通信。

正確地實現這些事件的同步協議是挑戰和協議的正確的選擇是高度應用特定。例如,一個重要的因素是每個事件所需的平均計算量:如果所需的計算量很少,則通信成本將主導整個執行時間,並且難以擴展模擬。

因此,我建議尋找現有的解決方案/庫頂部的演員框架之前,你打算使用之前,從頭開始。

+2

嗨,謝謝你的回覆! 1.事實上,這是一個離散事件模擬 2.我喜歡功能風格的原因是我想擁有副本和不可變的數據結構,以避免數據保護的複雜性,函數式編程範例。 3.謝謝你把我介紹給教科書,我會明確地看看它。您使用的確切條款是一個很好的幫助,因爲它可以幫助我在查找更多信息時優化搜索查詢。 4.當然,如果現有的庫,我正在考試,目前我正在評估akka – akiva

+1

不客氣。當你計劃在Scala中使用Akka?在這種情況下,您可能需要查看Scalation(https://code.google。com/p/scalation),其中AFAIK不支持並行執行,但具有離散事件仿真的不同「世界視圖」的表示,以及可能對您有用的一些其他組件。 Java框架JAMES II(http://jamesii.org)還提供了許多您將需要的組件(例如事件隊列),並且具有用於實驗規範(http://sessl.org)的Scala界面[免責聲明:是開發者之一]。 –