def test_exception_invalid_distribution_function():
    """
    Ensure an exception is thrown if the provided function does not return
    the expected data type.
    """
    def invalid_distribution_function():
        return [1, 2, 3]

    with pytest.raises(TypeError):
        invalid_sampler = RandomInput(invalid_distribution_function)
        invalid_sampler.draw_samples(5)
def test_distribution_exception_if_size_parameter_not_accepted():
    """
    Ensure an exception occurs if the distribution function does not accept
    a size parameter.
    """
    def invalid_distribution_function():
        return np.zeros(5)

    invalid_input = \
        RandomInput(distribution_function=invalid_distribution_function)

    with pytest.raises(TypeError):
        invalid_input.draw_samples(10)
def test_setting_random_seed():
    """
    Test setting of random seed by taking samples, resetting seed, then drawing
    again to see if the samples match.
    """
    random_input = RandomInput(np.random.uniform, random_seed=1)

    num_samples = 5
    samples1 = np.zeros(num_samples)
    samples2 = np.zeros(num_samples)

    for i in range(num_samples):
        samples1[i] = random_input.draw_samples(1)

    random_input.reset_sampling()

    for i in range(num_samples):
        samples2[i] = random_input.draw_samples(1)

    assert np.array_equal(samples1, samples2)
def test_extra_distribution_function_parameters():
    """
    Test ability to specify optional distribution function parameters.
    """
    np.random.seed(1)

    normal_sampler = RandomInput(np.random.normal, loc=1.)
    sample = normal_sampler.draw_samples(100)

    assert isinstance(sample, np.ndarray)
    assert sample.shape == (100, 1)
    assert np.abs(np.mean(sample) - 1.) < .2
Exemple #5
0
                                     beta=2.)

# Step 2 - Initialize spring-mass models. Here using three levels with MLMC.
# defined by different time steps
model_level1 = SpringMassModel(mass=1.5, time_step=1.0, cost=1.0)
model_level2 = SpringMassModel(mass=1.5, time_step=0.1, cost=10.0)

# Step 3 - Initialize MLMC & predict max displacement to specified error.

#These numbers were generated for epsilon=0.1
N0 = 1113
N1 = 34

#Level 0
outputs0 = np.zeros(N0)
inputs0 = stiffness_distribution.draw_samples(N0)

for i, sample in enumerate(inputs0):
    outputs0[i] = model_level1.evaluate([sample])

#Level 1:
inputs1 = stiffness_distribution.draw_samples(N1)
outputs1 = np.zeros(N1)

for i, sample in enumerate(inputs1):
    outputs1[i] = (model_level2.evaluate([sample]) -
                   model_level1.evaluate([sample]))

#Combine levels for estimates
mean = np.mean(outputs0) + np.mean(outputs1)
print "Mean estimate: ", mean
    return shift + scale * np.random.beta(alpha, beta, size)


np.random.seed(1)
stiffness_distribution = RandomInput(distribution_function=beta_distribution,
                                     shift=1.0,
                                     scale=2.5,
                                     alpha=3.,
                                     beta=2.,
                                     random_seed=1)

# Step 2: Run standard Monte Carlo to generate a reference solution and target
# precision
num_samples = 5000
model = SpringMassModel(mass=1.5, time_step=0.01)
input_samples = stiffness_distribution.draw_samples(num_samples)
output_samples_mc = np.zeros(num_samples)

start_mc = timeit.default_timer()

for i, sample in enumerate(input_samples):
    output_samples_mc[i] = model.evaluate([sample])

mc_total_cost = timeit.default_timer() - start_mc

mean_mc = np.mean(output_samples_mc)
precision_mc = (np.var(output_samples_mc) / float(num_samples))
print "Target precision: ", precision_mc

# Step 3 - Initialize spring-mass models for MLMC. Here using three levels
# with MLMC defined by different time steps