Skip to content

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,
    )