2013-11-15 51 views
2

我正在嘗試創建一個模型,讓龜隨機走動(但有向前移動的趨勢),直到它們落在代表誘餌物體。netlogo:如何使龜停止一定數量的刻度,然後繼續

當一隻烏龜着陸在其中一個黃色斑塊上時,我希望它停在那個斑塊上,並在它「檢查」誘餌時留在那裏15個蜱蟲。

經過15次滴答後,我希望海龜像往常一樣繼續移動,直到遇到另一個黃色補丁。

我試圖修改中的NetLogo建模公地這種停卡模型的一部分,但不能真正理解它(我是新來的NetLogo) http://modelingcommons.org/browse/one_model/3205#model_tabs_browse_procedures

我也嘗試實施如此線程中描述的倒計時定時器 How can one create a countdown timer in NetLogo?

但是,當我嘗試運行模擬時,收到運行時錯誤「只有觀察者可以詢問所有海龜的集合」。誰能告訴我我要去哪裏?可能有幾個地方!謝謝。

這裏是造成運行時錯誤代碼:

turtles-own [count-down] 

to setup 
clear-all 
ask patches with [count neighbors != 8] 
[set pcolor blue]     

create-turtles 20 
ask turtles 
[setxy random-xcor random-ycor 
pen-down] 

ask n-of 20 patches 
[ set pcolor yellow ]     

reset-ticks 
end 

to go 
move-turtles 
tick 
if ticks >= 720 [stop] 

end 


to move-turtles 
ask turtles 
    [ ifelse pcolor != yellow 
    [continue] 
    [stay] 
    ] 
end 

to continue 
ask turtles 
[rt -90 + random 181] 
ask turtles 
[ifelse [pcolor] of patch-ahead 1 = blue [ lt random-float 360 ] 
[fd 1] 
] 
end 

to stay 
ask turtles 
[ 
setup-timer 
decrement-timer 
if timer-expired? [continue] 
] 
end 

to setup-timer 
set count-down 15 
end 

to decrement-timer 
set count-down count-down - 1 
end 

to-report timer-expired? 
report (count-down <= 0) 
end 

回答

1

這只是一個例子,他們應該有多少蜱留在黃色區域?我假設有15個刻度,我要求海龜在他們的標籤上打印他們的標記號,如果跑得太快,你可能會錯過他們的逗留,所以調整你的模型的運行速度,看他們什麼時候留下,什麼時候移動。你可以有不同的方法來繼續,在這一個中,他們只是向前移動1個補丁。

turtles-own [count-down] 

to setup 
    clear-all 
    ask patches with [count neighbors != 8] 
    [set pcolor blue]     

    create-turtles 20 
    ask turtles 
    [setxy random-xcor random-ycor 
    pen-down 
    set count-down 15 
    ] 

    ask n-of 20 patches 
    [ set pcolor yellow ]     

    reset-ticks 
end 

to go 
    move-turtles 
    tick 
    if ticks >= 720 [stop] 

end 


to move-turtles 
    ask turtles 
    [ ifelse pcolor != yellow 
    [continue] 
    [stay] 
    ] 
end 

To continue 
    rt random 10 
    fd 1 
end 


to stay 
    set count-down count-down - 1 ;decrement-timer 
    set label count-down  
    if count-down = 0 
    [ 
     Continue 
     set label "" 
     reset-count-down 
    ]  

end 

to reset-count-down 
    set count-down 15 
end 
+0

謝謝你的幫助塞思和馬奇。這個錯誤是固定的,下面的代碼可以讓烏龜停下來並重新開始繼續。出於某種原因,由Marzy提供的代碼從0開始並繼續倒計時(並沒有停在5),但它使我走上了正確的軌道,並且我在下面做的小修改工作正常。 留 組倒計時遞減計數 - 1;遞減定時器 集標籤倒計時 如果遞減計數<= -15 [繼續 組標籤「」 復位倒計時 ] 端 重置倒計時 設置倒計時0 結束 – NZHelen

+0

嗨,我想我應該包括整個代碼,你必須給倒數的初始值,因爲我只是給了部分代碼,我忘了提到這一點;)使用'設置倒計時15'創建海龜,所以計數器將從15開始,並從那裏遞減。 – Marzy

2

要回答只是「僅被觀察者可以要求集合中的所有海龜」的一部分,該錯誤消息發生,如果你這樣做:

ask turtles [ 
    ask turtles [ 
    do-something 
    ] 
] 

這不是在的NetLogo允許的,因爲它是幾乎總是偶然的而不是故意的。你可能只是想讓每隻烏龜「做某件事」一次;你可能並不是指每隻烏龜都會爲兩隻海龜的每一對可能配對的「做點什麼」

不太明顯的是,你讓所有的海龜問所有的海龜,如果它跨越了程序。因此,舉例來說,如果你寫:

to go 
    ask turtles [ my-procedure ] 
end 

to my-procedure 
    ask turtles [ do-something ] 
end 

它仍然是錯誤的,同樣的原因,但它是不容易看到,只是從它一眼。

您的代碼遵循後一種模式。您有:

to move-turtles 
    ask turtles [ 
    ... 
    continue 
    ... 
    ] 
end 

to continue 
    ask turtles [ 
    rt -90 
    ... 
    ] 
end 

你想要做ask turtlescontinue程序,我不認爲。既然你叫ask turtles裏面的程序,這已經是一個烏龜程序。我建議將它寫爲:

to continue ;; turtle procedure 
    rt -90 
    ... 
end 

該評論提醒你,它的目的是由海龜運行。 (我們在模型庫的所有模型中都遵循這種風格。)

相關問題