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
指的是外层ask
的breed2
乌龟。 (如果你使用 self
,那将引用内部 ask
中的 breed1
乌龟。)
(不要同时使用这两种引用,除非您需要两者,因为 breed1
和 breed2
相互引用意味着当您的代码更改一种引用时, 它也必须更改其他类型的相应引用。)
如果 breed2
是拥有的品种,则此行:
breed2-own [my-owner]
没有意义;措辞暗示关系朝着另一个方向发展。我假设你的意思是:
breed2-own [owned]
那么解决您的问题的一种方法是:
ask breed1 [
set hidden? any? breed2 with [owned = myself]
]
如果您模型中的代理数量相当少,这应该没问题。
如果您有很多代理,那么您可能会开始遇到速度问题,因为在上面的代码中,每个 breed1
都在所有 breed2
个代理中进行自己的独立搜索。
两种可能的解决方法:
- 按照火星在他的回答中建议的去做。
- 完全摆脱
owned
变量,并使用链接来表示拥有关系。
我有一个品种的乌龟拥有另一个品种的乌龟。 我需要做类似的事情:
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
指的是外层ask
的breed2
乌龟。 (如果你使用 self
,那将引用内部 ask
中的 breed1
乌龟。)
(不要同时使用这两种引用,除非您需要两者,因为 breed1
和 breed2
相互引用意味着当您的代码更改一种引用时, 它也必须更改其他类型的相应引用。)
如果 breed2
是拥有的品种,则此行:
breed2-own [my-owner]
没有意义;措辞暗示关系朝着另一个方向发展。我假设你的意思是:
breed2-own [owned]
那么解决您的问题的一种方法是:
ask breed1 [
set hidden? any? breed2 with [owned = myself]
]
如果您模型中的代理数量相当少,这应该没问题。
如果您有很多代理,那么您可能会开始遇到速度问题,因为在上面的代码中,每个 breed1
都在所有 breed2
个代理中进行自己的独立搜索。
两种可能的解决方法:
- 按照火星在他的回答中建议的去做。
- 完全摆脱
owned
变量,并使用链接来表示拥有关系。