Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
def test_init_invalid_input():
    """
    Ensure an exception is raised if an object that is not a function is
    provided.
    """
    with pytest.raises(TypeError):
        RandomInput(1)
def beta_distribution_input():
    """
    Creates a RandomInput object that produces samples from a
    beta distribution.
    """
    np.random.seed(1)

    def beta_distribution(shift, scale, alpha, beta, size):
        return shift + scale * np.random.beta(alpha, beta, size)

    return RandomInput(distribution_function=beta_distribution,
                       shift=1.0, scale=2.5, alpha=3., beta=2.)
Exemplo n.º 6
0
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)
Exemplo n.º 7
0
def random_input():
    """
    Creates a RandomInput object that produces samples from a
    uniform distribution.
    """
    return RandomInput()
Exemplo n.º 8
0
on level 0 and level 1. This provides the reference solution for the test:
"test_hard_coded_spring_mass_random_input"
'''

# Step 1 - Define random variable for spring stiffness:
# Need to provide a sampleable function to create RandomInput instance in MLMCPy
np.random.seed(1)


def beta_distribution(shift, scale, alpha, beta, size):
    return shift + scale * np.random.beta(alpha, beta, size)


stiffness_distribution = RandomInput(distribution_function=beta_distribution,
                                     shift=1.0,
                                     scale=2.5,
                                     alpha=3.,
                                     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
Exemplo n.º 9
0
in files as inputs.
p
'''


# Step 1 - Define random variable for spring stiffness:
# Need to provide a sampleable function to create RandomInput instance in MLMCPy
def beta_distribution(shift, scale, alpha, beta, size):

    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])