model = SpringMassModel(state0, measure_t_grid)

# Load data
noise_stddev = 0.5
displacement_data = np.genfromtxt('noisy_data.txt')

# Define prior distributions
param_priors = {'K': ['Uniform', 0.0, 10.0], 'g': ['Uniform', 0.0, 10.0]}

# SMC sampling
num_particles = 500
num_time_steps = 20
num_mcmc_steps = 1

# Autosaver
smc = SMCSampler(displacement_data, model, param_priors)
step_list = smc.sample(num_particles,
                       num_time_steps,
                       num_mcmc_steps,
                       noise_stddev,
                       ess_threshold=num_particles * 0.5,
                       autosave_file='autosaver.hdf5')

try:
    # Calculate means
    means = [step.get_mean() for step in step_list]

    for key, value in means[-1].iteritems():
        print '%s mean = %s' % (key, value)

    # Plot
Exemple #2
0
if __name__ == '__main__':
    # instance model / set up ground truth / add noise
    a = 2
    b = 3.5
    x = np.arange(50)
    m = model(x)
    std_dev = 0.6
    y_noisy = np.genfromtxt('noisy_data.txt')

    param_priors = {'a': ['Uniform', -5.0, 5.0], 'b': ['Uniform', -5.0, 5.0]}

    # run smc
    num_particles = 1000
    num_time_steps = 20
    num_mcmc_steps = 5
    smc = SMCSampler(y_noisy, m, param_priors)
    particle_chain = smc.sample(num_particles,
                                num_time_steps,
                                num_mcmc_steps,
                                std_dev,
                                ess_threshold=0.5 * num_particles,
                                autosave_file='smc.h5')

    # try a restart
    restarted_chain = smc.sample(num_particles,
                                 num_time_steps,
                                 num_mcmc_steps,
                                 std_dev,
                                 ess_threshold=0.5 * num_particles,
                                 restart_time_step=10,
                                 hdf5_to_load='smc.h5',
import numpy as np
from spring_mass_models import SpringMassModel
from smcpy.smc.smc_sampler import SMCSampler

# Initialize model
state0 = [0., 0.]  #initial conditions
measure_t_grid = np.arange(0., 5., 0.2)  #time
model = SpringMassModel(state0, measure_t_grid)

# Load data
noise_stddev = 0.94
displacement_data = np.genfromtxt('noisy_data.txt')

# Define prior distributions
param_priors = {'K': ['Uniform', 0.0, 10.0], 'g': ['Uniform', 0.0, 10.0]}

# SMC sampling
num_particles = 5000
num_time_steps = 20
num_mcmc_steps = 1
smc = SMCSampler(displacement_data, model, param_priors)
pchain = smc.sample(num_particles,
                    num_time_steps,
                    num_mcmc_steps,
                    noise_stddev,
                    ESS_threshold=num_particles * 0.5)
if smc.rank == 0:
    pchain.plot_pairwise_weights(save=True)
Exemple #4
0
from scipy.optimize import minimize

if __name__ == '__main__':
    # instance model / set up ground truth / add noise
    a = 2
    b = 3.5
    x = np.arange(50)
    m = model(x)
    std_dev = 0.6
    y_noisy = np.genfromtxt('noisy_data.txt')

    param_priors = {'a': ['Uniform', -5.0, 5.0], 'b': ['Uniform', -5.0, 5.0]}

    # run smc
    num_particles = 1000
    num_time_steps = 20
    num_mcmc_steps = 5
    smc = SMCSampler(y_noisy, m, param_priors)
    particle_chain = smc.sample(
        num_particles,
        num_time_steps,
        num_mcmc_steps,
        std_dev,
        ESS_threshold=0.5 * num_particles,
        #proposal_center=center, proposal_scales=scales,
        autosave_file='test.h5')
    try:
        particle_chain.plot_pairwise_weights()
    except:
        pass
def test_setup_communicator():
    comm, size, my_rank = SMCSampler.setup_communicator()
    assert size == 1 and my_rank == 0
def test_setup_mcmc_sampler(model):
    data = model.evaluate({'a': 0., 'b': 0.})
    param_priors = {'a': ['Uniform', 0., 1.], 'b': ['Uniform', 0., 1.]}
    mcmc = SMCSampler.setup_mcmc_sampler(data, model, param_priors)
    assert isinstance(mcmc, MCMCSampler)
Exemple #7
0
from scipy.optimize import minimize

if __name__ == '__main__':
    # instance model / set up ground truth / add noise
    a = 2
    b = 3.5
    x = np.arange(50)
    my_model = Model(x)
    std_dev = None  # measurement noise std deviation will be sampled
    noisy_data = np.genfromtxt('noisy_data.txt')

    param_priors = {'a': ['Uniform', -5.0, 5.0], 'b': ['Uniform', -5.0, 5.0]}

    # run smc
    num_particles = 1000
    num_time_steps = 20
    num_mcmc_steps = 2
    smc = SMCSampler(noisy_data, my_model, param_priors)
    step_list = smc.sample(num_particles,
                           num_time_steps,
                           num_mcmc_steps,
                           std_dev,
                           ess_threshold=0.5 * num_particles,
                           autosave_file='test.h5')

    # plot results of last step
    try:
        step_list[-1].plot_pairwise_weights(show=False, save=True)
    except:
        pass