NetLogo:如何在正确的上下文中使用刻度

NetLogo: how to use tick in correct context

我对 NetLogo 比较陌生,并且已经尝试解决这个问题很长一段时间了。我有一个搜索路径算法,可以确定我模型中每只海龟(船)的最佳路径,并将每条路径存储为单独的补丁列表。目标是让海龟沿着补丁列表遍历,同时让滴答计数器增加海龟每走一步(即每次所有海龟从一个补丁移动到下一个补丁时一个滴答) - 直到它到达目的地。看起来很简单,但出于某种原因,我似乎无法找出使用 'tick' 上下文的正确方法。

这是我的代码示例,对应于移动部分(一旦路径列表已经生成)。

to move
  tick
  ask-concurrent ships
    [
      while [length current-path != 0]
      [ 
        face first current-path
        move-to first current-path
        set current-path remove-item 0 current-path
        wait 0.08
      ]
    ]

end

目前,滴答计数器在整个模拟过程中只滴答一次。任何人都可以帮助我以不同的方式编写代码,以便每次海龟(集体)从一个补丁移动到另一个补丁时增加滴答声吗? 任何帮助将不胜感激。

这是调用 move 的代码部分

  to find-shortest-path-to-destination
  place-turtles
  label-destination
  foreach sort ships
 [ ask ? 
  [ 
    set path find-a-path current-waypoint target-waypoint
    set optimal-path path
    set current-path path  
  ]
 ]
  move
end

我会将您的代码更改为以下内容,并将 move 放在 repeat 块中。本质上,每个人一次移动 1 个路径单元,然后再次调用 move,然后调用下一个 tick-event 发生

to move
     tick
     ask-concurrent ships with [length current-path != 0]
     [
        face first current-path
        move-to first current-path
        set current-path remove-item 0 current-path
        wait 0.08
     ]

end
to go
    while [any? ships with [length current-path != 0]] [move]
end