Netlogo 两个列表组合

Netlogo 两个列表组合,netlogo,Netlogo,我有两个名单给每个代理人。它们表明1)他们被谁吸引,2)他们被谁吸引。 我想创建一个新的set变量,它只显示那些相互吸引的代理。同等吸引力是:代理(自身)的数量在其他代理的“吸引”列表中,而其他代理的数量在第一个代理(自身)的“吸引”列表中。到目前为止,我的代码是: if attracted != nobody [set attractinglists fput ([self] of attracted) attractinglists] if attracted != nob

我有两个名单给每个代理人。它们表明1)他们被谁吸引,2)他们被谁吸引。 我想创建一个新的set变量,它只显示那些相互吸引的代理。同等吸引力是:代理(自身)的数量在其他代理的“吸引”列表中,而其他代理的数量在第一个代理(自身)的“吸引”列表中。到目前为止,我的代码是:

    if attracted != nobody [set attractinglists fput ([self] of attracted) attractinglists]

    if attracted != nobody [set attrlists fput ([self] of attracting) attrlists]

    set attractinglist [self] of other turtles with [member? myself attrlists]
编辑以更好地回答以下评论中澄清的问题

好的,现在,海龟们将有一个他们曾经被吸引的所有海龟的列表。每打一次钩,海龟就会被另外三只海龟吸引。他们将这些海龟添加到他们的“吸引对象”列表中(如果它们还没有在该列表中的话)。接下来,海龟们会检查是否有“被吸引”的海龟曾经被吸引过——如果是的话,他们会将这只海龟添加到“相互吸引”列表中(如果还没有)。这就是你想要的吗

turtles-own [
  attracted-to
  reciprocal-attraction      ;;; the turtles to which this turtle is attracted
]


to setup 
  ca
  create-turtles 10 [
    set attracted-to []
    set reciprocal-attraction []
  ]
end


to go  

  ask turtles [
    let temp-attraction sort n-of 3 other turtles
    show temp-attraction
    foreach temp-attraction [
      [x]->
      if ( member? x attracted-to = false ) [
        set attracted-to lput x attracted-to
      ]
    ]
  ]

  ask turtles [
    foreach attracted-to [ 
      [x]->
      if member? self [attracted-to] of x [
        if ( member? x reciprocal-attraction = false ) [
          set reciprocal-attraction lput x reciprocal-attraction
        ]
      ]
    ]
  ]

end

它不起作用。请记住,“吸引”和“吸引”是在滴答声期间更新的列表。它们可以在勾号10中被吸引到药剂2,但在勾号2中被吸引到药剂2。代码没有考虑到这一点。请帮助。预期输入为agentset,但得到的却是列表[]。它确实有效;我用海龟运行了上面的代码,它们在每一个滴答声开始时都会更新它们的吸引力。我已经编辑了我的答案,以包括所需的唯一设置过程,因此我的答案现在包括使此正确执行所需的所有行。您的
with
错误源于将
with
与列表一起使用,例如上面创建的“同等吸引力列表”,而不是代理集。请注意,在上面的代码中,
原语都在查询代理集“吸引到”。感谢您的帮助。但是,是的,这个代码可以工作,但它不满足我的模型。我的经纪人列出了他们所吸引的所有人的名单。我不希望它们完全覆盖吸引力集。因此,如果代理1在勾号1和2中吸引了[0,2],那么代理2在勾号4中吸引了代理1。然后在勾选4中,我需要一个变量来显示代理1和代理2在一个集合中。啊,我想我更清楚地理解了你的意图——我会再次更新我的答案,看看我是否正确。