2013-03-25 16 views
2

我想創建一個MATLAB程序來模擬一些代理的行爲。這些代理中的每一個都能夠相互通信並決定下一個狀態。我可以實現該程序是一種我熟悉的傳統語言,如java,python或C++,並使用線程來模擬每個代理。MATLAB上的進程間通信

現在我想嘗試在MATLAB上的實現來利用MATLAB繪圖函數及其數學工具。是否有可能在MATLAB中創建這樣的模擬,或者更好的是它是兩極分化的?我意識到並行性工具箱,但我不確定MATLAB是否適合這種應用程序。我也可以使模擬不平行,但並不是那麼有趣。這是一個任務的一部分,我想知道在MATLAB上開始這樣的模擬以更熟悉它是個好主意。如果它不是海峽,我可以輕鬆切換到python。

+4

Matlab可能不是這項工作的正確工具。如果你可以切換到Python,那麼我強烈建議你這樣做。 – twerdster 2013-03-26 00:52:50

回答

0

Matlab按順序解釋代碼。因此,爲了解決您的問題,您需要一個循環來循環每個採樣時間,並以預定義的順序評估所有代理的狀態。

TimeMax = 10; 
TimeStep = 0.1; 
time_counter = 0; 
while time_counter<TimeMax 
    time_counter = time_counter + TimeStep; 
    % Update all the agents sequentially 
end 

這不是非常有效。因此,我建議你使用Simulink,它更自然地支持並行計算。然後,您可以將結果導出到Matlab,並執行您希望的所有花式圖。

+0

謝謝你的回答。也許我會切換到python – nikosdi 2013-03-26 11:55:01

1

正如前面提到的,你不可能在matlab中有多個進程。

但是對於代理,如果它們的類從句柄繼承,則可以使它們生效。然後你可以給他們一個接收消息的方法。

但請記住,它們不會並行運行。

+0

我還沒有熟悉MATLAB,但我明白你說的話!謝謝! – nikosdi 2013-03-26 11:56:13

1

這裏是我會做:

  1. 寫一個代理類在MATLAB中有你需要的參數,用於設置和獲取(或寫的subsref的方法)方法和方法「決策」
  2. 填寫一個具有類的實例的數組
  3. 要麼建立一個包含實例索引的數組,其前面是後面的數字,也就是說,如果代理程序4跟隨代理程序1,2和3,代理程序5跟隨代理程序1,2和4,向量看起來像:[4 1 2 3 5 1 2 4]等等。或者製作一個親子矩陣。您還可以在實例中添加一個存儲前輩的參數。如果每個代理都相互連接,那麼您甚至不需要此功能。
  4. 現在您可以按順序運行。所有代理都會更新他們的輸入,所有代理計算他們的響應並設置其輸出。

正如你所看到的,這不是平行的,而是順序的。但是,我不能在這裏看到並行處理的優勢。工具箱沒有幫助,因爲它只允許「工作人員」,具體取決於您擁有多少內核。基本上,即使你使用並行處理工具箱,你也不會有太大的優勢,因爲它意味着並行化循環。例如,在遺傳算法中,您可以獨立計算每個游泳池成員的成本函數,因此您可以使用該工具箱。在一個循環執行取決於先前循環執行的計算的算法中,不能使用工具箱。

希望這會有所幫助。