我看到运行某段代码的代理集按钮(补丁,海龟,链接)与ask
s patches
(或turtles
的观察者按钮之间的行为差异,或links
)运行相同的代码段。这是NetLogo中的错误吗?这是我代码中的错误吗?
答案 0 :(得分:5)
行为差异的原因实际上并不是一个错误,而是NetLogo的一个相当模糊的角落。 ask-concurrent
原语是这种行为的核心。 agentset按钮在幕后使用与ask-concurrent
相同的机制。使用ask-concurrent
在同一代理程序集上运行相同代码的观察者按钮替换任何代理集按钮不应更改按钮的行为。
通常ask
和ask-concurrent
之间的差异并不大。海龟可能会以不同的方式移动 ,但它的工作方式基本相同。但在某些情况下,差异可能非常大。 NetLogo模型库提供了一个名为“Ask-Concurrent Example”的模型,该模型探讨了ask
和ask-concurrent
之间的差异。
在NetLogo编程指南中,http://ccl.northwestern.edu/netlogo/docs/programming.html#buttons的“Turtle,patch和forever forever按钮”部分中也有相关文档。 <{3}}上关于询问并发的部分内容也适用。
注意:不建议使用ask-concurrent
。我在这里使用它来澄清行为,但它应该不一般使用。
注意2 :一般来说,最安全,最可预测的方法是根本不使用乌龟,补丁和链接按钮。相反,请仅使用观察者按钮,并在按钮代码中使用ask turtles
,ask patches
或ask links
。