aboutsummaryrefslogtreecommitdiffstats
path: root/jpa_test/cascade_creation.py
diff options
context:
space:
mode:
authorjeanpouget-abadie <jean.pougetabadie@gmail.com>2014-11-23 23:22:35 -0500
committerjeanpouget-abadie <jean.pougetabadie@gmail.com>2014-11-23 23:22:35 -0500
commit1c08943bed693d3110634fc3e5bd0f4631066db0 (patch)
tree07481593339b975bb222da6fd1a743a524276dcf /jpa_test/cascade_creation.py
parentff79230b49760a37b57590c0b6e9907500486114 (diff)
downloadcascades-1c08943bed693d3110634fc3e5bd0f4631066db0.tar.gz
messy cascade_creation.py
Diffstat (limited to 'jpa_test/cascade_creation.py')
-rw-r--r--jpa_test/cascade_creation.py38
1 files changed, 38 insertions, 0 deletions
diff --git a/jpa_test/cascade_creation.py b/jpa_test/cascade_creation.py
new file mode 100644
index 0000000..88798cd
--- /dev/null
+++ b/jpa_test/cascade_creation.py
@@ -0,0 +1,38 @@
+import networkx as nx
+import numpy as np
+
+def icc_cascade(G, p_init):
+ """
+ input: graph with prob as edge attr
+ returns: 2D boolean matrix with indep. casc.
+ where True means node was active at that time step
+ p_init: proba that node in seed set
+ """
+ susceptible = np.ones(G.number_of_nodes(), dtype=bool)
+ active = np.random.rand(G.number_of_nodes()) < p_init
+ susceptible = susceptible - active
+ cascade = []
+ while sum(active) and sum(susceptible):
+ cascade.append(active)
+ tmp = np.zeros(G.number_of_nodes(), dtype=bool)
+ for node in np.where(active)[0]:
+ #rand_p = np.random.rand(G.degree(2))
+ for edge in G.edges(node, data=True):
+ tmp[edge[1]] += np.random.rand() < edge[2]["weight"] \
+ and susceptible[edge[1]]
+ active = tmp
+ susceptible = susceptible - active
+ return cascade
+
+def test():
+ """
+ unit test
+ """
+ G = nx.erdos_renyi_graph(500, .15, directed=True)
+ for edge in G.edges(data=True):
+ edge[2]['weight'] = .1*np.random.rand()
+
+ print len(icc_cascade(G, p_init=.1))
+
+if __name__ == "__main__":
+ test()