我發現我的模型運行速度非常慢,我縮小到龜的運行半徑內命令。底線是在下面兩個過程中,test1檢查每個補丁的[var],但運行得比test2快,它應該只檢查8個補丁的一小部分。爲什麼NetLogo的半徑很慢,是否有更快的方法呢?
set patches-of-interest (patch-set patches with [var > 1])
to test1
ask min-one-of other patches-of-interest with-max [var][distance myself][set pcolor red]
end
to test2
ask min-one-of other patches-of-interest in-radius 1.5 with-max [var][distance myself][set pcolor yellow]
end
您可以使用事件探查器擴展,下面的代碼檢查他們的速度:
profiler:start
repeat 100 [
ask one-of turtles [test1 test2]
]
profiler:stop
print profiler:report
profiler:reset
首先,爲什麼是test2的運行慢?其次,是否有替代test2的方法可以完成大致相同的工作,但效率更高?
我發現這個名單的NetLogo這個一對夫婦的討論,但他們是有點老了,可能是過時的: https://github.com/NetLogo/NetLogo/issues/402
http://netlogo-users.18673.x6.nabble.com/Re-in-radius-efficiency-question-td5003840.html
編輯:我離開了,在我的模型我實際上使用補丁集不是完整的「補丁」。我已經更新了上面的代碼示例,但Bryan已經部分解釋了評論放緩的原因。 Bryan說得對,如果使用所有補丁,test2要快得多,但是我還沒有能夠提前對補丁進行分類,或者在兩次測試中都不會減慢test2。
嘗試把周圍半徑'補丁1.5'括號。對所有補丁的「半徑內」檢查可以進行優化,但對其他補丁集的「半徑內」檢查無法進行。 – 2015-03-24 23:36:00
我有機會測試這個,我得到了不同的結果。 'test2'的運行速度明顯快於'test1'。我使用相同的代碼來發布您的內容。我用一隻烏龜初始化模型,並以幾種不同的方式初始化每個補丁「var」:'0','random 10','random 2','random-float 1'等。在所有情況下'test2'運行明顯更快。你如何初始化世界?你使用的是什麼版本的NetLogo? – 2015-03-26 18:16:11
我使用您帖子中的更新信息對其進行了測試。對我來說,test2的運行速度也比test1慢。我試圖在ask語句之前定義半徑補丁集,現在它的運行速度明顯加快,甚至快於test1'set set-in-radius其他補丁半徑爲1.5'的問題。 -radius with-max [var] [distance myself] [set pcolor green]' – Tyr 2015-04-07 12:46:09