对 "other" 在 NetLogo 中的工作方式感到困惑
Confused about how "other" works in NetLogo
netlogo 文档给出了以下示例
show count turtles-here
=> 10
show count other turtles-here
=> 9
并且文档说 "other" 命令不包括 "this" 代理。我的问题是......哪个代理人?似乎此命令在观察者上下文中可以是 运行,因此没有代理。或者至少在这个例子中,上下文可以是一个补丁上下文,在这种情况下 "other" 会排除所有的海龟?是否有某种机制可以为特定代理设置上下文?也许:
ask agent [
show count other turtles-here
]
在这种情况下,为什么 NetLogo 代码片段不包含它?
排除的代理是被询问的代理。 ask
、ask-concurrent
和 of
设置上下文。例如,
ask turtle 0 [ show count other turtles ]
计算除turtle 0
以外的所有海龟。
ask turtles [ show count other turtles ]
分别遍历每只海龟。在每次迭代中,other
排除当前海龟。
other
从不排除不同类型的代理。也就是说,
ask patch 0 0 [ show count other turtles ]
将只计算所有的海龟,因为 none 的海龟是 patch 0 0
。
当前上下文的代理可以用self
引用。 other
排除的代理将始终是 self
。因此,
ask agents [ show count other agents ]
完全等同于
ask agents [
let this-agent self
show count agents with [ self != this-agent ]
]
(请注意,使用 myself
可以更简洁地表达这一点,但由于 myself
比 other
更令人困惑,而且命名更糟糕,我在这里避免使用它)
Seems like this command can be run in the observer context and so no agent.
这实际上是一个错误!我在这里为它创建了一个问题:https://github.com/NetLogo/NetLogo/issues/757
netlogo 文档给出了以下示例
show count turtles-here
=> 10
show count other turtles-here
=> 9
并且文档说 "other" 命令不包括 "this" 代理。我的问题是......哪个代理人?似乎此命令在观察者上下文中可以是 运行,因此没有代理。或者至少在这个例子中,上下文可以是一个补丁上下文,在这种情况下 "other" 会排除所有的海龟?是否有某种机制可以为特定代理设置上下文?也许:
ask agent [
show count other turtles-here
]
在这种情况下,为什么 NetLogo 代码片段不包含它?
排除的代理是被询问的代理。 ask
、ask-concurrent
和 of
设置上下文。例如,
ask turtle 0 [ show count other turtles ]
计算除turtle 0
以外的所有海龟。
ask turtles [ show count other turtles ]
分别遍历每只海龟。在每次迭代中,other
排除当前海龟。
other
从不排除不同类型的代理。也就是说,
ask patch 0 0 [ show count other turtles ]
将只计算所有的海龟,因为 none 的海龟是 patch 0 0
。
当前上下文的代理可以用self
引用。 other
排除的代理将始终是 self
。因此,
ask agents [ show count other agents ]
完全等同于
ask agents [
let this-agent self
show count agents with [ self != this-agent ]
]
(请注意,使用 myself
可以更简洁地表达这一点,但由于 myself
比 other
更令人困惑,而且命名更糟糕,我在这里避免使用它)
Seems like this command can be run in the observer context and so no agent.
这实际上是一个错误!我在这里为它创建了一个问题:https://github.com/NetLogo/NetLogo/issues/757