BAモデル・ランダムグラフの構築・解析

[R][igraph][社会ネットワーク]RでBAモデル
[R][社会ネットワーク][igraph]Rでランダムグラフ

画像処理の方とは違った課題により、

またもRを使ってバラバシ・アルバートモデルなるネットワークモデルを実装してみました。

せっかくだから俺はこっちのMathematicaを選ぶぜ!


BAモデル

intSize = 5;
size = 10000;

(* 完全グラフからスタート *)
A = Select[
   Flatten[Table[Table[{i, j}, {i, intSize}], {j, intSize}], 
    1], #[[1]] != #[[2]] &];
s = Table[Count[A, {j, _}], {j, size}];


For[i = intSize + 1, i <= size, i++,
 k = RandomSample[s -> Range[size], intSize];
 Map[s[[#]] += 1 &, k];
 s[[i]] += intSize;
 A = A~Join~Map[{#, i} &, k]~Join~Map[{i, #} &, k];
 ]


tt = Table[Count[s, i], {i, 1, Max[s]}];
(* 両対数グラフの表示 *)
ListLogLogPlot[tt, PlotStyle -> PointSize[Large], Filling -> Axis]


(* 外部パッケージの読み込み *)
<< Combinatorica`

G = RemoveMultipleEdges[AddEdges[AddVertices[Graph[{}, {}], size], A]]


(* 固有パス長の計算 *)
L = N[Median[
   Table[
    Mean[Distances[G, i]]
    , {i, 1, size, 100}]
   ]]


(* クラスタ係数の計算 *)
Coef = N[Mean[
   Table[
    G2 = InduceSubgraph[G, Neighborhood[G, i, 1]];
    (M[G2] - s[[i]])/Binomial[V[G2] - 1, 2]
    , {i, 1, size, 100}]
   ]]

ランダムグラフ

intSize = 5;
size = 10000;

A = {};
s = Table[Table[0, {i, size}], {i, size}];

For[i = 1, i <= size, i++,
 For[j = i + 1, j <= size, j++,

  If[RandomReal[] < intSize/(size - 1),
   s[[i, j]] = 1;
   s[[j, i]] = 1;
   A = A~Join~{{i, j}}~Join~{{j, i}};
   , {}
   ]

  ]
 ]

ss = Table[Total[s[[i]]], {i, size}];
tt = Table[Count[ss, i], {i, 1, Max[ss]}];

(* プロット *)
ListPlot[tt, PlotStyle -> PointSize[Large], Filling -> Axis]

(* 外部パッケージの読み込み *)
<< Combinatorica`

G = RemoveMultipleEdges[AddEdges[AddVertices[Graph[{}, {}], size], A]]
Clear[A];

(* 固有パス長 *)
L = N[Median[
   Table[
    Mean[Distances[G, i]]
    , {i, 1, size, 100}]
   ]]

(* クラスタ係数 *)
Coef = N[Mean[
   Table[
    G2 = InduceSubgraph[G, Neighborhood[G, i, 1]];
    If[V[G2] != 2 && V[G2] != 1,
     (M[G2] - ss[[i]])/Binomial[V[G2] - 1, 2],
     0]
    , {i, 1, size, 10}]
   ], 10]

固有パス長・クラスタ係数を計算するために初めて外部パッケージ「Combinatorica」を導入してみましたが・・・
関数の仕様のみで使用例が何も書いてなくて死にそうでした。
誰が読めるんだろうこれ・・・

結論:みんなはトラバ先のSong of Aさんを参考にしてね!