from collections import Counter#
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