2014-07-02 70 views
1

我的模型中有不同顏色的海龜,每種都按不同的規則操作。我希望管理一隻烏龜(如紅龜)運動的程序與控制不同彩色烏龜運動的其他程序同時進行。如何在NetLogo中同時運行多個程序?

+0

檢查我的答案是否有意義? –

回答

1

假設你有兩個烏龜程序do-reddo-blue,你想要在紅色和藍色的烏龜上運行。然後,您可以只需ask turtles [do-something]並調整顏色。假設你是不改變顏色:

to do-something ;; turtle proc 
    if (color = red) [do-red] 
    if (color = blue) [do-blue] 
end 

編輯:

這並不提供真正的併發性,但嚴重的是,代理行爲多久才能真正並行?例如,如果do-red影響其他海龜(紅色或藍色),當turtle 0turtle 1都影響turtle 2時,什麼是「併發」結果,他只響應個別影響。再舉一個例子,如果你想讓每隻烏龜選擇一個未被佔用的補丁移動到,並且兩個選擇相同的補丁,誰會贏?這就是爲什麼update-state解決方案無法解決併發性的一般問題。當然,對於一些問題仍然至關重要。 (例如,CA.)

1

艾倫的答案是正確的。然而,僅供參考 - 每隻烏龜(無論是紅色還是藍色)將依次按照上述程序進行操作,而沒有一隻採取「同時」操作。默認情況下,NetLogo中不會發生這種情況。

但是,您可以使用一種模擬併發的形式。 「ask-concurrent」中有一部分用戶指南詳細解釋了這種內置功能。

0

我不認爲艾倫的答案是完整的。在這裏,他假設紅色不影響藍色海龜。 要模擬併發性,您需要存儲狀態並稍後進行更新。所有計算都將在給定的時間步中對存儲狀態執行。

示例使用Alan的代碼:

to do-something ;; turtle proc 
    if (color = red) [do-red] 
    if (color = blue) [do-blue] 
    update-turtles-state 
end 

注:不藍不應該用做紅的計算輸出以任何方式給定的時間步。