1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- # New benchmark that only compares different methods in function of the state complexity
- # This benchmark works out of the context of a real simulation!
- # Complexity is defined as the number of attributes
- from copy import deepcopy
- import cPickle as pickle
- import time
- import random
- class AttributesState(object):
- def __init__(self, complexity):
- self.complexity = complexity
- for f in xrange(complexity):
- setattr(self, str(f), None)
- def set_initial(self):
- for f in xrange(complexity):
- setattr(self, str(f), random.random())
- def copy(self):
- a = AttributesState(self.complexity)
- for f in xrange(self.complexity):
- setattr(a, str(f), getattr(self, str(f)))
- return a
- class SizeState(object):
- def __init__(self, complexity):
- self.values = [None] * complexity
- self.complexity = complexity
- def set_initial(self):
- self.values = [random.random() for _ in xrange(complexity)]
- def copy(self):
- a = SizeState(self.complexity)
- a.values = list(self.values)
- return a
- def benchmark(s, f, out):
- samples = 1000
- for c in range(0, 300, 5):
- if s == "AttributesState":
- state = AttributesState(c)
- elif s == "SizeState":
- state = SizeState(c)
- start = time.time()
- for _ in xrange(samples):
- f(state)
- t = (time.time() - start) / samples * 1000
- print("%i %f" % (c, t))
- out.write("%i %f\n" % (c, t))
- for s in ["AttributesState", "SizeState"]:
- for f in [("deepcopy", lambda i: deepcopy(i)), ("pickle", lambda i: pickle.loads(pickle.dumps(i))), ("custom", lambda i: i.copy())]:
- print("%s -- %s" % (s, f[0]))
- out = open("%s_%s" % (s, f[0]), 'w')
- benchmark(s, f[1], out)
- out.close()
|