実現したいこと
BAモデルと呼ばれるネットワークを自作したのですが、同じアルゴリズムで10個ネットワークを作り、ネットワーク同士の任意のノードを繋げて大きな一つのネットワークを作成することを考えています。
Networkxを用いると、
G.add_edge('1', '2')
のようにすることで、1番目のノードと2番目のノードをつなげることができます。これを用いて、BAネットワークがいくつかつながったネットワークを作成したいのですが、やり方がよくわかりません。例えば、100個のノードを持つネットワークを作成した後、101個目から新たにネットワークを作成し、いくつかのネットワークがつながったような構造を持つネットワークを作成するにはどのようにすればよいでしょうか。
該当のソースコード
python
1import networkx as nx 2import numpy as np 3import matplotlib.pyplot as plt 4 5def gen_BA_network(n, m, seed=None): 6 if seed is not None: 7 np.random.seed(seed=seed) 8 9 m0 = m # 初期ノード数 10 G = nx.cycle_graph(m0) # 初期のcycleグラフを生成 11 initial_edges = list(G.edges()) 12 node_list = list(range(m0)) 13 14 # ノードを追加し、エッジを次数に比例して追加していく 15 for i in range(m0, n): 16 darray = np.array(G.degree())[:,1] # 次数の配列 17 18 for j in range(m): 19 # 次数に比例した確率ベクトルを生成 20 s = np.sum(darray) 21 parray = darray / s 22 23 # 次数に比例した確率で既存のノードを選び、エッジとする 24 new = np.random.choice(node_list, p=parray) 25 G.add_edge(i, new) 26 27 darray[new] = 0. 28 29 node_list.append(i) 30 31 G.remove_edges_from(initial_edges) 32 return G 33 34n = 100 35m = 4