2012-12-15 54 views
1

我得到的錯誤信息:運行下面的NetLogo代碼中的NetLogo AgentSet減法

MEMBER? expected input to be a string or list or agentset but got the number 0 instead. 

to find-flockmates ;; turtle reporter 
    ;; latch on to the nearby birds 
    set flockmates-infront other birds in-cone vision cone-infront-degree 
    set flockmates-sidewise other birds in-cone vision cone-sidewise-degree 

    ;; agentset substraction 
    if (count flockmates-infront > 0)[ 
    set flockmates-sidewise (flockmates-sidewise with [not member? self flockmates-infront]) 
    ] 
end 

有人能告訴我什麼,我做錯了或爲兩個減法的另一個可能的解決方案agentsets?

+0

也許有些東西我沒有看到,但它看起來像你做得很對......每次都有這個錯誤,或者只有在特殊情況下才會出現這種錯誤?你有沒有嘗試過'show flockmates-infront'來查看它是否曾經被設置爲除了代理集之外的任何東西? (據我所知,它不應該,它可能是'nobody',但你的'if'會處理這個問題。) –

+0

每次都會觸發這個錯誤,除非我創建的鳥少於10只。 –

+0

奇怪。你介意在哪裏發佈你的完整模型? –

回答

4

我明白了,現在!堅固它可能已經從您發佈的初始代碼示例中猜到了,我一開始並沒有意識到flockmates-sidewiseflockmates-infront是品種變量。

因此,在這一行:

set flockmates-sidewise (flockmates-sidewise with [not member? self flockmates-infront]) 

... flockmates-infront是指執行with塊劑的品種變量,運行find-flockmates記者代理的變量。 (這一個很可能是0如果它尚未初始化)。你想要的是:

set flockmates-sidewise (flockmates-sidewise with [ 
    not member? self [flockmates-infront] of myself 
]) 

myself的意思是「烏龜或補丁誰要求我做我在做什麼現在。 「

我想你在創建少於10只鳥時沒有收到錯誤,因爲在這種情況下,if阻止了該行的執行。

+0

非常感謝。你讓我今天一整天都感覺很好! –