import random
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
import networkx as nx
from ComplexNetworkSim import NetworkSimulation, AnimationCreator, PlotCreator
def attack(graph, centrality_metric):
graph = graph.copy()
steps = 0
ranks = centrality_metric(graph)
nodes = sorted(graph.nodes(), key=lambda n: ranks[n])
while nx.is_connected(graph):
graph.remove_node(nodes.pop())
steps += 1
else:
return steps
def random_attack(graph):
graph = graph.copy()
steps = 0
while nx.is_connected(graph):
node = random.choice(graph.nodes())
graph.remove_node(node)
steps += 1
else:
return steps
NETWORK_SIZE = 1000
print 'Creating powerlaw cluster with %d Nodes.' % NETWORK_SIZE
K = 4
P = 0.1
HK = nx.powerlaw_cluster_graph(NETWORK_SIZE, K, 0.1)
print 'Starting attacks...'
print 'Network with Scale-free Model broke after %s steps with random attack.' % (random_attack(HK))
print 'Network with Scale-free Model broke after %s steps with Targeted Attacks.' % (attack(HK, nx.betweenness_centrality))
如何将节点移除模拟为随机和有针对性的攻击?我可以计算总步骤,直到网络崩溃,但我想绘制它。