Skip to content

from collections import Counter#

Expand to copy examples/1_basics/bug.py (top right)

Description#

from smac.initial_design import LatinHypercubeInitialDesign, RandomInitialDesign, \ AbstractInitialDesign

from typing import Callable

from smac.scenario import Scenario

def make_scenario() -> Callable: def _make( configspace: ConfigurationSpace, deterministic: bool = False, use_multi_objective: bool = False, n_objectives: int = 2, use_instances: bool = False, n_instances: int = 3, n_instance_features: int = 3, min_budget: int = 2, max_budget: int = 5, n_workers: int = 1, n_trials: int = 100, use_default_config: bool = False, ) -> Scenario: objectives = "cost" if use_multi_objective: objectives = [] for i in range(n_objectives): objectives.append(f"cost{i+1}")

    instances = None
    instance_features = None
    if use_instances and n_instances > 0:
        instances = []
        instance_features = {}
        for i in range(n_instances):
            instance_name = f"i{i+1}"
            instances += [instance_name]
            instance_features[instance_name] = [j + i for j in range(n_instance_features)]

    return Scenario(
        configspace=configspace,
        name="test",
        output_directory="smac3_output_test",
        objectives=objectives,
        deterministic=deterministic,
        walltime_limit=30,
        n_trials=n_trials,
        n_workers=n_workers,
        instances=instances,
        instance_features=instance_features,
        min_budget=min_budget,
        max_budget=max_budget,
        use_default_config=use_default_config
    )

return _make

from ConfigSpace import ( Categorical, ConfigurationSpace, EqualsCondition, Float, InCondition, Integer, )

def _make( configspace: ConfigurationSpace, deterministic: bool = False, use_multi_objective: bool = False, n_objectives: int = 2, use_instances: bool = False, n_instances: int = 3, n_instance_features: int = 3, min_budget: int = 2, max_budget: int = 5, n_workers: int = 1, n_trials: int = 100, use_default_config: bool = False, ) -> Scenario: objectives = "cost" if use_multi_objective: objectives = [] for i in range(n_objectives): objectives.append(f"cost{i + 1}")

instances = None
instance_features = None
if use_instances and n_instances > 0:
    instances = []
    instance_features = {}
    for i in range(n_instances):
        instance_name = f"i{i + 1}"
        instances += [instance_name]
        instance_features[instance_name] = [j + i for j in range(n_instance_features)]

return Scenario(
    configspace=configspace,
    name="test",
    output_directory="smac3_output_test",
    objectives=objectives,
    deterministic=deterministic,
    walltime_limit=30,
    n_trials=n_trials,
    n_workers=n_workers,
    instances=instances,
    instance_features=instance_features,
    min_budget=min_budget,
    max_budget=max_budget,
    use_default_config=use_default_config
)

def configspace_small() -> ConfigurationSpace: cs = ConfigurationSpace(seed=0)

a = Integer("a", (1, 10000), default=1)
b = Float("b", (1e-5, 1e-1), log=True, default=1e-1)
c = Categorical("c", ["cat", "dog", "mouse"], default="cat")

# Add all hyperparameters at once:
cs.add_hyperparameters([a, b, c])

return cs

print(_make(configspace_small()))

TEST 1#

scenario = _make(configspace_small(), use_default_config=True)

dc = AbstractInitialDesign( scenario=scenario, n_configs=15, ) print(f'use_default_config: {scenario.use_default_config}')

if use_default_config is True, then the default config should be included in the additional_configs#

default_config = scenario.configspace.get_default_configuration() assert default_config in dc._additional_configs

del scenario

TEST 2#

scenario2 = _make(configspace_small(), use_default_config=False)

initial_design = LatinHypercubeInitialDesign( scenario=scenario2, n_configs=54, max_ratio=1, ) print(f'use_default_config: {scenario2.use_default_config}') print(f'additional configs: {len(initial_design._additional_configs)}') configs = initial_design.select_configurations()

print(Counter([c.origin for c in configs]))

assert len(configs) == 54