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