来自NetLogo补丁的记者

时间:2018-05-03 21:42:19

标签: netlogo

我需要每个补丁识别其颜色并计算具有相同颜色的补丁数量。我试过:

ask patches [count patches with pcolor = [pcolor] of myself]

但是,这不正确。我该怎么办?

2 个答案:

答案 0 :(得分:2)

with语法错误 - 它需要下一部分在[]中(以便它询问内容是真还是假)。此外,您还没有告诉补丁一旦计算出来该如何处理该数字。看看这个:

patches-own [count-same]

to setup
  let pcol-list (list red blue green)
  ask patches [set pcolor one-of pcol-list]
  ask patches
  [set count-same count patches with [pcolor = [pcolor] of myself]]
end

答案 1 :(得分:1)

Jen的回答是正确的。

话虽如此,我想指出table扩展名中存在一个非常有用的记者原语:table:counts

您可以使用它来完全按照您的需要进行操作。它采用一个项目列表,计算每个项目的出现次数,并将结果放在一个方便的表中,这些项目作为键,计数作为值。在您的情况下,“项目列表”是所有修补程序的pcolor列表。

以下是您将如何使用它:

extensions [ table ]
patches-own [ count-same ]

to setup
  ask patches [ set pcolor one-of base-colors ]
  let color-counts table:counts [ pcolor ] of patches  
  ask patches [ set count-same table:get color-counts pcolor ]    
end

与原始代码相比的主要优势在于它可以更快 (尽管如果补丁数量很少,您可能不会注意到它。)

原因是您的代码必须为每个补丁重新计算相同颜色的补丁数量,因此运行时间与补丁数量的平方成正比。在计算机科学术语中,它的复杂性是 O n ²)。

另一方面,table:count原语仅通过颜色列表一次,并在每次看到颜色时将+1添加到右侧“桶”中。它具有线性复杂性: O n )。