如何 'ask' 列表中的所有海龟

How to 'ask' all turtles in a list

我想使用 ask 遍历我所有的海龟,但我 不希望 顺序是随机的。我的解决方案是将所有海龟添加到一个列表中,按它们的 ID 排序,然后循环遍历该列表:

let sorted-turtles sort-on [who] turtles
foreach sorted-turtles [ 
  x -> ask x [ ; x is the turtle
    ; do something
  ] 
]

工作正常,但大大 减慢了我的模型。

我的问题是:这是要求所有海龟按照预先定义的顺序做某事的最佳方式吗?

我试过直接在列表中使用 ask(例如 ask sorted-turtles [ print who ] 但 NetLogo 说 ask 需要一个代理集而不是列表。

提前致谢, 尼克

首先,您可以使用 sort turtles 而不是 sort-on [who] turtles。它做同样的事情,但它更短且更惯用。不过不确定它是否更快(它可能对 一点 有点帮助)。

foreach sorted-turtles [ x -> ask x [ ... ] ] 模式应该足够快。成本高昂的是列表创建。

因此,要提高模型速度,您可以做的主要事情是将排序后的海龟列表存储在全局变量中,并重复使用该列表,而不是每次都重新排序。

这只会起作用,但是,如果您不经常创建 and/or 杀死海龟,那么您将不得不每次都重新创建排序列表。