-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathks_test-combined
145 lines (111 loc) · 4.79 KB
/
ks_test-combined
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#!/usr/bin/env python
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import colors
from matplotlib.lines import Line2D
from scipy.special import comb
from scipy.stats import ks_2samp
import pickle
from os import makedirs, path
loadfiles = ['beta_experiment/beta-0-1/sim-20180512-105719',
'beta_experiment/beta-1/sim-20180511-163319',
'beta_experiment/beta-10/sim-20180512-105824']
numAgents = 50
numNeurons = 10
numEdges = int(comb(numNeurons, 2))
autoLoad = True
saveFigBool = True
# loadfiles = ['beta_experiment/beta-0-1/sim-20180512-105719',
# 'beta_experiment/beta-0-1/sim-20180512-105725',
# 'beta_experiment/beta-1/sim-20180511-163319',
# 'beta_experiment/beta-1/sim-20180511-163335',
# 'beta_experiment/beta-1/sim-20180511-163347',
# 'beta_experiment/beta-1/sim-20180511-163357',
# 'beta_experiment/beta-10/sim-20180512-105824',
# 'beta_experiment/beta-10/sim-20180512-105819']
# IC = [0, 0, 1, 1, 1, 1, 2, 2]
new_order = [2, 0, 1]
labels = [r'$\beta_i = 0.1$', r'$\beta_i = 1$', r'$\_i = 10$']
iter_list = np.arange(0, 4000, 1)
# norm = [[194, 48, 32, 255],
# [146, 49, 182, 255],
# [44, 112, 147, 255]
# ]
# norm = np.divide(norm, 255)
def upper_tri_masking(A):
m = A.shape[0]
r = np.arange(m)
mask = r[:, None] < r
return A[mask]
def load_J(loadfile, iter_list, numAgents, autoLoad):
folder = 'save/' + loadfile
folder2 = folder + '/figs/J/'
fname2 = folder2 + 'J_gen-' + \
str(iter_list[0]) + '-' + str(iter_list[1] - iter_list[0]) + \
'-' + str(iter_list[-1]) + \
'.npz'
if path.isfile(fname2) and autoLoad:
txt = 'Loading: ' + fname2
print(txt)
J = np.load(fname2)['J']
else:
J = np.zeros(( numAgents, numEdges, len(iter_list) ))
for i, iter in enumerate(iter_list):
filename = 'save/' + loadfile + '/isings/gen[' + str(iter) + ']-isings.pickle'
startstr = 'Loading simulation:' + filename
print(startstr)
isings = pickle.load(open(filename, 'rb'))
for orgNum, I in enumerate(isings):
J[orgNum, :, i] = upper_tri_masking(I.J)
if not path.exists(folder):
makedirs(folder)
np.savez(fname2, J=J)
return J
# Load all Js
Js = []
for loadfile in loadfiles:
J = load_J(loadfile, iter_list, numAgents, autoLoad)
Js.append(J)
# Compare edge weight distributions per generation
# edge indices corresponding to disallowed edges
# since these edges are always set to 0 by design, using them in the ks-test
# comparison would ruin the test
numGens = np.shape(Js)[-1]
ignore_ind = [0, 1, 5, 6, 7, 8, 9, 13, 14, 15, 16, 20, 21, 22, 23]
ks_sub_crit = np.zeros((numGens, 2))
ks_sup_crit = np.zeros((numGens, 2))
ks_sub_sup = np.zeros((numGens, 2))
for gen in range(numGens):
sub_J = Js[2][:,:, gen][..., [i for i in range(numEdges) if i not in ignore_ind]]
sub_J = sub_J.reshape(np.size(sub_J))
crit_J = Js[1][:,:, gen][..., [i for i in range(numEdges) if i not in ignore_ind]]
crit_J = crit_J.reshape(np.size(crit_J))
sup_J = Js[0][:,:, gen][..., [i for i in range(numEdges) if i not in ignore_ind]]
sup_J = sup_J.reshape(np.size(sup_J))
ks_sub_crit[gen, :] = ks_2samp(sub_J, crit_J)
ks_sup_crit[gen, :] = ks_2samp(sup_J, crit_J)
ks_sub_sup[gen, :] = ks_2samp(sub_J, sup_J)
# plt.rc('text', usetex=True)
font = {'family': 'serif', 'size': 20, 'serif': ['computer modern roman']}
plt.rc('font', **font)
plt.rc('legend', **{'fontsize': 20})
fig, ax = plt.subplots(1, 1, figsize=(19, 10))
fig.text(0.51, 0.035, r'$Generation$', ha='center', fontsize=20)
# fig.text(0.07, 0.5, r'$Avg. Food Consumed$', va='center', rotation='vertical', fontsize=20)
fig.text(0.07, 0.5, r'$KS-statistic$', va='center', rotation='vertical', fontsize=20)
title = 'Edge Weight KS-tests'
fig.suptitle(title)
a = 0.5
cmap = plt.get_cmap('Spectral')
norm = colors.Normalize(vmin=0, vmax=len(loadfiles)) # age/color mapping
ax.scatter(iter_list, ks_sub_crit[:, 0], label='sub/crit', alpha=a, color=cmap(norm(1)))
ax.scatter(iter_list, ks_sup_crit[:, 0], label='sup/crit', alpha=a, color=cmap(norm(0)))
ax.scatter(iter_list, ks_sub_sup[:, 0], label='sub/sup', alpha=a, color=cmap(norm(2)))
custom_legend = [Line2D([0], [0], marker='o', color='w',
markerfacecolor=cmap(norm(1)), markersize=15),
Line2D([0], [0], marker='o', color='w',
markerfacecolor=cmap(norm(0)), markersize=15),
Line2D([0], [0], marker='o', color='w',
markerfacecolor=cmap(norm(2)), markersize=15),]
ax.legend(custom_legend, ['Sub vs. Crit', 'Super vs. Crit', 'Sub vs. Super'], loc='upper left')
plt.show()