diff options
| author | Thibaut Horel <thibaut.horel@gmail.com> | 2015-09-13 03:22:37 -0400 |
|---|---|---|
| committer | Thibaut Horel <thibaut.horel@gmail.com> | 2015-09-13 03:22:37 -0400 |
| commit | 750ce1282d4604df96ab9a3d676dba448d9d838f (patch) | |
| tree | 48a62859f5b03caa4dc529f8e934871ac8a4ee40 /hawkes/refine.py | |
| parent | bfae098bbc47b3948a2a794bee4e49ff32504d6b (diff) | |
| download | criminal_cascades-750ce1282d4604df96ab9a3d676dba448d9d838f.tar.gz | |
Final tweaks to the optimization
Diffstat (limited to 'hawkes/refine.py')
| -rw-r--r-- | hawkes/refine.py | 47 |
1 files changed, 33 insertions, 14 deletions
diff --git a/hawkes/refine.py b/hawkes/refine.py index 675bee3..3dfcfcc 100644 --- a/hawkes/refine.py +++ b/hawkes/refine.py @@ -1,6 +1,8 @@ from cPickle import load from itertools import product -from math import exp, log +from math import exp, log, sin +import sys +from multiprocessing import Pool def iter_events(events): @@ -13,31 +15,48 @@ def inprod(a, b): return tuple(float(x * y) for x, y in zip(a, b)) -def ll(a): - lamb, alpha, mu = a - - r1 = sum(log(lamb + sum(alpha * w * mu * exp(-mu * (t1 - t2)) - for (n2, t2, w) in s)) +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 * w * (1 - exp(-mu * (nodes[n2] - t1))) - for n2, w in edges[n1].iteritems() if nodes[n2] > t1) + r2 = sum(sum(alpha / d * (1 - exp(-mu * (nodes[n2] - t1))) + for n2, d in edges[n1].iteritems() if nodes[n2] > t1) for (n1, t1) in iter_events(events)) r3 = lamb * sum(nodes.itervalues()) return -(r1 - r2 - r3) -if __name__ == "__main__": - nodes, edges, events, event_edges = load(open("data.pickle", "rb")) +def get_values(): d = {} - for line in open("test.txt"): + 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 a, _ in l[:10]: - t = [1. / i for i in range(2, 6)] + [float(i) for i in range(1, 6)] + 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 - print l, al, m, ll((l, al, m)) + 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("data2.pickle", "rb")) + refine() |
