def test_deduplicate(self): sobol = RandomModelBridge( search_space=get_small_discrete_search_space(), model=SobolGenerator(deduplicate=True), transforms=Cont_X_trans, ) for _ in range(4): # Search space is {[0, 1], {"red", "panda"}} self.assertEqual(len(sobol.gen(1).arms), 1) with self.assertRaises(SearchSpaceExhausted): sobol.gen(1)
def testGen(self, mock_init, mock_gen): # Test with constraints modelbridge = RandomModelBridge() modelbridge.parameters = ["x", "y", "z"] modelbridge.transforms = OrderedDict() modelbridge.model = RandomModel() observation_features, weights, best_obsf, _ = modelbridge._gen( n=3, search_space=self.search_space, pending_observations={}, fixed_features=ObservationFeatures({"z": 3.0}), optimization_config=None, model_gen_options=self.model_gen_options, ) gen_args = mock_gen.mock_calls[0][2] self.assertEqual(gen_args["n"], 3) self.assertEqual(gen_args["bounds"], [(0.0, 1.0), (1.0, 2.0), (0.0, 5.0)]) self.assertTrue( np.array_equal( gen_args["linear_constraints"][0], np.array([[1.0, -1, 0.0], [-1.0, 0.0, -1.0]]), )) self.assertTrue( np.array_equal(gen_args["linear_constraints"][1], np.array([[0.0], [-3.5]]))) self.assertEqual(gen_args["fixed_features"], {2: 3.0}) self.assertEqual(gen_args["model_gen_options"], {"option": "yes"}) self.assertEqual(observation_features[0].parameters, { "x": 1.0, "y": 2.0, "z": 3.0 }) self.assertEqual(observation_features[1].parameters, { "x": 3.0, "y": 4.0, "z": 3.0 }) self.assertTrue(np.array_equal(weights, np.array([1.0, 2.0]))) # Test with no constraints, no fixed feature, no pending observations search_space = SearchSpace(self.parameters[:2]) modelbridge.parameters = ["x", "y"] modelbridge._gen( n=3, search_space=search_space, pending_observations={}, fixed_features=ObservationFeatures({}), optimization_config=None, model_gen_options=self.model_gen_options, ) gen_args = mock_gen.mock_calls[1][2] self.assertEqual(gen_args["bounds"], [(0.0, 1.0), (1.0, 2.0)]) self.assertIsNone(gen_args["linear_constraints"]) self.assertIsNone(gen_args["fixed_features"])
def get_ALEBOInitializer(search_space: SearchSpace, B: np.ndarray, **model_kwargs: Any) -> RandomModelBridge: return RandomModelBridge( search_space=search_space, model=ALEBOInitializer(B=B, **model_kwargs), transforms=ALEBO_X_trans, # pyre-ignore )
def get_sobol( search_space: SearchSpace, seed: Optional[int] = None, deduplicate: bool = False, init_position: int = 0, scramble: bool = True, ) -> RandomModelBridge: """Instantiates a Sobol sequence quasi-random generator. Args: search_space: Sobol generator search space. kwargs: Custom args for sobol generator. Returns: RandomModelBridge, with SobolGenerator as model. """ return RandomModelBridge( search_space=search_space, model=SobolGenerator( seed=seed, deduplicate=deduplicate, init_position=init_position, scramble=scramble, ), transforms=Cont_X_trans, )
def get_ALEBOInitializer( search_space: SearchSpace, B: np.ndarray, **model_kwargs: Any ) -> RandomModelBridge: return RandomModelBridge( search_space=search_space, model=ALEBOInitializer(B=B, **model_kwargs), transforms=[CenteredUnitX], )
def get_uniform(search_space: SearchSpace, deduplicate: bool = False, seed: Optional[int] = None) -> RandomModelBridge: """Instantiate uniform generator. Args: search_space: Uniform generator search space. kwargs: Custom args for uniform generator. Returns: RandomModelBridge, with UniformGenerator as model. """ return RandomModelBridge( search_space=search_space, model=UniformGenerator(deduplicate=deduplicate, seed=seed), transforms=Cont_X_trans, )
def get_rembo_initializer( search_space: SearchSpace, A: np.ndarray, bounds_d: List[Tuple[float, float]], **kwargs: Any, ) -> RandomModelBridge: """Instantiates a uniform random generator. Args: search_space: Search space. A: Projection matrix. bounds_d: Bounds in low-d space. kwargs: kwargs Returns: RandomModelBridge, with REMBOInitializer as model. """ return RandomModelBridge( search_space=search_space, model=REMBOInitializer(A=A, bounds_d=bounds_d, **kwargs), transforms=[CenteredUnitX], )
def get_sobol(search_space: SearchSpace) -> RandomModelBridge: return RandomModelBridge( search_space=search_space, model=SobolGenerator(), transforms=Cont_X_trans, )
def testCrossValidate(self, mock_init): modelbridge = RandomModelBridge() modelbridge.transforms = OrderedDict() modelbridge.parameters = ["x", "y", "z"] with self.assertRaises(NotImplementedError): modelbridge._cross_validate([], [], [])
def testPredict(self, mock_init): modelbridge = RandomModelBridge() modelbridge.transforms = OrderedDict() modelbridge.parameters = ["x", "y", "z"] with self.assertRaises(NotImplementedError): modelbridge._predict([])
def testFit(self, mock_init): modelbridge = RandomModelBridge() model = mock.create_autospec(RandomModel, instance=True) modelbridge._fit(model, self.search_space, None, None) self.assertEqual(modelbridge.parameters, ["x", "y", "z"]) self.assertTrue(isinstance(modelbridge.model, RandomModel))