无标度网络代码
时间: 2023-09-11 14:11:05 浏览: 42
下面是一个简单的 Python 实现无标度网络的代码:
```python
import networkx as nx
import matplotlib.pyplot as plt
import random
# 生成无标度网络
def generate_barabasi_albert_graph(n, m):
G = nx.Graph()
nodes = [i for i in range(m)]
G.add_nodes_from(nodes)
for node in nodes:
G.add_edge(node, (node+1)%m)
for i in range(m, n):
node = i
degree_sequence = sorted([degree for node, degree in G.degree()], reverse=True)
total_degree = sum(degree_sequence)
probabilities = [degree/total_degree for degree in degree_sequence]
chosen_nodes = random.choices(list(G.nodes()), weights=probabilities, k=m)
for chosen_node in chosen_nodes:
G.add_edge(node, chosen_node)
return G
# 可视化无标度网络
def plot_graph(G):
pos = nx.spring_layout(G)
nx.draw(G, pos)
plt.show()
# 测试代码
G = generate_barabasi_albert_graph(50, 3)
plot_graph(G)
```
代码中的 `generate_barabasi_albert_graph` 函数使用了 Barabási–Albert 模型生成无标度网络,参数 `n` 和 `m` 分别指定了生成的节点数和每个新节点连接的边数。函数首先生成一个包含 `m` 个节点的完全图,然后每次加入一个新节点时,会根据已有节点的度数分布随机选择 `m` 个节点,将它们与新节点连接。最后,函数返回生成的无标度网络。
代码中的 `plot_graph` 函数用于将生成的无标度网络可视化。它使用了 NetworkX 库和 Matplotlib 库,首先使用 `spring_layout` 函数生成节点的布局,然后使用 `draw` 函数绘制网络图形,并使用 `show` 函数显示图形。