示例#1
0
    def get_suggestions(self, params: Dict = None) -> List[Dict]:
        if not self.config.num_runs:
            raise ValueError("This search strategy requires `num_runs`.")
        suggestions = []
        params = params or {}
        rand_generator = get_random_generator(seed=self.config.seed)
        # Validate number of suggestions and total space
        all_discrete = True
        for v in self.config.params.values():
            if v.is_continuous:
                all_discrete = False
                break
        num_runs = self.config.num_runs
        if all_discrete:
            space = reduce(
                mul, [get_length(v) for v in self.config.params.values()])
            num_runs = self.config.num_runs if self.config.num_runs <= space else space

        while num_runs > 0:
            suggestion_params = copy.deepcopy(params)
            suggestion_params.update({
                k: sample(v, rand_generator=rand_generator)
                for k, v in self.config.params.items()
            })
            suggestion = SuggestionSpec(params=suggestion_params)
            if suggestion not in suggestions:
                suggestions.append(suggestion)
                num_runs -= 1
        return [suggestion.params for suggestion in suggestions]
示例#2
0
    def test_matrix_pchoice_option(self):
        config_dict = {"kind": "pchoice", "value": [(1, 0.1), (2, 0.3), (3, 6)]}
        with self.assertRaises(ValidationError):
            V1HpPChoice.from_dict(config_dict)

        config_dict["value"] = [(1, 0.1), (2, 0.3), (3, 0.8)]
        with self.assertRaises(ValidationError):
            V1HpPChoice.from_dict(config_dict)

        config_dict["value"] = [(1, 0.1), (2, 0.3), (3, -0.6)]
        with self.assertRaises(ValidationError):
            V1HpPChoice.from_dict(config_dict)

        config_dict["value"] = ["ok", "nook"]
        with self.assertRaises(ValidationError):
            V1HpPChoice.from_dict(config_dict)

        # Pass for correct config
        config_dict["value"] = [(1, 0.1), (2, 0.1), (3, 0.8)]
        config = V1HpPChoice.from_dict(config_dict)
        assert config.to_dict() == config_dict
        with self.assertRaises(ValidationError):
            to_numpy(config)
        assert sample(config) in [1, 2, 3]
        assert get_length(config) == 3
        assert config.is_categorical is False
        assert config.is_distribution is True
        assert config.is_range is False
        assert config.is_uniform is False
        assert config.is_discrete is True
        assert config.is_continuous is False
        assert get_min(config) is None
        assert get_max(config) is None
示例#3
0
    def test_matrix_values_option(self):
        config_dict = {"kind": "choice", "value": [1, 2, 3]}
        config = V1HpChoice.from_dict(config_dict)
        assert config.to_dict() == config_dict
        assert to_numpy(config) == config_dict["value"]
        assert sample(config) in [1, 2, 3]
        assert get_length(config) == 3
        assert config.is_categorical is False
        assert config.is_distribution is False
        assert config.is_range is False
        assert config.is_uniform is False
        assert config.is_discrete is True
        assert config.is_continuous is False
        assert get_min(config) == 1
        assert get_max(config) == 3

        config_dict["value"] = ["ok", "nook"]
        config = V1HpChoice.from_dict(config_dict)
        assert config.to_dict() == config_dict
        assert to_numpy(config) == config_dict["value"]
        assert sample(config) in ["ok", "nook"]
        assert get_length(config) == 2
        assert config.is_categorical is True
        assert config.is_distribution is False
        assert config.is_range is False
        assert config.is_uniform is False
        assert config.is_discrete is True
        assert config.is_continuous is False
        assert get_min(config) is None
        assert get_max(config) is None

        config_dict["value"] = [[1, 2], [2, 4]]
        config = V1HpChoice.from_dict(config_dict)
        assert config.to_dict() == config_dict
        assert to_numpy(config) == config_dict["value"]
        assert sample(config) in [[1, 2], [2, 4]]
        assert get_length(config) == 2
        assert config.is_categorical is True
        assert config.is_distribution is False
        assert config.is_range is False
        assert config.is_uniform is False
        assert config.is_discrete is True
        assert config.is_continuous is False
        assert get_min(config) is None
        assert get_max(config) is None
示例#4
0
 def assert_equal(config, v1, v2, v3):
     result = {"start": v1, "stop": v2, "num": v3}
     assert config.to_dict()["value"] == result
     np.testing.assert_array_equal(to_numpy(config), np.geomspace(**result))
     assert get_length(config) == len(np.geomspace(**result))
     assert sample(config) in np.geomspace(**result)
     assert config.is_categorical is False
     assert config.is_distribution is False
     assert config.is_range is True
     assert config.is_uniform is False
     assert config.is_discrete is True
     assert config.is_continuous is False
     assert get_min(config) == v1
     assert get_max(config) == v2
示例#5
0
 def assert_equal(config, v1, v2, q, v3=None):
     result = {"loc": v1, "scale": v2, "q": q}
     if v3:
         result["size"] = v3
     assert config.to_dict()["value"] == result
     with self.assertRaises(ValidationError):
         to_numpy(config)
     with self.assertRaises(ValidationError):
         get_length(config)
     assert isinstance(sample(config), float)
     assert config.is_categorical is False
     assert config.is_distribution is True
     assert config.is_range is False
     assert config.is_uniform is False
     assert config.is_discrete is False
     assert config.is_continuous is True
     assert get_min(config) is None
     assert get_max(config) is None
示例#6
0
 def assert_equal(config, v1, v2, v3=None):
     result = {"low": v1, "high": v2}
     if v3:
         result["size"] = v3
     assert config.to_dict()["value"] == result
     with self.assertRaises(ValidationError):
         to_numpy(config)
     with self.assertRaises(ValidationError):
         to_numpy(config)
     with self.assertRaises(ValidationError):
         get_length(config)
     assert v1 <= sample(config) <= v2
     assert config.is_categorical is False
     assert config.is_distribution is True
     assert config.is_range is False
     assert config.is_uniform is True
     assert config.is_discrete is False
     assert config.is_continuous is True
     assert get_min(config) == v1
     assert get_max(config) == v2