首页 > 解决方案 > 使用嵌套询问访问 netlogo 中拥有的特征

问题描述

这就是我想要做的:

patches-own[
trait1
trait2
trait3
]

let similarityCounter 0

ask one-of patches[

    ask one-of neighbors[

        **for-each trait[

            if neighborTrait = patchTrait**[

                set similarityCounter (similarityCounter + 1)

            ]
        ]
    ]
]

** 之间的部分是我不确定的。如何迭代补丁自己的参数并在补丁和邻居之间进行比较?

标签: netlogo

解决方案


您如何为每个特征值的补丁创建一个列表并计算两个列表中的匹配项?它看起来像这样。

to testme
  let similarityCounter 0
  ask one-of patches
  [ let mytraits (list trait1 trait2 trait3)
    let theirtraits [(list trait1 trait2 trait3)] of one-of neighbors
    set similarityCounter length filter [ xx -> xx ] (map = mytraits theirtraits)
  ]
end

最后一行有点密集。它的作用是使用该map函数与=运算符比较两个特征列表,该运算符将返回一个列表truefalse值,指示该特定特征是否匹配。然后filter创建一个仅包含true值的列表并length计算这些true值的数量。

不幸的是,NetLogo 并没有像您在某些语言中看到的那样将 atrue视为 1 和false0,因此您不能简单地sum匹配结果列表。


推荐阅读