NetLogo - 将单个代理与许多代理进行比较(预期输入不是列表)

时间:2014-08-07 12:07:46

标签: netlogo

我是第一次海报,六个月的读者。我喜欢这个网站,并感谢所涉及的大量主题。现在我觉得使用NetLogo更有能力了,我尝试了一些更难的东西而且卡住了......

基本上,我已经创建了一个隶属函数,它可以在包含两个变量的向量上对代理进行测量(对摇滚和嘻哈的看法):

to-report membership [ agent1 agent2 ]
let w 0.5
let w2 sq w
report exp (- d2 agent1 agent2 / w2)
end

,其中

;;;;;;;;;;;;;;Shortcut functions;;;;;;;;;;;;;;;;;;;;;;;;;;;

to-report d2 [agent1 agent2 ]
  report ( (sq ([rock] of agent1 - [rock] of agent2)) + (sq ([hip-hop] of agent1 - [hip-hop] of agent2)) )
end

to-report sq [ x ]
  report x * x
end

这一切都很好,我可以毫无问题地比较任何两个代理。 但是,当我尝试将单个代理[agent1]与其邻居中的所有代理进行比较时,我的麻烦就出现了。

to go
    ask turtles [
    let neighbours turtle-set turtles in-radius neighbourhood
    show membership self neighbours] 
end

每当我运行这个模型时,我都会收到一个错误,即d2记者预期输入不是列表 - 我理论上理解 - 通过一个1+代理的邻域,计算接收例如[0.1 0.8] [0.2 0.4] [0.5 0.6] ..............

我只是想知道,有没有办法让程序可以考虑所有邻居并获得一个会员号码?我已经通过帖子和一些netlogo书籍进行了广泛的搜索,但到目前为止还没有运气。感谢您抽出宝贵时间阅读本文以及任何有用的评论。

1 个答案:

答案 0 :(得分:1)

您对正在发生的事情的理解是正确的:您的membership记者需要两个代理人,并且您正在向其传递代理和代理集。要单独计算每个成员资格并获取成员资格值列表,您可以使用of

to go
  ask turtles [
    let neighbours turtle-set turtles in-radius 10
    show [ membership myself self ] of neighbours
  ]
end

请注意myselfself的使用,有时可能很难理解。在这种情况下,self是邻居,myself是外部问龟。

所以现在你有一个会员号码列表,但你想知道:

  

有没有办法让程序可以考虑所有邻居并得到一个会员号?

有很多方法!但是我们无法真正告诉你使用哪一个:它取决于你的模型以及你想用它做什么。

如果你想要一些非常简单的东西,你可以选择列表的mean

show mean [ membership myself self ] of neighbours

...但我不知道你的背景是否有意义。无论如何,NetLogo有很多 mathematical primitives您应该可以使用{{3}}来获得所需的数字。