我想用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
需要代理集而不是列表。
提前致谢, 尼克
答案 0 :(得分:2)
首先,您可以使用sort turtles
代替sort-on [who] turtles
。它做同样的事情,但它更短,更惯用。不确定它是否更快(它可能有助于小位)。
foreach sorted-turtles [ x -> ask x [ ... ] ]
模式应该足够快。创建列表的成本很高。
因此,提高模型速度的主要方法是将分类的海龟列表存储在全局变量中,并重复使用该列表,而不是每次重新排序。
然而,如果您不经常创建和/或杀死海龟,那只会有效,在这种情况下,您每次都必须重新创建排序列表。