2015-04-05 28 views
1

作品的NetLogo文檔給下面的例子困惑如何「其他」中的NetLogo

show count turtles-here 
=> 10 
show count other turtles-here 
=> 9 

和文檔說,「其他」命令排除「這一」代理。我的問題是......哪個代理?看起來像這個命令可以在觀察者上下文中運行,因此沒有代理。或者至少在這個例子中,上下文可能是一個補丁上下文,在這種情況下,「其他」會排除所有的龜?是否有一些機制來爲特定代理設置上下文?也許:

ask agent [ 
    show count other turtles-here 
] 

在這種情況下,爲什麼NetLogo代碼片段中沒有包含該代碼?

回答

1

排除的代理程序是被問到的代理程序。 askask-concurrentof設置上下文。例如,

ask turtle 0 [ show count other turtles ] 

計算除turtle 0以外的所有海龜。

ask turtles [ show count other turtles ] 

對每隻龜分別進行迭代。在每次迭代中,other不包括當前的龜。

other從不排除不同類型的代理。也就是說,

ask patch 0 0 [ show count other turtles ] 

將只計算所有的海龜因爲沒有海龜是patch 0 0

當前上下文的代理可以參考selfother排除的代理將始終爲self。因此,

ask agents [ show count other agents ] 

完全等同於

ask agents [ 
    let this-agent self 
    show count agents with [ self != this-agent ] 
] 

(注意,這可以更簡潔地使用myself來表示,但由於myself是方式較爲混亂,而更糟糕的方式命名,比other我避免它在這裏)

似乎這個命令可以在觀察者上下文中運行,因此沒有代理。

這實際上是一個錯誤!我在這裏創建了一個問題:https://github.com/NetLogo/NetLogo/issues/757

+0

非常感謝您驗證我所懷疑的事情(並且這麼做徹底!)。我驚訝於觀察者背景下的其他作品。在我發佈這個問題之後,在這個過程中幾乎回答了我自己的問題,我也對其他人的文檔爲什麼會有這樣一個不完整的例子感到「困惑」。 這是一個很棒的語言/環境,但它確實有它的特質,顯然這些特質也延伸到文檔! – jamida 2015-04-09 15:32:13