0

我正在 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 函数仅适用于一个时间步,然后程序崩溃..(我想我做错了什么)

4

1 回答 1

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

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

于 2018-06-13T14:54:18.880 回答