使用R将简单多数规则应用于随机网络中的节点

时间:2013-12-08 23:32:37

标签: r networking graph igraph

我使用R(和igraph包)创建了一个随机(Erdos-Renyi)网络,它有100个节点。每个节点都被随机分配了0或1的属性。

我需要在这些节点上应用简单多数规则,这样如果节点的大多数邻居具有0的属性,那么节点的属性也会变为0(如果大多数具有1,则为1)。它需要根据数字(1-100)迭代地遍历网络中的所有节点,并应用简单多数规则。

此外,我不知道如何反复遍历每个节点,直到节点停止更新。

有人可以提出解决方案吗?

非常感谢提前。

2 个答案:

答案 0 :(得分:2)

粗略看一下你的代码,告诉我你的代码应该工作(但我不熟悉igraph包)。

我能想到的几种可能性:

  1. set.vertex.attribute无法按预期工作
  2. 您的所有节点已经他们的邻居的简单多数。
  3. 要评估这两种情况,当您检查条件one > zero时,还应检查结果是否实际更改了节点。

    稍后当您将此规则应用于网络直到没有任何更改时,这也会对您有所帮助:只需创建一个标记modified = FALSE,然后在更新任何节点时将其设置为TRUE。然后,您只需将现有代码包装在while循环中:while(!modified)

答案 1 :(得分:1)

你可以尝试这样的图g:

for (i in 1:100) {
    ones <- 0
    zeros <- 0

    #look through the neighbors of the node and count how many ones and zeros it
         #is connected to        

    modified = FALSE

    if (ones > zeros) {
        if (V(g)$value[which(V(g) == i)] == 0) {
            modified = TRUE
            V(g)$value[which(V(g) == i)] = 1
        }
    } else if (ones < zeros) {
        if (V(g)$value[which(V(g) == i)] == 1) {
            modified = TRUE
            V(g)$value[which(V(g) == i)] = 0
        }
    }
}

我不会编写代码来查看节点的邻居并计算它连接的1和0的数量。你可以轻松地做到这一点。

但是我提供的代码将遍历您正在查看的节点的所有相邻节点,并根据其相邻节点的值更改其属性值(为0或1)。