Netlogo 计算代理与代理集共享的公共功能数

Netlogo 计算代理与代理集共享的公共功能数,netlogo,Netlogo,我想报告一个代理(target_turtle)与代理集(neighbor_turtle)中的每个代理共享的公共功能(例如[1 8 4]是三个功能)的数量。有什么建议吗 例如:如果代理具有功能[1 8 7],并且代理集中的代理具有功能[1 7 8],则它们共享一个公共功能,即1。由于功能顺序相关,因此不包括功能8和7 我得到的当前错误是:FOREACH的所有列表参数必须具有相同的长度 干杯, 马歇尔 您的代码似乎已经基本正确了,不过不需要使用“询问邻居”部分;您已经在使用的切换透视图 您收到的错误

我想报告一个代理(target_turtle)与代理集(neighbor_turtle)中的每个代理共享的公共功能(例如[1 8 4]是三个功能)的数量。有什么建议吗

例如:如果代理具有功能[1 8 7],并且代理集中的代理具有功能[1 7 8],则它们共享一个公共功能,即1。由于功能顺序相关,因此不包括功能8和7

我得到的当前错误是:FOREACH的所有列表参数必须具有相同的长度

干杯, 马歇尔


您的代码似乎已经基本正确了,不过不需要使用“询问邻居”部分;您已经在使用的切换透视图

您收到的错误消息似乎表明您需要以某种方式处理海龟特性列表长度不相同的情况

我假设您只想忽略两个列表中较长的列表中的任何尾随项。下面是实现此目的的代码:

to-report overlap-between [target-turtle neighbor-turtle]
  let features1 [feature] of target-turtle
  let features2 [feature] of neighbor-turtle
  ifelse length features1 > length features2
    [ set features1 sublist features1 0 length features2 ]
    [ if length features2 > length features1
      [ set features2 sublist features2 0 length features1 ] ]
  report sum (map [ifelse-value (?1 = ?2) [1] [0]]
                features1 features2)
end

请注意,在NetLogo中,命名变量是惯用的方法,即像这样命名变量
,而不是像这样命名变量

,因此您已经对其进行了更新,以指定顺序很重要,但现在我完全搞不清楚您要解决的问题是什么。
[1 8 7]
是一项功能,还是三项功能?在您使用
[1 8 7]
的示例中,您的意思是第二次说别的吗?在您所写的内容中,这两个代理具有相同的列表,因此您肯定是说它们有三个共同的特性,而不是一个。我很想帮你,但你需要详细明确地说明你想要实现的目标。是的,我的错。我改正了。我的意思是[1 8 7]和[1 7 8]只有一个共同特征,即1如果可能,请用嵌套的foreach循环演示该过程。Thnx如果顺序很重要,您不需要嵌套foreach。实际上,您希望同时迭代两个列表。我以前只建议使用嵌套foreach,当时您还没有指定顺序问题。我打算在函数之间重叠的输出上使用数学运算符。调用函数之间的重叠时,输出是什么样子的?有没有可能得到一个列表,其中列出了目标海龟和每个相邻海龟之间的重叠。海龟2是具有特征的目标海龟[1 7 9]。agentset包括具有[1 8 2]和[0 7 4]功能的turtle 0和turtle 8。该列表应类似于[1 2],因为它与turtle 0共享一个功能,与turtle 8共享两个功能;你能接受我的回答吗?我相信我的回答准确地回答了你的问题?至于你提出的新问题,为什么不试着自己编写代码,如果你遇到麻烦,问一个新问题,并展示你的新代码?
to-report overlap-between [target-turtle neighbor-turtle]
  let features1 [feature] of target-turtle
  let features2 [feature] of neighbor-turtle
  ifelse length features1 > length features2
    [ set features1 sublist features1 0 length features2 ]
    [ if length features2 > length features1
      [ set features2 sublist features2 0 length features1 ] ]
  report sum (map [ifelse-value (?1 = ?2) [1] [0]]
                features1 features2)
end