如果代理集中代理的属性不匹配,则要求代理加入代理集

Ask agent to join an agentset if attributes of agents in the agentset isn't match

我无法让 "members" 正确加入 "households"。每个成员都有预定义变量,'mbzone' 'abshid' 'abspid' 和 'absfid',并且一些成员可能具有与这些预定义变量完全相同的一组值。在同样的意义上,家庭代理可以为他们的预定义 'hhzone' 和 'abshid'.

具有相同的一组值

我想通过下面代码中的给定条件让成员代理加入家庭代理。但事实证明,一些 [memberlist] 家庭并不只包含具有独特 'abspid' 和 'absfid' 的成员代理。这意味着在家庭代理的成员列表中,可能有成员具有相同的 absid 和 absfid。我的问题是如何防止这种情况发生?

提前谢谢你。抱歉,如果您不清楚我写的内容,如有必要,我非常乐意提供更详细的解释。

    breed [members member]
    breed [households household]

    members-own [mbzone abshid abspid absfid]
    households-own [hhzone abshid]

    to members-join-households
          ask members [
            set hhid one-of households with [hhzone = [mbzone] of myself and abshid = [abshid] of myself and [abspid] of hhmemberlist != [abspid] of myself and [absfid] of hhmemberlist != [absfid] of myself]
            ask hhid [
              let newmember myself
              set hhmemberlist (turtle-set hhmemberlist newmember)
            ]
          ]
          output-print "member-join-households is done"
        end

@JenB 说的。额外考虑:测试您是否找到了这样的家庭。

breed [members member]
breed [households household]

members-own [mbzone abshid abspid absfid hhid]
households-own [hhzone abshid hhmemberlist]

to members-join-households
  ask members [
    let _pid abspid
    let _fid absfid
    set hhid one-of households with [
      hhzone = [mbzone] of myself 
      and abshid = [abshid] of myself 
      and not member? _pid ([abspid] of hhmemberlist)
      and not member? _fid ([absfid] of hhmemberlist)
    ]
    if (hhid != nobody) [ ;did such a household exist?
      ask hhid [
        set hhmemberlist (turtle-set hhmemberlist myself)
      ]
    ]
  ]
  output-print "member-join-households is done"
end

但与使用定向 link 相比,以这种方式保存成员列表非常笨拙,因此我建议您改用这种方式。如果您有成员直接 link 到一个家庭,那么一个家庭的成员就是它的 link- 邻居,而成员的 hhid 就是它 link 的家庭]s to.