diff options
| author | Thibaut Horel <thibaut.horel@gmail.com> | 2015-09-14 23:08:02 -0400 |
|---|---|---|
| committer | Thibaut Horel <thibaut.horel@gmail.com> | 2015-09-14 23:08:02 -0400 |
| commit | ab0b1f3cefedb35327a19ec1b6afd560bfdf802d (patch) | |
| tree | b777f3e2c0ac0e712d8c5faab5107b1d236e2c3a /hawkes_experiments/refine.py | |
| parent | 960676226862d2d68c7a9c04c56d4f8157803025 (diff) | |
| download | criminal_cascades-ab0b1f3cefedb35327a19ec1b6afd560bfdf802d.tar.gz | |
Import supplements and repo reorganization
Diffstat (limited to 'hawkes_experiments/refine.py')
| -rw-r--r-- | hawkes_experiments/refine.py | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/hawkes_experiments/refine.py b/hawkes_experiments/refine.py new file mode 100644 index 0000000..02bbe07 --- /dev/null +++ b/hawkes_experiments/refine.py @@ -0,0 +1,70 @@ +from cPickle import load +from itertools import product +from math import exp, log, sin +import sys +from multiprocessing import Pool + + +def iter_events(events): + for n, s in events.iteritems(): + for t in s: + yield (n, t) + + +def inprod(a, b): + return tuple(float(x * y) for x, y in zip(a, b)) + + +def approx(x): + if x > 1e-10: + return 1 - exp(-x) + else: + return x + + +def ll(lamb, alpha, mu): + r1 = sum(log(lamb * (1 + 0.43 * sin(0.0172 * t1 + 4.36)) + + sum(alpha / d * mu * exp(-mu * (t1 - t2)) + for (n2, t2, d) in s)) + for ((n1, t1), s) in event_edges.iteritems()) + r2 = sum(sum(alpha / d * approx(mu * (nodes[n2][0] - t1)) + for n2, d in edges[n1].iteritems() + if nodes[n2][0] > t1) + for (n1, t1) in iter_events(events)) + r3 = lamb * sum(node[1] for node in nodes.itervalues()) + return -(r1 - r2 - r3) + + +def get_values(): + d = {} + for line in open(sys.argv[1]): + v = map(float, line.strip().split()) + d[tuple(v[:3])] = v[3] + l = d.items() + l.sort(key=lambda x: x[1]) + for line in open("refine.txt"): + v = map(float, line.strip().split()) + d[tuple(v[:3])] = v[3] + for a, _ in l[:100]: + t = [1. / i for i in range(2, 4)] + [float(i) for i in range(1, 4)] + for b in product(t, repeat=3): + l, al, m = inprod(a, b) + if (l, al, m) in d: + continue + yield (l, al, m) + + +def refine(): + p = Pool(5) + + def aux(x): + l, a, m = x + print l, a, m, ll(l, a, m) + sys.stdout.flush() + + p.map(aux, get_values()) + + +if __name__ == "__main__": + nodes, edges, events, event_edges = load(open("data-all.pickle", "rb")) + refine() |
