aboutsummaryrefslogtreecommitdiffstats
path: root/simulation/main.py
diff options
context:
space:
mode:
Diffstat (limited to 'simulation/main.py')
-rw-r--r--simulation/main.py101
1 files changed, 0 insertions, 101 deletions
diff --git a/simulation/main.py b/simulation/main.py
deleted file mode 100644
index 81133c7..0000000
--- a/simulation/main.py
+++ /dev/null
@@ -1,101 +0,0 @@
-import mleNode as mn
-
-import numpy as np
-from numpy.linalg import norm
-import numpy.random as nr
-from scipy.optimize import minimize
-import matplotlib.pyplot as plt
-import seaborn
-from random import random, randint
-from six.moves import range
-
-seaborn.set_style("white")
-
-
-def create_random_graph(n_nodes, p=.5):
- graph = .5 * np.random.binomial(2, p=.5, size=(n_nodes, n_nodes))
- for k in range(len(graph)):
- graph[k, k] = 0
- return np.log(1. / (1 - p * graph))
-
-
-def create_star(n_nodes, p=.5):
- graph = np.zeros((n_nodes, n_nodes))
- graph[0] = np.ones((n_nodes,))
- graph[0, 0] = 0
- for index, row in enumerate(graph[1:-1]):
- row[index + 1] = 1
- graph[-1, 1] = 1
- return np.log(1. / (1 - p * graph))
-
-
-def simulate_cascade(x, graph):
- """
- Simulate an IC cascade given a graph and initial state.
-
- For each time step we yield:
- - susc: the nodes susceptible at the beginning of this time step
- - x: the subset of susc who became infected
- """
- yield x, np.zeros(graph.shape[0], dtype=bool)
- susc = np.ones(graph.shape[0], dtype=bool)
- while np.any(x):
- susc = susc ^ x # nodes infected at previous step are now inactive
- if not np.any(susc):
- break
- x = 1 - np.exp(-np.dot(graph.T, x))
- y = nr.random(x.shape[0])
- x = (x >= y) & susc
- yield x, susc
-
-
-def uniform_source(graph, *args, **kwargs):
- x0 = np.zeros(graph.shape[0], dtype=bool)
- x0[nr.randint(0, graph.shape[0])] = True
- return x0
-
-
-def var_source(graph, t, node_p=None, *args, **kwargs):
- if node_p is None:
- node_p = np.ones(len(graph)) / len(graph)
- x0 = np.zeros(graph.shape[0], dtype=bool)
- x0[nr.choice(a=len(graph), p=node_p)] = True
- return x0
-
-
-def simulate_cascades(n, graph, source=uniform_source):
- for t in range(n):
- x0 = source(graph, t)
- yield simulate_cascade(x0, graph)
-
-
-def build_cascade_list(cascades, collapse=False):
- x, s = [], []
- for cascade in cascades:
- xlist, slist = zip(*cascade)
- x.append(np.vstack(xlist))
- s.append(np.vstack(slist))
- if not collapse:
- return x, s
- else:
- return np.vstack(x), np.vstack(s)
-
-
-if __name__ == "__main__":
- #g = np.array([[0, 0, 1], [0, 0, 0.5], [0, 0, 0]])
- #p = 0.5
- #g = np.log(1. / (1 - p * g))
- g = create_random_graph(n_nodes=3)
- print(g)
- sizes = [10**3]
- for si in sizes:
- cascades = simulate_cascades(si, g)
- cascade, y_obs = mn.build_matrix(cascades, 2)
- print(mn.infer(cascade, y_obs))
- #conf = mn.bootstrap(cascade, y_obs, n_iter=100)
- #estimand = np.linalg.norm(np.delete(conf - g[0], 0, axis=1), axis=1)
- #plt.hist(estimand, bins=40)
- #plt.show()
- #error.append(mn.confidence_interval(*np.histogram(estimand, bins=50)))
- #plt.plot(sizes, error)
- #plt.show()