NetLogo:如果3个邻居4如何设置条件

时间:2014-11-18 16:29:41

标签: netlogo

我正在尝试编写一个if语句,如果其中三个neighbor4是相同颜色,则执行命令 - 现在,我正在使用全部?但我想扩大到3而不是4个邻居。

我试过的代码没有为if语句提供布尔值

ask patches with [pcolor = black][
if n-of 3 neighbors4 [pcolor != black]
[set pcolor 55]
]

我还尝试添加= true?但这也导致了错误

1 个答案:

答案 0 :(得分:2)

正好3或至少3?如果恰好是3,请将下面的<=更改为=

可能有一种更简单的方法,但这就是我提出的方法:

let colors remove-duplicates [ pcolor ] of neighbors4
let three-share-color? not empty? filter [ 3 <= count neighbors4 with [ pcolor = ? ] ] colors

remove-duplicates [ pcolor ] of neighbors4将邻居的颜色作为列表获取,删除重复项(尽管这不是绝对必要的)。 filter [ 3 <= count neighbors4 with [ pcolor = ? ] ] colors遍历每种颜色,抓住那种颜色的邻居,并检查是否至少有3种颜色。如果有3,它会保持颜色,否则它会抛弃它。 not empty?会检查我们是否还有颜色。

您可以将其概括为任何数字,属性和代理集,如下所示:

to-report at-least-n-share [ n reporter agentset ]
  let attributes remove-duplicates [ runresult reporter ] of agentset
  report not empty? filter [ n <= count agentset with [ runresult reporter = ? ] ] attributes
end

对于这个问题,您可以将其称为:

at-least-n-share 3 (task [ pcolor ]) neighbors4

编辑:为了清楚起见,这是“如果三个neighbor4是相同颜色则执行命令的if语句”的通用解决方案。我忽略了特定的颜色。但是,如果你知道三个颜色应该提前,那么你只需要:

if count neighbors4 with [ pcolor = the-color ] >= 3 [
  do-stuff
]

再次,如果你的意思是三个,请>==