我想计算一只乌龟的邻居和邻居,以找出计算特征向量中心性的方法。因为我无法获得NW:扩展工作和我的教授。我想过自己建一个方法。由于我在第一轮演讲之前没有那么多时间,所以我尽量只计算一只乌龟的邻居和邻居。 我决定拥有一只自己的海龟,它统计所有邻居,然后将所有邻居和邻居相加。但我陷入了困境,无法让它发挥作用。 设置Neighborscount计数(link-neighbors)
任何人都有任何想法? 同样,非常感谢让特征向量中心性发挥作用的最终方法。
答案 0 :(得分:3)
首先,我的主要建议是让NW工作。我很乐意为此提供帮助。
除此之外,以下假设您正在使用无向网络。如果那不是演员,请告诉我。
您描述的方法的问题是它会多次计算一些邻居邻居。相反,你可以获得邻居邻居的代理集,然后只计算它:
to-report neighbors-of-neighbors
report turtle-set [ link-neighbors ] of link-neighbors
end
然后,[ count neighbors-of-neighbors ] of turtle 0
将给出turtle 0
邻居的邻居数量。
现在,几点:
这将包括乌龟本身,因为乌龟总是其链接邻居的链接邻居。如果你不想包括乌龟本身,你可以在那里扔other
:[ count other neighbors-of-neighbors ] of turtle 0
。
这个赢了包括作为乌龟0的链接邻居的海龟,但是没有链接到海龟0的任何其他邻居。要添加它们,你可以考虑这样的程序:
to-report turtles-in-link-radius [ n ]
let result turtle-set self
repeat n [
set result (turtle-set result [ link-neighbors ] of result)
]
report result
end
然后可以使用它,例如:[ count turtle-in-link-radius 2 ] of turtle 0
来计算距离乌龟0最多2个跃点的所有海龟。此记者与nw:turtles-in-radius
具有相同的行为,尽管它会显着慢。
现在,我首先注意到你的想法会多次计算一些海龟。鉴于您对特征向量中心性等感兴趣,也许这就是您想要的。在这种情况下,你可以这样做:[ sum [ count link-neighbors ] of link-neighbors ] of turtle 0
得到它而不必打扰自己的海龟。也就是说,如果你使用海龟自己,你实际上可以自己计算特征向量的中心性:
turtles-own [
...
next-ec ;; helper variable for iteratively computing eigenvector-centrality
eigenvector-centrality
...
]
to calculate-eigenvector-centralities
ask turtles [
set eigenvector-centrality 1
]
repeat 100 [ ;; the higher this number, the more accurate the value. NW uses 100
ask turtles [
set next-ec sum [ eigenvector-centrality ] of link-neighbors
]
let max-ec max [ next-ec ] of turtles
ask turtles [
set eigenvector-centrality next-ec / max-ec ;; normalize
]
]
end
调用calculate-eigenvector-centralities
计算所有海龟的特征向量中心。海龟'然后,特征向量中心将存储在eigenvector-centrality
中。请注意,此代码不会为断开连接的网络工作:每个组件都必须独立规范化,这就是NW的功能,但在NetLogo中没有简单的方法可以做到这一点。使用NW。