def multi_source_optimizer(): mock_acquisition_optimizer = mock.create_autospec(AcquisitionOptimizer) mock_acquisition_optimizer.optimize.return_value = (np.array([[0.]]), None) space = ParameterSpace( [ContinuousParameter('x', 0, 1), InformationSourceParameter(2)]) return MultiSourceAcquisitionOptimizer(mock_acquisition_optimizer, space)
def test_multi_source_batch_experimental_design(): objective, space = multi_fidelity_forrester_function() # Create initial data random_design = RandomDesign(space) x_init = random_design.get_samples(10) intiial_results = objective.evaluate(x_init) y_init = np.array([res.Y for res in intiial_results]) # Create multi source acquisition optimizer acquisition_optimizer = GradientAcquisitionOptimizer(space) multi_source_acquisition_optimizer = MultiSourceAcquisitionOptimizer( acquisition_optimizer, space) # Create GP model gpy_model = GPy.models.GPRegression(x_init, y_init) model = GPyModelWrapper(gpy_model) # Create acquisition acquisition = ModelVariance(model) # Create batch candidate point calculator batch_candidate_point_calculator = GreedyBatchPointCalculator( model, acquisition, multi_source_acquisition_optimizer, batch_size=5) initial_loop_state = LoopState(intiial_results) loop = OuterLoop(batch_candidate_point_calculator, FixedIntervalUpdater(model, 1), initial_loop_state) loop.run_loop(objective, 10) assert loop.loop_state.X.shape[0] == 60
def test_multi_source_sequential_with_source_context(): # Check that we can fix a non-information source parameter with context mock_acquisition = mock.create_autospec(Acquisition) mock_acquisition.has_gradients = False mock_acquisition.evaluate = lambda x: np.sum(x**2, axis=1)[:, None] space = ParameterSpace( [ContinuousParameter("x", 0, 1), ContinuousParameter("y", 0, 1), InformationSourceParameter(2)] ) acquisition_optimizer = GradientAcquisitionOptimizer(space) multi_source_acquisition_optimizer = MultiSourceAcquisitionOptimizer(acquisition_optimizer, space) loop_state_mock = mock.create_autospec(LoopState) seq = SequentialPointCalculator(mock_acquisition, multi_source_acquisition_optimizer) next_points = seq.compute_next_points(loop_state_mock, context={"source": 1.0}) # "SequentialPointCalculator" should only ever return 1 value assert len(next_points) == 1 # Context value should be what we set assert np.isclose(next_points[0, 1], 1.0)