def test_get_next_by_random_search(self, patch): def side_effect(size): return [ConfigurationMock()] * size patch.side_effect = side_effect smbo = SMAC(self.scenario, rng=1).solver rval = smbo._get_next_by_random_search(10, False) self.assertEqual(len(rval), 10) for i in range(10): self.assertIsInstance(rval[i][1], ConfigurationMock) self.assertEqual(rval[i][1].origin, 'Random Search') self.assertEqual(rval[i][0], 0)
def test_choose_next_empty_X(self): smbo = SMAC(self.scenario, rng=1).solver smbo.acquisition_func._compute = mock.Mock(spec=RandomForestWithInstances) smbo._get_next_by_random_search = mock.Mock(spec=smbo._get_next_by_random_search) smbo._get_next_by_random_search.return_value = [[0, 0], [0, 1], [0, 2]] X = np.zeros((0, 2)) Y = np.zeros((0, 1)) x = smbo.choose_next(X, Y) self.assertEqual(x, [0, 1, 2]) self.assertEqual(smbo._get_next_by_random_search.call_count, 1) self.assertEqual(smbo.acquisition_func._compute.call_count, 0)
def test_get_next_by_random_search_sorted(self, patch_sample, patch_ei, patch_impute): values = (10, 1, 9, 2, 8, 3, 7, 4, 6, 5) patch_sample.return_value = [ConfigurationMock(i) for i in values] patch_ei.return_value = np.array([[_] for _ in values], dtype=float) patch_impute.side_effect = lambda l: values smbo = SMAC(self.scenario, rng=1).solver rval = smbo._get_next_by_random_search(10, True) self.assertEqual(len(rval), 10) for i in range(10): self.assertIsInstance(rval[i][1], ConfigurationMock) self.assertEqual(rval[i][1].value, 10 - i) self.assertEqual(rval[i][0], 10 - i) self.assertEqual(rval[i][1].origin, 'Random Search (sorted)') # Check that config.get_array works as desired and imputation is used # in between np.testing.assert_allclose(patch_ei.call_args[0][0], np.array(values, dtype=float))