NetLogo:邻居和特征向量

时间:2017-07-05 10:27:24

标签: networking netlogo eigenvector

我想计算一只乌龟的邻居和邻居,以找出计算特征向量中心性的方法。因为我无法获得NW:扩展工作和我的教授。我想过自己建一个方法。由于我在第一轮演讲之前没有那么多时间,所以我尽量只计算一只乌龟的邻居和邻居。 我决定拥有一只自己的海龟,它统计所有邻居,然后将所有邻居和邻居相加。但我陷入了困境,无法让它发挥作用。 设置Neighborscount计数(link-neighbors)

任何人都有任何想法? 同样,非常感谢让特征向量中心性发挥作用的最终方法。

1 个答案:

答案 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。