0
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))

ノードの削除をランダムな標的型攻撃としてシミュレートするにはどうすればよいですか? ネットワークが故障するまでの合計ステップを計算できますが、プロットしたいと思います。

4

1 に答える 1