from cPickle import load from math import log, exp #import numpy as np #from scipy.optimize import basinhopping from itertools import product def iter_events(events): for n, s in events.iteritems(): for t in s: yield (n, t) 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)) 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) 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")) d = {} for line in open("values.txt"): v = map(float, line.strip().split()) d[tuple(v[:3])] = v[3] # lamb = [20. ** i for i in range(-15, 15)] # alpha = [20. ** i for i in range(-15, 15)] # mu = [20. ** i for i in range(-15, 15)] # for l, a, m in product(lamb, alpha, mu): # if (l, a, m) in d: # continue # print l, a, m, ll((l, a, m)) print ll((2, 10000000000., 0.000000000000000000001)) #r = basinhopping(ll, init, disp=True, stepsize=0.1, T=10000., niter=500) #print r.x