Space Filling Optimizer
The SpaceFilling
optimizer is a
Sobol sequence based optimizer that
covers the search space based on a quasi-random low-discrepancy sequence.
This strategy requires a larger budget for evaluations but can be a good initial
approach to get to know the optimization problem at hand.
While this implementation follows the overall interface including the specification and
reporting of objectives and their values, the actual objective values are
inconsequential for the underlying Sobol sequence and do not guide the optimization.
Reference
blackboxopt.optimizers.space_filling
SpaceFilling (MultiObjectiveOptimizer)
Sobol sequence based, space filling optimizer.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
search_space |
ParameterSpace |
The search space to optimize |
required |
objectives |
List[blackboxopt.base.Objective] |
The objectives of the optimization |
required |
seed |
int |
The sobol sequence is Owen scrambled and can be seeded for reproducibility |
None |
Source code in blackboxopt/optimizers/space_filling.py
class SpaceFilling(MultiObjectiveOptimizer):
"""Sobol sequence based, space filling optimizer.
Args:
search_space: The search space to optimize
objectives: The objectives of the optimization
seed: The sobol sequence is Owen scrambled and can be seeded for reproducibility
"""
def __init__(
self,
search_space: ParameterSpace,
objectives: List[Objective],
seed: int = None,
) -> None:
super().__init__(search_space=search_space, objectives=objectives, seed=seed)
self.sobol = Sobol(d=len(self.search_space), scramble=True, seed=seed)
def generate_evaluation_specification(self) -> EvaluationSpecification:
vector = self.sobol.random().flatten()
configuration = self.search_space.from_numerical(vector)
return EvaluationSpecification(configuration=configuration)
generate_evaluation_specification(self)
Get next configuration and settings to evaluate.
Exceptions:
Type | Description |
---|---|
OptimizationComplete |
When the optimization run is finished, e.g. when the budget has been exhausted. |
OptimizerNotReady |
When the optimizer is not ready to propose a new evaluation specification. |
Source code in blackboxopt/optimizers/space_filling.py
def generate_evaluation_specification(self) -> EvaluationSpecification:
vector = self.sobol.random().flatten()
configuration = self.search_space.from_numerical(vector)
return EvaluationSpecification(configuration=configuration)
report(self, evaluations)
inherited
Report one or more evaluated evaluation specifications.
NOTE: Not all optimizers support reporting results for evaluation specifications that were not proposed by the optimizer.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
evaluations |
Union[blackboxopt.evaluation.Evaluation, Iterable[blackboxopt.evaluation.Evaluation]] |
A single evaluated evaluation specifications, or an iterable of many. |
required |
Source code in blackboxopt/optimizers/space_filling.py
def report(self, evaluations: Union[Evaluation, Iterable[Evaluation]]) -> None:
_evals = [evaluations] if isinstance(evaluations, Evaluation) else evaluations
call_functions_with_evaluations_and_collect_errors(
[functools.partial(validate_objectives, objectives=self.objectives)],
_evals,
)