Netlogo - 使用嵌套品种

Netlogo - working with nested breed

我有一个品种的乌龟拥有另一个品种的乌龟。 我需要做类似的事情:

 set my-turtle-set breed1 "owned by" breed2 with [some-attribute = 1] 

所以我需要将一些品种 1 的乌龟放入 turtleset 中,如果它们属于具有某些特征的品种 2 的乌龟。

澄清

可能是误会了:

我已经拥有 breed2 拥有 breed1:

breed2-own [my-owner]

而且我可以正确地将我的 breed1 海龟放入我的 breed2 海龟中。

问题是我需要隐藏?一些根据饲养海龟的人来繁殖 1 海龟。 所以更新示例(为了更清楚,我删除了 my-turtle-set):

ask breed1 ("owned by" breed2 with [some-attribute = 1]) [set hidden? true] 

所以海龟已经正确地拥有了另一个品种,只是我不知道给定一个 breed1 tutle,如何称呼它的 ower。 出于这个原因,我需要像 "owned by".

这样的东西

进一步澄清

我有 breed2 是树(网络)的一部分。在每一步我都设置一个属性叶?忠于叶子。

现在每个 breed2 都拥有一个 breed1 并且每次我都需要设置隐藏? false toe 的breed1 哪一个不是被叶子wed,而是设置隐藏?对叶子拥有的 breed1 是正确的

给所有者 breed 一个 turtles-own 变量来存储包含其拥有的海龟的海龟集怎么样?您还可以在每个 breed1 中存储对所有者的引用,如果这将使使用此信息的代码更简单的话。

breed1-own [my-owner]
breed2-own [my-owned]    
...
ask breed2 with [some-attribute = 1]
 [set my-owned my-turtle-set
  ask my-turtle-set [set my-owner myself]

这里myself指的是外层askbreed2乌龟。 (如果你使用 self,那将引用内部 ask 中的 breed1 乌龟。)

(不要同时使用这两种引用,除非您需要两者,因为 breed1breed2 相互引用意味着当您的代码更改一种引用时, 它也必须更改其他类型的相应引用。)

如果 breed2 是拥有的品种,则此行:

breed2-own [my-owner]

没有意义;措辞暗示关系朝着另一个方向发展。我假设你的意思是:

breed2-own [owned]

那么解决您的问题的一种方法是:

ask breed1 [
  set hidden? any? breed2 with [owned = myself]
]

如果您模型中的代理数量相当少,这应该没问题。

如果您有很多代理,那么您可能会开始遇到速度问题,因为在上面的代码中,每个 breed1 都在所有 breed2 个代理中进行自己的独立搜索。

两种可能的解决方法:

  1. 按照火星在他的回答中建议的去做。
  2. 完全摆脱 owned 变量,并使用链接来表示拥有关系。