如何在列表中“询问”所有海龟

时间:2017-12-01 14:07:18

标签: netlogo

我想用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需要代理集而不是列表。

提前致谢, 尼克

1 个答案:

答案 0 :(得分:2)

首先,您可以使用sort turtles代替sort-on [who] turtles。它做同样的事情,但它更短,更惯用。不确定它是否更快(它可能有助于位)。

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

因此,提高模型速度的主要方法是将分类的海龟列表存储在全局变量中,并重复使用该列表,而不是每次重新排序。

然而,如果您不经常创建和/或杀死海龟,那只会有效,在这种情况下,您每次都必须重新创建排序列表。