【发布时间】: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