第4章 べき則 ぱらぱらめくる『ランダム グラフ ダイナミクス』

  • ベキ則のグラフをランダムに作成するBarabasi-Albertモデル
# barabasi-albert
library(igraph)
# ノードの付け加え回数
n.step <- 1000
# 初期ノード数
m0 <- 5
# ノードを付け加えるときの辺の数
m <- sample(1:m0,1)
print(m)
# 初期グラフはエッジなし
g0 <- graph.empty(n=m0,directed=FALSE)
g.series <- list()
g.series[[1]] <- g0
for(i in 2:n.step){
	tmp.g <- add.vertices(g.series[[i-1]],1)
	#print(tmp.g)
# そのときの次数を重みとして新規ノードと辺を持たせる
	tmp.degree <- degree(g.series[[i-1]])
	#print(tmp.degree)
	if(sum(tmp.degree)==0){
		prob <- rep(1,m0+i-2)
	}else{
		prob <- tmp.degree
	}
	prob <- prob/sum(prob)
	s <- sample(0:(m0+i-3),m,prob=prob)
	#print(s)
	ed <- cbind(s,rep(m0+i-2,m))
	#print(ed)
	g.series[[i]] <- add.edges(tmp.g,t(ed))
}
par(mfcol=c(1,2))
#for(i in 1:n.step){
#	plot(g.series[[i]])
#	plot(degree.distribution(g.series[[i]]))
#}

plot(g.series[[n.step]])
plot(degree.distribution(g.series[[n.step]]))
  • 何に着目するか
    • 次数別の頂点数割合
    • ある頂点の次数の変化