【问题标题】:Ask agent to join an agentset if attributes of agents in the agentset isn't match如果代理集中代理的属性不匹配,则要求代理加入代理集
【发布时间】:2015-08-13 04:51:07
【问题描述】:

我无法让“成员”正确加入“家庭”。每个成员都有预定义变量,“mbzone”、“abshid”、“abspid”和“absfid”,并且一些成员可能具有与这些预定义变量完全相同的一组值。同样,家庭代理可以为其预定义的“hhzone”和“abshid”设置相同的值。

我想让会员代理通过下面代码中的给定条件加入家庭代理。但事实证明,一些家庭 [memberlist] 不仅仅包含具有唯一“abspid”和“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

【问题讨论】:

  • 第一个问题是你需要实际记录一个成员加入一个家庭。您将成员添加到名为 hhmemberlist 的代理集,但这不是家庭拥有的变量。由于您对问题的描述表明您可以稍后访问[memberlist],因此肯定缺少一些相关代码。另一个问题是我认为您打算排除重复项(hhmemberlist != [abspid] of myself)。出于与集合 {1,2,3} != {1} 相同的原因,这不会排除。你需要成员而不是平等。参见 NetLogo 字典中的member?

标签: netlogo


【解决方案1】:

@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

但是与使用定向链接相比,以这种方式保存成员列表非常笨拙,因此我建议您改用这种方式。如果您有成员形成指向家庭的链接,那么家庭的成员就是它的链接内邻居,而成员的hhid 就是它链接到的家庭。

【讨论】:

  • 使用链接的建议:借调。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多