Strict Standards: Redefining already defined constructor for class Object in /www/htdocs/w00b2db0/cake/libs/object.php on line 63

Strict Standards: Non-static method Configure::getInstance() should not be called statically in /www/htdocs/w00b2db0/cake/bootstrap.php on line 47
Example for Python Experiment Suite

## Example for Python Experiment Suite

This little example demonstrates how to use the Python Experiment Suite (source code available here).

This example verifies a simple stochastic law, namely that the sample mean of n random numbers drawn from a normal distribution converges to the actual mean of the distribution for large n.

The first part is the actual Python script called suite.py
from expsuite import PyExperimentSuite
from numpy import *
import os

class MySuite(PyExperimentSuite):

restore_supported = True

def reset(self, params, rep):
# initialize array
self.numbers = zeros(params['iterations'])

# seed random number generator
random.seed(params['seed'])

def iterate(self, params, rep, n):
# draw normally distributed random number
self.numbers[n] = random.normal(params['mean'], params['std'])

# calculate sample mean and offset
samplemean = mean(self.numbers[:n])
offset = abs(params['mean']-samplemean)

# return dictionary
ret = {'n':n, 'number':self.numbers[n],
'samplemean':samplemean, 'offset':offset}

return ret

def save_state(self, params, rep, n):
# save array as binary file
save(os.path.join(params['path'], params['name'],
'array_%i.npy'%rep), self.numbers)

def restore_state(self, params, rep, n):
params['name'], 'array_%i.npy'%rep))

if __name__ == '__main__':
mysuite = MySuite()
mysuite.start()


The part below is the configuration file experiments.cfg. The second part is the configuration file, called experiments.cfg. Copy both in the same folder, then run the suite.py script from the command line: python suite.py.

[DEFAULT]
repetitions = 1
iterations = 4000
path = results
seed = None

[normal]
mean = 0
std = 1

[highstd]
mean = 0
std = 5

After running the script, the logfiles are stored in a sub-directory ./results/ and can be accessed with the built-in Python API, for example with these commands:
from suite import MySuite
from matplotlib import pyplot as plt
from numpy import *

mysuite = MySuite()
exps = mysuite.get_exps()

print 'lowest offset for experiment normal:', mysuite.get_value(exps, 0, 'offset', 'min')
print 'lowest offset for experiment highstd:', mysuite.get_value(exps, 0, 'offset', 'min')

plt.plot(mysuite.get_history(exps, 0, 'offset'), linewidth=2, color='blue', label='std=1')
plt.plot(mysuite.get_history(exps, 0, 'offset'), linewidth=2, color='red', label='std=5')
plt.show()