Himmelblau Benchmark

Imports

import os

import pandas as pd

import bofire.strategies.api as strategies
from bofire.benchmarks.single import Hartmann
from bofire.data_models.acquisition_functions.api import qLogEI
from bofire.data_models.api import Domain
from bofire.data_models.strategies.api import (
    BotorchOptimizer,
    RandomStrategy,
    SoboStrategy,
)
from bofire.runners.api import run


SMOKE_TEST = os.environ.get("SMOKE_TEST")

Random Optimization

def sample(domain):
    datamodel = RandomStrategy(domain=domain)
    sampler = strategies.map(data_model=datamodel)
    sampled = sampler.ask(10)
    return sampled


def best(domain: Domain, experiments: pd.DataFrame) -> float:
    return experiments.y.min()


random_results = run(
    Hartmann(dim=6, allowed_k=4),
    strategy_factory=lambda domain: strategies.map(RandomStrategy(domain=domain)),
    n_iterations=50 if not SMOKE_TEST else 1,
    metric=best,
    initial_sampler=sample,
    n_runs=1,
    n_procs=1,
)
  0%|          | 0/1 [00:00<?, ?it/s]Run 0:   0%|          | 0/1 [00:00<?, ?it/s]Run 0:   0%|          | 0/1 [00:00<?, ?it/s, Current Best:=-0.701]Run 0: 100%|██████████| 1/1 [00:00<00:00, 41.06it/s, Current Best:=-0.701]

SOBO (GPEI) Optimization

def strategy_factory(domain: Domain):
    data_model = SoboStrategy(
        domain=domain,
        acquisition_function=qLogEI(),
        acquisition_optimizer=BotorchOptimizer(n_raw_samples=512, n_restarts=24),
    )
    return strategies.map(data_model)


bo_results = run(
    Hartmann(dim=6, allowed_k=4),
    strategy_factory=strategy_factory,
    n_iterations=50 if not SMOKE_TEST else 1,
    metric=best,
    initial_sampler=sample,
    n_runs=1,
    n_procs=1,
)
  0%|          | 0/1 [00:00<?, ?it/s]/opt/hostedtoolcache/Python/3.12.12/x64/lib/python3.12/site-packages/botorch/optim/optimize.py:789: RuntimeWarning:

Optimization failed in `gen_candidates_scipy` with the following warning(s):
[OptimizationWarning('Optimization failed within `scipy.optimize.minimize` with status 5 and message Singular matrix E in LSQ subproblem.'), OptimizationWarning('Optimization failed within `scipy.optimize.minimize` with status 4 and message Inequality constraints incompatible.')]
Trying again with a new set of initial conditions.

/opt/hostedtoolcache/Python/3.12.12/x64/lib/python3.12/site-packages/botorch/optim/optimize.py:789: RuntimeWarning:

Optimization failed on the second try, after generating a new set of initial conditions.

Run 0:   0%|          | 0/1 [00:18<?, ?it/s]Run 0:   0%|          | 0/1 [00:18<?, ?it/s, Current Best:=-1.291]Run 0: 100%|██████████| 1/1 [00:18<00:00, 18.33s/it, Current Best:=-1.291]Run 0: 100%|██████████| 1/1 [00:18<00:00, 18.33s/it, Current Best:=-1.291]