Netlogo中的Ticks循环

时间:2018-06-13 11:04:48

标签: loops foreach netlogo

我正在Netlogo中制作一个模型,现在我尝试为刻度线制作一个循环。我实际上希望海龟在某些时间步行走到我指定的“森林”,然后在其他时间步之间“回家”。但是,出了点问题,我真的不知道如何解决这个问题。

我的代码:

to go-home  
set mylist (list 120 240 360 480 600 720 840 960 1080 1200)
 let mylist2 [240 360 480 600 720 840 960 1080 1200 1320]
 ask turtles [if ticks > 80 and ticks <= 120 [facexy 0 35]]
  ask turtles [if ticks > ((one-of mylist) + 80) and ticks <= (one-of mylist2) [
       facexy 0 35]]
end

我也试过了循环函数和foreach函数,但对于两者来说,go函数只能工作一次,然后程序崩溃..(我想我做错了)

1 个答案:

答案 0 :(得分:2)

你几乎肯定想要一个代码块,如:

to go-home
  if ticks > 80 and ticks <= 120 [ ask turtles [ facexy 0 35 ] ]
end

以便ask位于if内(这意味着if只会被测试一次而不是每次测试一次。)

然而,更常见的问题是如何使用列表。原始one-of将从列表中随机选择一个项目。因此,您的代码可能会从mylist中选择720,从mylist2中选择480。看起来你想要每隔120 ticks切换一次。如果这是正确的,那么您根本不需要列表,您只需使用mod运算符,例如:

to go-home
  ifelse ticks mod 240 < 120
  [ ask turtles [ facexy 0 35 ] ]
  [ ask turtles [ facexy 0 0 ] ]
end

这将使他们面对120个刻度的补丁0 35(如果需要,修改每个tick的标题)然后面对补丁0 0接下来的120个滴答,然后0 35再次等等。