复杂网络随机攻击代码
时间: 2023-11-01 14:07:35 浏览: 133
以下是Python代码实现复杂网络的随机攻击:
```python
import networkx as nx
import random
# 构建一个复杂网络
G = nx.powerlaw_cluster_graph(1000, 10, 0.2)
# 随机攻击
def random_attack(G, p):
nodes = list(G.nodes())
random.shuffle(nodes)
for node in nodes:
if random.random() < p:
G.remove_node(node)
# 测试随机攻击
for i in range(11):
p = i / 10
H = G.copy()
random_attack(H, p)
print(p, len(H), nx.average_shortest_path_length(H))
```
其中,`nx.powerlaw_cluster_graph(n, m, p)`可以生成一个包含n个节点、每个节点有m个邻居、按照幂律分布随机重连边的复杂网络。`random_attack(G, p)`函数实现了随机攻击,将每个节点以概率p从网络中删除。最后测试不同随机攻击概率下,网络的规模和平均最短路径长度的变化。
相关问题
复杂网络随机攻击代码并画图显示
以下是Python代码实现复杂网络的随机攻击并画图显示:
```python
import networkx as nx
import random
import matplotlib.pyplot as plt
# 构建一个复杂网络
G = nx.powerlaw_cluster_graph(1000, 10, 0.2)
# 随机攻击
def random_attack(G, p):
nodes = list(G.nodes())
random.shuffle(nodes)
for node in nodes:
if random.random() < p:
G.remove_node(node)
# 测试随机攻击
sizes = []
avg_path_lengths = []
for i in range(11):
p = i / 10
H = G.copy()
random_attack(H, p)
sizes.append(len(H))
avg_path_lengths.append(nx.average_shortest_path_length(H))
# 画图显示结果
plt.plot([i / 10 for i in range(11)], sizes, 'b-', label='Size')
plt.plot([i / 10 for i in range(11)], avg_path_lengths, 'r-', label='Avg. Path Length')
plt.xlabel('Random Attack Probability')
plt.legend()
plt.show()
```
其中,`plt.plot()`函数可以绘制多条曲线并显示图例,`plt.xlabel()`函数设置x轴标签。运行代码后会显示出分别表示网络规模和平均最短路径长度随随机攻击概率变化的两条曲线,以及图例和x轴标签。
阅读全文