我是第一次海报,六个月的读者。我喜欢这个网站,并感谢所涉及的大量主题。现在我觉得使用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书籍进行了广泛的搜索,但到目前为止还没有运气。感谢您抽出宝贵时间阅读本文以及任何有用的评论。
答案 0 :(得分:1)
您对正在发生的事情的理解是正确的:您的membership
记者需要两个代理人,并且您正在向其传递代理和代理集。要单独计算每个成员资格并获取成员资格值列表,您可以使用of
:
to go
ask turtles [
let neighbours turtle-set turtles in-radius 10
show [ membership myself self ] of neighbours
]
end
请注意myself
和self
的使用,有时可能很难理解。在这种情况下,self
是邻居,myself
是外部问龟。
所以现在你有一个会员号码列表,但你想知道:
有没有办法让程序可以考虑所有邻居并得到一个会员号?
有很多方法!但是我们无法真正告诉你使用哪一个:它取决于你的模型以及你想用它做什么。
如果你想要一些非常简单的东西,你可以选择列表的mean
:
show mean [ membership myself self ] of neighbours
...但我不知道你的背景是否有意义。无论如何,NetLogo有很多 mathematical primitives您应该可以使用{{3}}来获得所需的数字。