Abstract class for preparing data in order to train a surrogate model.
Parameters
scenario : Scenario object.
considered_states : list[StatusType], defaults to [StatusType.SUCCESS, StatusType.CRASHED, StatusType.MEMORYOUT] # noqa: E501
Trials with the passed states are considered.
lower_budget_states : list[StatusType], defaults to []
Additionally consider all trials with these states for budget < current budget.
scale_percentage : int, defaults to 5
Scaled y-transformation use a percentile to estimate distance to optimum. Only used in some sub-classes.
seed : int | None, defaults to none
Raises
TypeError
If no success states are given.
Source code in smac/runhistory/encoder/abstract_encoder.py
| def __init__(
self,
scenario: Scenario,
considered_states: list[StatusType] = None,
lower_budget_states: list[StatusType] = None,
scale_percentage: int = 5,
seed: int | None = None,
) -> None:
if considered_states is None:
considered_states = [
StatusType.SUCCESS,
StatusType.CRASHED,
StatusType.MEMORYOUT,
]
if seed is None:
seed = scenario.seed
self._seed = seed
self._rng = np.random.RandomState(seed)
self._scale_percentage = scale_percentage
self._n_objectives = scenario.count_objectives()
self._algorithm_walltime_limit = scenario.trial_walltime_limit
self._lower_budget_states = lower_budget_states if lower_budget_states is not None else []
self._considered_states = considered_states
self._instances = scenario.instances
self._instance_features = scenario.instance_features
self._n_features = scenario.count_instance_features()
self._n_params = len(list(scenario.configspace.values()))
if self._instances is not None and self._n_features == 0:
logger.warning(
"We strongly encourage to use instance features when using instances.",
"If no instance features are passed, the runhistory encoder can not distinguish between different "
"instances and therefore returns the same data points with different values, all of which are "
"used to train the surrogate model.\n"
"Consider using instance indices as features.",
)
# Learned statistics
self._min_y = np.array([np.nan] * self._n_objectives)
self._max_y = np.array([np.nan] * self._n_objectives)
self._percentile = np.array([np.nan] * self._n_objectives)
self._multi_objective_algorithm: AbstractMultiObjectiveAlgorithm | None = None
self._runhistory: RunHistory | None = None
|
meta
property
Returns the meta-data of the created object.
Returns
dict[str, Any]: meta-data of the created object: name, considered states, lower budget
states, scale_percentage, seed.
multi_objective_algorithm
property
writable
The multi objective algorithm used to transform the data.
runhistory
property
writable
The RunHistory used to transform the data.
get_configurations
get_configurations(
budget_subset: list | None = None,
) -> ndarray
Returns vector representation of the configurations.
Warning
Instance features are not
appended and cost values are not taken into account.
Parameters
budget_subset : list[int|float] | None, defaults to none
List of budgets to consider.
Returns
configs_array : np.ndarray
Source code in smac/runhistory/encoder/abstract_encoder.py
| def get_configurations(
self,
budget_subset: list | None = None,
) -> np.ndarray:
"""Returns vector representation of the configurations.
Warning
-------
Instance features are not
appended and cost values are not taken into account.
Parameters
----------
budget_subset : list[int|float] | None, defaults to none
List of budgets to consider.
Returns
-------
configs_array : np.ndarray
"""
s_trials = self._get_considered_trials(budget_subset)
s_config_ids = set(s_trial.config_id for s_trial in s_trials)
t_trials = self._get_timeout_trials(budget_subset)
t_config_ids = set(t_trial.config_id for t_trial in t_trials)
config_ids = s_config_ids | t_config_ids
configurations = [self.runhistory._ids_config[config_id] for config_id in config_ids]
configs_array = convert_configurations_to_array(configurations)
return configs_array
|
transform
Returns a vector representation of the RunHistory.
Parameters
budget_subset : list | None, defaults to none
List of budgets to consider.
Returns
X : np.ndarray
Configuration vector and instance features.
Y : np.ndarray
Cost values.
Source code in smac/runhistory/encoder/abstract_encoder.py
| def transform(
self,
budget_subset: list | None = None,
) -> tuple[np.ndarray, np.ndarray]:
"""Returns a vector representation of the RunHistory.
Parameters
----------
budget_subset : list | None, defaults to none
List of budgets to consider.
Returns
-------
X : np.ndarray
Configuration vector and instance features.
Y : np.ndarray
Cost values.
"""
logger.debug("Transforming RunHistory into X, y format...")
considered_trials = self._get_considered_trials(budget_subset)
X, Y = self._build_matrix(trials=considered_trials, store_statistics=True)
# Get real TIMEOUT runs
timeout_trials = self._get_timeout_trials(budget_subset)
# Use penalization (e.g. PAR10) for EPM training
store_statistics = True if np.any(np.isnan(self._min_y)) else False
tX, tY = self._build_matrix(trials=timeout_trials, store_statistics=store_statistics)
# If we don't have successful runs, we have to return all timeout runs
if not considered_trials:
return tX, tY
# If we do not impute, we also return TIMEOUT data
X = np.vstack((X, tX))
Y = np.concatenate((Y, tY))
logger.debug("Converted %d observations." % (X.shape[0]))
return X, Y
|
transform_response_values
abstractmethod
Transform function response values.
Parameters
values : np.ndarray
Response values to be transformed.
Returns
transformed_values : np.ndarray
Source code in smac/runhistory/encoder/abstract_encoder.py
| @abstractmethod
def transform_response_values(
self,
values: np.ndarray,
) -> np.ndarray:
"""Transform function response values.
Parameters
----------
values : np.ndarray
Response values to be transformed.
Returns
-------
transformed_values : np.ndarray
"""
raise NotImplementedError
|