Código Python: reprodução do gráfico da página 89 do livro do Barabasi
# reprodução do gráfico da página 89 do livro do Barabasi
# by Ana Carolina Medeiros Brito
import numpy as np
import networkx as nx
import matplotlib.pyplot as plt
g = None
N = 100
iters = 100 # M
X = []
Y = []
Y_err = []
for p in np.linspace(0.0001, 0.1, 100): # valores maiores de p não são interessantes pois a rede gerada já possui apenas um componente
# print('probabilidade de conexão entre vértices %.2f' % p)
k = p*(N-1)
# print('grau médio estimado %.2f' % k)
N_g_configs = []
k_configs = []
for _ in range(iters):
# g = nx.erdos_renyi_graph(N, p)
g = nx.watts_strogatz_graph(N, 2, p, seed=None)
k = np.mean(list(dict(g.degree()).values())) # grau médio da rede gerada
k_configs.append(k)
giant = sorted(nx.connected_components(g), key=len, reverse=True)[0]
N_g = len(giant) # tamanho do maior componente
N_g_configs.append(N_g)
N_g_configs_normed = np.asarray(N_g_configs)/N
X.append(np.mean(k_configs))
Y.append(np.mean(N_g_configs_normed))
Y_err.append(np.std(N_g_configs_normed))
plt.figure(figsize=(16,9))
plt.errorbar(X,Y,yerr=Y_err)
plt.axvline(1, c='red')
plt.axvline(np.log(N), c='red')
plt.xlabel('<k>', size=14)
plt.ylabel(r'$N_g$/N', size=14)
plt.show()