Exemple #1
0
def test_seeding(space):
    """Verify that seeding makes sampling deterministic"""
    random_search = Random(space)

    random_search.seed_rng(1)
    a = random_search.suggest(1)[0]
    assert not numpy.allclose(a, random_search.suggest(1)[0])

    random_search.seed_rng(1)
    assert numpy.allclose(a, random_search.suggest(1)[0])
Exemple #2
0
def test_suggest_unique():
    """Verify that RandomSearch do not sample duplicates"""
    space = Space()
    space.register(Integer('yolo1', 'uniform', -3, 6))

    random_search = Random(space)

    n_samples = 6
    values = sum(random_search.suggest(n_samples), tuple())
    assert len(values) == n_samples
    assert len(set(values)) == n_samples
Exemple #3
0
def test_set_state(space):
    """Verify that resetting state makes sampling deterministic"""
    random_search = Random(space)

    random_search.seed_rng(1)
    state = random_search.state_dict
    a = random_search.suggest(1)[0]
    assert not numpy.allclose(a, random_search.suggest(1)[0])

    random_search.set_state(state)
    assert numpy.allclose(a, random_search.suggest(1)[0])
Exemple #4
0
def test_suggest_unique_history():
    """Verify that RandomSearch do not sample duplicates based observed points"""
    space = Space()
    space.register(Integer('yolo1', 'uniform', -3, 6))

    random_search = Random(space)

    n_samples = 3
    values = sum(random_search.suggest(n_samples), tuple())
    assert len(values) == n_samples
    assert len(set(values)) == n_samples

    random_search.observe([[value] for value in values], [1] * n_samples)

    n_samples = 3
    new_values = sum(random_search.suggest(n_samples), tuple())
    assert len(new_values) == n_samples
    assert len(set(new_values)) == n_samples
    # No duplicates
    assert (set(new_values) & set(values)) == set()
Exemple #5
0
    def __init__(
        self,
        space,
        seed=None,
        population_size=50,
        generations=10,
        exploit=None,
        explore=None,
        fork_timeout=60,
    ):
        if exploit is None:
            exploit = {
                "of_type": "PipelineExploit",
                "exploit_configs": [
                    {
                        "of_type": "BacktrackExploit",
                        "min_forking_population": 5,
                        "truncation_quantile": 0.9,
                        "candidate_pool_ratio": 0.2,
                    },
                    {
                        "of_type": "TruncateExploit",
                        "min_forking_population": 5,
                        "truncation_quantile": 0.8,
                        "candidate_pool_ratio": 0.2,
                    },
                ],
            }

        if explore is None:
            explore = {
                "of_type": "PipelineExplore",
                "explore_configs": [
                    {"of_type": "ResampleExplore", "probability": 0.2},
                    {"of_type": "PerturbExplore", "factor": 1.2, "volatility": 0.0001},
                ],
            }

        self.random_search = Random(space)
        self._queue = []

        fidelity_index = self.fidelity_index
        if fidelity_index is None:
            raise RuntimeError(SPACE_ERROR)

        self.fidelity_dim = space[fidelity_index]

        self.fidelities = compute_fidelities(
            generations,
            self.fidelity_dim.low,
            self.fidelity_dim.high,
            self.fidelity_dim.base,
        )
        self.fidelity_upgrades = {
            a: b for a, b in zip(self.fidelities, self.fidelities[1:])
        }
        logger.info("Executing PBT with fidelities: %s", self.fidelities)

        self.exploit_func = exploit_factory.create(**exploit)
        self.explore_func = explore_factory.create(**explore)

        self.lineages = Lineages()
        self._lineage_dropped_head = {}

        super(PBT, self).__init__(
            space,
            seed=seed,
            population_size=population_size,
            generations=generations,
            exploit=exploit,
            explore=explore,
            fork_timeout=fork_timeout,
        )
Exemple #6
0
    def __init__(
        self,
        space: Space,
        seed: int | Sequence[int] | None = None,
        population_size: int = 50,
        generations: int = 10,
        exploit: dict | None = None,
        explore: dict | None = None,
        fork_timeout: int = 60,
    ):
        if exploit is None:
            exploit = {
                "of_type":
                "PipelineExploit",
                "exploit_configs": [
                    {
                        "of_type": "BacktrackExploit",
                        "min_forking_population": 5,
                        "truncation_quantile": 0.9,
                        "candidate_pool_ratio": 0.2,
                    },
                    {
                        "of_type": "TruncateExploit",
                        "min_forking_population": 5,
                        "truncation_quantile": 0.8,
                        "candidate_pool_ratio": 0.2,
                    },
                ],
            }

        if explore is None:
            explore = {
                "of_type":
                "PipelineExplore",
                "explore_configs": [
                    {
                        "of_type": "ResampleExplore",
                        "probability": 0.2
                    },
                    {
                        "of_type": "PerturbExplore",
                        "factor": 1.2,
                        "volatility": 0.0001
                    },
                ],
            }

        self.random_search = Random(space)
        self._queue: list[Trial] = []

        fidelity_index = self.fidelity_index
        if fidelity_index is None:
            raise RuntimeError(SPACE_ERROR)

        fidelity_dim = space[fidelity_index]
        while isinstance(fidelity_dim, TransformedDimension):
            fidelity_dim = fidelity_dim.original_dimension
        assert isinstance(fidelity_dim, Fidelity)
        self.fidelity_dim = fidelity_dim

        self.fidelities = compute_fidelities(
            generations,
            self.fidelity_dim.low,
            self.fidelity_dim.high,
            self.fidelity_dim.base,
        )
        self.fidelity_upgrades = dict(zip(self.fidelities,
                                          self.fidelities[1:]))
        logger.info("Executing PBT with fidelities: %s", self.fidelities)

        self.exploit_func = exploit_factory.create(**exploit)
        self.explore_func = explore_factory.create(**explore)

        self.lineages = Lineages()

        super().__init__(space)
        self.seed = seed
        self.population_size = population_size
        self.generations = generations
        self.exploit = exploit
        self.explore = explore
        self.fork_timeout = fork_timeout
        if seed is not None:
            self.seed_rng(seed=seed)