-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwersja_graf.py
122 lines (101 loc) · 3.85 KB
/
wersja_graf.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import networkx as nx
import random
import matplotlib.pyplot as plot
import imageio
# GRAF
# Funkcja rysujaca graf, na podstawie wprowadzonych danych - beta, gamma, ilosc populacji, czas.
# Zalozenia:
# - liczebnosc populacji jest stala
# - beta > gamma, w innym przypadku nie jest to przypadek epidemii,
# - kazdy typ osobnika ma rowne szanse spotkania osobnika innego typu,
# - pojawia sie 1 zainfekowanywy
def graf():
q = 0;
while q == 0:
beta = float(raw_input("Podaj wartosc bety (predkosc rozprzestrzenania sie epidemii, beta > gamma): "))
gamma = float(raw_input("Podaj wartosc gamma (predkosc zdrowienia populacji, beta > gamma): "))
if beta > gamma:
q = 1
else:
print 'Nieprawidlowe dane! (beta > gamma; liczby zmiennoprzecinkowe)'
q = 0
N = int(raw_input("Podaj liczebnosc populacji: "))
czas = int(raw_input("Podaj czas trwania obserwacji epidemii: "))
options_2 = {
'with_labels': False,
'node_color': 'grey',
'node_size': 100,
'edge_color': 'grey',
'linewidths': 0,
'width': 0.3,
}
options_i = {
'with_labels': False,
'node_color': 'red',
'node_size': 100,
'edge_color': 'grey',
'linewidths': 0,
'width': 0.3,
}
options_r = {
'with_labels': False,
'node_color': 'blue',
'node_size': 100,
'edge_color': 'grey',
'linewidths': 0,
'width': 0.3,
}
nazwy=[]
i=[]
r=[]
graf = nx.barabasi_albert_graph(N,4) # graf w ksztalcie kuli, 4 oznacza kreski odchodzace od kulek ich zasieg
pos = nx.spring_layout(graf)
# pierwszy chory losowo
pierwszy = random.choice(graf.nodes())
graf.node[pierwszy] = 'I'
i.append(pierwszy)
for x in range(czas):
liczba = 0
while liczba < N:
liczba = liczba + 1
los = random.choice(graf.nodes()) # wybiera losowo kulke
if graf.node[los] == 'I': # chory - losowanie czy wyzdrowieje, czy zarazi (0.0,1.0)
if len(i) == 1:
sasiad = random.choice(graf.neighbors(los)) # los na sasiada
if graf.node[sasiad] != 'R' and graf.node[sasiad] != 'I':
# gdy sasiad jest zdrowy porownanie do szybkosci rozprzestrzeniania i zarazenie lub nie
if random.random() < beta:
graf.node[sasiad] = 'I'
else:
a = random.random()
if a < gamma:
graf.node[los] = 'R'
if a > gamma:
sasiad = random.choice(graf.neighbors(los)) # los na sasiada
if graf.node[sasiad] != 'R' and graf.node[sasiad] != 'I':
# gdy sasiad jest zdrowy porownanie do szybkosci rozprzestrzeniania i zarazenie lub nie
if random.random() < beta:
graf.node[sasiad] = 'I'
for no in graf.nodes():
if graf.node[no] == 'I':
i.append(no)
if graf.node[no] == 'R':
r.append(no)
else:
continue
plot.axis('off')
nx.draw_networkx_edges(graf,pos,edge_color='k')
nx.draw_networkx_nodes(graf, pos, **options_2)
nx.draw_networkx_nodes(graf, pos, nodelist=i,label=len(i), **options_i)
nx.draw_networkx_nodes(graf, pos, nodelist=r, **options_r)
p = str(len(i))
plot.title(x)
plot.annotate(p, xy=(2, 1), xytext=(3, 1.5))
filenames = str(x) + ".png"
plot.savefig(filenames)
plot.savefig(filenames)
nazwy.append(filenames)
images=[]
for nazwa in nazwy:
images.append(imageio.imread(nazwa))
imageio.mimsave('test.gif', images, duration=2, fps=100)