In [2]:
import networkx as nx
import random
import matplotlib.pyplot as plt
import numpy as np
from random import*

Izvedli bomo simulacijo. S simulacijo bomo previrili, kako stabilne so Scale-free mreže na ciljne napade. Zaradi spreminjajočega se števila vozlišč ter možnosti, da vozlišča postanejo nepovezava, bomo vgrajeno oblikovali lastno funkcijo, s katero bomo določali učinkovitost mreže.

In [14]:
def ucinkovitost(G):
	avg=0.0
	nn=0.0
	for i in G:
		for j in G:
			if i!=j:
				try:
					avg+=1.0/nx.dijkstra_path_length(G,i,j)
					nn+=1.0
				except :
					nn+=1.0
	avg=float(avg)/nn
	return avg

def kavg(G):
    kk=0.0
    for i in G:
        kk+=G.degree(i)
    kk=kk/float(len(G))
    return kk

V spodnji vrstici je oblikan algoritem za ciljno izbijanje vozlišč. Po vsakem izbitem vozlišči posodobimo seznam, ki drži urejen seznam imen vozlišč od najbolj povezanih do najmanj povezavnih. Sprotno računamo kolišna je povprečna povezanost , učinkovitost ter gručavost mreže.

In [16]:
N=100
G=nx.barabasi_albert_graph(N,2)#nx.watts_strogatz_graph(100,4,0.1)
seznam={}
napad=[]
for ii in G:
    seznam[ii]=G.degree(ii)
for i in sorted(seznam,key=seznam.__getitem__,reverse=True):
    #print("Beseda %s se pojavi %d-krat"%(i,int(besede[i])))
    napad.append(i)
print("Izbitih = %02d"%(0),"<k> = %1.2f"%(kavg(G)),"<E> = %1.2f"%(ucinkovitost(G)),"<C> = %.2f"%(nx.average_clustering(G)))
for i in range(N):
    for k in G.neighbors(napad[0]):
        G.remove_edge(napad[0],k)
    seznam={}
    napad=[]
    for ii in G:
        seznam[ii]=G.degree(ii)
    for ii in sorted(seznam,key=seznam.__getitem__,reverse=True):
        #print("Beseda %s se pojavi %d-krat"%(i,int(besede[i])))
        napad.append(ii)
    print("Izbitih = %02d"%(i+1),"<k> = %1.2f"%(kavg(G)),"<E> = %1.2f"%(ucinkovitost(G)),"<C> = %.2f"%(nx.average_clustering(G)))
Izbitih = 00 <k> = 3.92 <E> = 0.38 <C> = 0.16
Izbitih = 01 <k> = 3.30 <E> = 0.33 <C> = 0.09
Izbitih = 02 <k> = 2.86 <E> = 0.30 <C> = 0.03
Izbitih = 03 <k> = 2.50 <E> = 0.25 <C> = 0.02
Izbitih = 04 <k> = 2.20 <E> = 0.20 <C> = 0.01
Izbitih = 05 <k> = 1.98 <E> = 0.17 <C> = 0.00
Izbitih = 06 <k> = 1.82 <E> = 0.14 <C> = 0.00
Izbitih = 07 <k> = 1.70 <E> = 0.13 <C> = 0.00
Izbitih = 08 <k> = 1.58 <E> = 0.11 <C> = 0.00
Izbitih = 09 <k> = 1.48 <E> = 0.09 <C> = 0.00
Izbitih = 10 <k> = 1.38 <E> = 0.07 <C> = 0.00
Izbitih = 11 <k> = 1.28 <E> = 0.04 <C> = 0.00
Izbitih = 12 <k> = 1.20 <E> = 0.04 <C> = 0.00
Izbitih = 13 <k> = 1.12 <E> = 0.03 <C> = 0.00
Izbitih = 14 <k> = 1.06 <E> = 0.03 <C> = 0.00
Izbitih = 15 <k> = 1.00 <E> = 0.02 <C> = 0.00
Izbitih = 16 <k> = 0.94 <E> = 0.02 <C> = 0.00
Izbitih = 17 <k> = 0.88 <E> = 0.02 <C> = 0.00
Izbitih = 18 <k> = 0.82 <E> = 0.02 <C> = 0.00
Izbitih = 19 <k> = 0.76 <E> = 0.01 <C> = 0.00
Izbitih = 20 <k> = 0.70 <E> = 0.01 <C> = 0.00
Izbitih = 21 <k> = 0.64 <E> = 0.01 <C> = 0.00
Izbitih = 22 <k> = 0.58 <E> = 0.01 <C> = 0.00
Izbitih = 23 <k> = 0.54 <E> = 0.01 <C> = 0.00
Izbitih = 24 <k> = 0.50 <E> = 0.01 <C> = 0.00
Izbitih = 25 <k> = 0.46 <E> = 0.01 <C> = 0.00
Izbitih = 26 <k> = 0.42 <E> = 0.01 <C> = 0.00
Izbitih = 27 <k> = 0.38 <E> = 0.00 <C> = 0.00
Izbitih = 28 <k> = 0.34 <E> = 0.00 <C> = 0.00
Izbitih = 29 <k> = 0.30 <E> = 0.00 <C> = 0.00
Izbitih = 30 <k> = 0.26 <E> = 0.00 <C> = 0.00
Izbitih = 31 <k> = 0.22 <E> = 0.00 <C> = 0.00
Izbitih = 32 <k> = 0.20 <E> = 0.00 <C> = 0.00
Izbitih = 33 <k> = 0.18 <E> = 0.00 <C> = 0.00
Izbitih = 34 <k> = 0.16 <E> = 0.00 <C> = 0.00
Izbitih = 35 <k> = 0.14 <E> = 0.00 <C> = 0.00
Izbitih = 36 <k> = 0.12 <E> = 0.00 <C> = 0.00
Izbitih = 37 <k> = 0.10 <E> = 0.00 <C> = 0.00
Izbitih = 38 <k> = 0.08 <E> = 0.00 <C> = 0.00
Izbitih = 39 <k> = 0.06 <E> = 0.00 <C> = 0.00
Izbitih = 40 <k> = 0.04 <E> = 0.00 <C> = 0.00
Izbitih = 41 <k> = 0.02 <E> = 0.00 <C> = 0.00
Izbitih = 42 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 43 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 44 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 45 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 46 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 47 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 48 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 49 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 50 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 51 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 52 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 53 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 54 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 55 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 56 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 57 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 58 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 59 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 60 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 61 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 62 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 63 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 64 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 65 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 66 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 67 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 68 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 69 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 70 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 71 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 72 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 73 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 74 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 75 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 76 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 77 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 78 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 79 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 80 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 81 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 82 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 83 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 84 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 85 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 86 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 87 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 88 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 89 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 90 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 91 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 92 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 93 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 94 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 95 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 96 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 97 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 98 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 99 <k> = 0.00 <E> = 0.00 <C> = 0.00
Izbitih = 100 <k> = 0.00 <E> = 0.00 <C> = 0.00

DN:

Doma izdelajte program, s katerim boste naključno izbijali vozlišča. Primerjajte rezultate s cijnim napadom na Barabasi mrežo. Dodatno izdelajte simulacijo ciljnega in naključnega napada na naključno mrežo, ki je po povprečni povezanosti in številu vozlišč primerljiva z Barabasi-jevo mrežo.

In [ ]: