Я пытаюсь смоделировать случайную атаку на сеть Эрдоша-Реньи. Предполагаемый результат состоит в том, что сеть разрушается, когда вы удаляете примерно 20–30% узлов. Однако я не могу воспроизвести этот результат, поскольку размер гигантского связного компонента, кажется, линейно уменьшается.
import networkx as nx
import random as rd
def random_single():
l1 = nx.fast_gnp_random_graph(1000, 0.01)
nodes = []
gcc = []
n_nodes = l1.number_of_nodes()
removed_nodes = 0
gcc_size = len(list(max(nx.connected_components(l1), key=len))) / n_nodes
gcc.append(gcc_size)
nodes.append(0.0)
while l1.number_of_nodes() > 1:
node = rd.choice(list(l1.nodes()))
l1.remove_node(node)
removed_nodes += 1
gcc_size = len(list(max(nx.connected_components(l1), key=len))) / n_nodes
gcc.append(gcc_size)
nodes.append(1 - ((og_n_nodes - removed_nodes) / n_nodes))
fig, ax = plt.subplots()
ax.plot(nodes, gcc)
Ожидаемый результат:
Мой результат: