2017-10-12 115 views
0

是否有相当于命令one-of的所有代理?那么一个all-of命令?我需要我的代理商要求特定的其他代理商汇总并报告价值。 one-of命令将只会随机选择一个其他代理,但我需要选择列表中的所有代理。Netlogo:是否有一个`all-of`命令,类似于'one-of`?

详情:我需要我的household代理商要求其他household代理商进行总结并汇报自己的HHwaterUse值。每个household代理将要求所有其他代理在其SocialNetwork列表中。 SocialNetwork列表由Public_ID值组成,它是每个代理拥有的值。

例:所以,如果household-1拥有一种SocialNetwork列表看起来像[9126 3495 4197 8771],我需要的9126,3495,等一个Public_ID值的所有代理汇报他们的HHwaterUse值。

ask households [ 
    set NetUseSum sum [HHwaterUse] of households with [[Public_ID] of myself = all-of [SocialNetwork] of self] 
    ] 
+3

卢克的答案是正确的,但如果你要代表的社交网络,你应该使用[链接](http://ccl.northwestern.edu/netlogo/docs/programming.html#links )而不是列表。这会使代码更好(通常更快)。您现在身份证明列表中遇到的困难只是冰山一角;一旦你开始依靠ID或“who”号码,一切都变得尴尬和复杂。当您依赖直接的代理参考,代理集和链接时,NetLogo会发光。如果你拥抱这一点,你将会得到长期的回报。 –

+2

是每个代理程序唯一的Public_ID值,还是更像是类别指示符。如果它们对每个代理都是唯一的(出于某种原因,您不想按照Nicolas的建议使用链接),那么您可以使用代理集而不是标识符列表。 – JenB

回答

2

member?原始应该工作,检查出dictionary entry了解详情。这里是只是一个单一的家庭会检查其社交网络的水资源使用量之和的例子:

breed [ households household ] 
households-own [ Public_ID Social_Network HH_Water_Use] 

to setup 
    ca 
    create-households 10 [ 
    setxy random-xcor random-ycor 
    set Public_ID 1000 + random 1000 
    set HH_Water_Use 100 + random 50 
    ] 

    ask households [ 
    set Social_Network sort [Public_ID] of n-of 4 other households 
    ] 
    reset-ticks 
end 

to sum-social-network 

    ask one-of households [ 
    show (word "My social network comprises: " Social_Network) 
    ask households with [ member? Public_ID [Social_Network] of myself ] [ 
     print (word Public_ID " has a water use of " HH_Water_Use) 
    ] 
    let social_sum sum [HH_Water_Use] of households with [ member? Public_ID [Social_Network] of myself ] 
    print (word "My social network has a sum water use of " social_sum) 
    ] 

end 

编辑:

刚一说明,我和Nicolas和仁上文同意这种说法是绝对不最好的方法。如有可能,请使用其链接或代理商建议。

0

这有效,卢克C的建议使用member?片段做了诀窍。我能够一次总结代理商名单中的价值。

let social_sum sum [HH_Water_Use] of households with [ member? Public_ID [Social_Network] of myself ] 
相关问题