我使用R(和igraph包)创建了一个随机(Erdos-Renyi)网络,它有100个节点。每个节点都被随机分配了0或1的属性。
我需要在这些节点上应用简单多数规则,这样如果节点的大多数邻居具有0的属性,那么节点的属性也会变为0(如果大多数具有1,则为1)。它需要根据数字(1-100)迭代地遍历网络中的所有节点,并应用简单多数规则。
此外,我不知道如何反复遍历每个节点,直到节点停止更新。
有人可以提出解决方案吗?
非常感谢提前。
答案 0 :(得分:2)
粗略看一下你的代码,告诉我你的代码应该工作(但我不熟悉igraph包)。
我能想到的几种可能性:
set.vertex.attribute
无法按预期工作要评估这两种情况,当您检查条件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)。