NetLogo有两种自我参考

时间:2014-02-03 19:33:17

标签: netlogo

我想在某个海龟的变量TurtlesICanSee中添加一个海龟来源,这取决于海龟属性。例如,在一个应用程序中,我想只将乌龟本身添加到TurtlesICanSee,在另一个应用程序中我想添加两个海龟(如果有的话)与相邻的who-numbers(乌龟自己的who-number +或-1)

如果我可以通过使用who-numbers找出第一个应用程序,我想我可以将其扩展到第二个应用程序。但是,我无法弄清楚第一个。

我试过

ask turtles [    set TheTurtlesICanSee turtles with [who = ([who] of self)]    ]

但这填补了每只乌龟的每只乌龟的TheTurtlesICanSee。

我想我理解为什么; NetLogo认为我希望每个海龟x都有与自身(x)相同的人数,即每只乌龟。但我没有。对于每只乌龟x,我希望每只乌龟都具有与x相同的人数。

任何人都可以帮我吗?请注意,第一个应用程序所需的解决方案是可以推广到第二个应用程序的解决方案。因此,没有任何方法可以将乌龟添加到其自己的变量中。我需要一种涉及谁的自我引用形式(或者我不想这样做的好的论据,但最好是前者)。

1 个答案:

答案 0 :(得分:5)

您的代码只需要稍作改动,如下所示:

ask turtles [ set TheTurtlesICanSee turtles with [who = [who] of myself] ]

请注意将myself替换为self; http://ccl.northwestern.edu/netlogo/docs/dictionary.html#myself解释了差异。

但实际上没有必要涉及谁的数字。几乎没有必要在NetLogo中使用谁的数字;几乎总是有一个更简单,更直接的解决方案。一个更简单的解决方案是:

ask turtles [ set TheTurtlesICanSee turtles with [self = myself] ]

但实际上根本没有必要使用with。我们可以使用turtle-set直接构建所需的代理集:

ask turtles [ set TheTurtlesICanSee (turtle-set self) ]

这是我建议的解决方案,为了清晰和简洁,但也因为它将运行得更快,因为它不涉及迭代所有海龟的集合,正如基于with的解决方案那样。

相关问题