Netlogo - 使用嵌套品种

时间:2015-04-12 00:28:18

标签: netlogo

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

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

所以如果他们是品种2的乌龟所拥有的某些特征,我需要在品种龟中放入一只乌龟。

洁肤

也许这是一种误解:

我已经拥有了品种1的品种2:

breed2-own [my-owner]

我可以正确地将我的品种龟放入我的品种2龟中。

问题是我需要隐藏吗?一些品种1乌龟基于谁谁使他们。 更新到示例(我删除my-turtle-set以便更清楚):

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

所以海龟已经正确拥有另一个品种,我不知道,鉴于品种1 tutle,如何称呼它的ower。 因此我需要“拥有”这样的东西。

要澄清更多

我拥有属于树(网络)的品种2。在每一步我设置属性叶?叶子真的。

现在每个品种2拥有一个品种1,而且我需要设置隐藏的每一个转折点?假脚趾不是由叶子开,而是设置隐藏?属于由叶子拥有的品种1

2 个答案:

答案 0 :(得分:1)

如果breed2是拥有的品种,那么这一行:

breed2-own [my-owner]

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

breed2-own [owned]

然后解决问题的一种方法是:

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

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

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

解决这个问题的两种可能方法:

  1. 在他的回答中做了火星的建议。
  2. 完全删除owned变量,并使用链接表示拥有的关系。

答案 1 :(得分:0)

如何给所有者品种一个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指的是来自外部breed2的{​​{1}}海龟。 (如果您使用ask,则会引用内部self中的breed1乌龟。)

(除非你需要两种引用,否则不要使用这两种引用,因为让askbreed1相互引用意味着当你的代码更改了一种类型的引用时,它必须改变另一种相应的参考文献。)