2016-07-05 27 views
0

我想使用igraph生成小世界网络,但不使用watts.strogatz.game()中实现的“重新连线”。在Newman变体中,所有本地链路都是固定的,但固定数量的随机链路以固定速率在网络上随机取消和丢弃(基本上增加了“远程”连接)。我想我可以简单地生成一个格子(例如g <- graph.lattice(length=20, dim=1, circular=TRUE)),然后在其上放置一个经典的随机图。但是,我不知道如何使用图形作为输入参数来执行此操作。或者,也许有可能以指定的概率添加随机边缘?使用Newman-Watts算法在igraph中生成小世界模型

任何帮助高度赞赏。

非常感谢!

回答

1

使用graph.lattice生成一个点阵,然后erdos.renyi.game具有相同数量的顶点和一个固定的概率来生成一个随机图。然后,您可以使用%u%(联合)运算符组合这两个图。如果相同的边缘恰好是网格和随机图的一部分,那么多边的机会很小,所以如果不需要,也应该在联合上调用simplify()

+0

Fab!听起来很简单。塔玛斯,谢谢你的帮助! – Sibylle

0

这似乎是诀窍,万一有人感兴趣。只需要创建一个功能来重复这个“重新连线”。非常感谢,Tamas!

library(igraph) 
g <- graph.lattice(length=100, dim=1, circular=TRUE) 
g2 <- erdos.renyi.game(100, 1/100) 
g3 <- g %u% g2 
g3 <- simplify(g3) 
plot.igraph(g3, vertex.size = 1,vertex.label = NA, layout=layout_in_circle)