Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
# Bayesian Optimization

![tests](https://github.com/bayesian-optimization/BayesianOptimization/actions/workflows/run_tests.yml/badge.svg)
[![docs - stable](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fraw.githubusercontent.com%2Fbayesian-optimization%2FBayesianOptimization%2Fgh-pages%2Fversions.json&query=%24%5B%3F(%40.aliases%20%26%26%20%40.aliases.indexOf('stable')%20%3E%20-1)%5D.version&prefix=stable%20(v&suffix=)&label=docs)](https://bayesian-optimization.github.io/BayesianOptimization/)
[![docs - stable](https://img.shields.io/badge/docs-stable-blue)](https://bayesian-optimization.github.io/BayesianOptimization/index.html)
[![Codecov](https://codecov.io/github/bayesian-optimization/BayesianOptimization/badge.svg?branch=master&service=github)](https://codecov.io/github/bayesian-optimization/BayesianOptimization?branch=master)
[![Pypi](https://img.shields.io/pypi/v/bayesian-optimization.svg)](https://pypi.python.org/pypi/bayesian-optimization)
![PyPI - Python Version](https://img.shields.io/pypi/pyversions/bayesian-optimization)
Expand Down
10 changes: 5 additions & 5 deletions bayes_opt/acquisition.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
from bayes_opt.target_space import TargetSpace

if TYPE_CHECKING:
from collections.abc import Callable
from collections.abc import Callable, Sequence

from numpy.typing import NDArray
from scipy.optimize import OptimizeResult
Expand Down Expand Up @@ -906,18 +906,18 @@ class GPHedge(AcquisitionFunction):

Parameters
----------
base_acquisitions : List[AcquisitionFunction]
List of base acquisition functions.
base_acquisitions : Sequence[AcquisitionFunction]
Sequence of base acquisition functions.

random_state : int, RandomState, default None
Set the random state for reproducibility.
"""

def __init__(
self, base_acquisitions: list[AcquisitionFunction], random_state: int | RandomState | None = None
self, base_acquisitions: Sequence[AcquisitionFunction], random_state: int | RandomState | None = None
) -> None:
super().__init__(random_state)
self.base_acquisitions = base_acquisitions
self.base_acquisitions = list(base_acquisitions)
self.n_acq = len(self.base_acquisitions)
self.gains = np.zeros(self.n_acq)
self.previous_candidates = None
Expand Down
18 changes: 7 additions & 11 deletions bayes_opt/bayesian_optimization.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
from bayes_opt.util import ensure_rng

if TYPE_CHECKING:
from collections.abc import Callable, Iterable, Mapping, Sequence
from collections.abc import Callable, Iterable, Mapping

import numpy as np
from numpy.random import RandomState
Expand All @@ -31,6 +31,7 @@
from bayes_opt.acquisition import AcquisitionFunction
from bayes_opt.constraint import ConstraintModel
from bayes_opt.domain_reduction import DomainTransformer
from bayes_opt.parameter import BoundsMapping, ParamsType

Float = np.floating[Any]

Expand Down Expand Up @@ -114,7 +115,7 @@ def __init__(
):
self._random_state = ensure_rng(random_state)
self._allow_duplicate_points = allow_duplicate_points
self._queue: deque[Mapping[str, float] | Sequence[float] | NDArray[Float]] = deque()
self._queue: deque[ParamsType] = deque()

if acquisition_function is None:
if constraint is None:
Expand Down Expand Up @@ -203,10 +204,7 @@ def res(self) -> list[dict[str, Any]]:
return self._space.res()

def register(
self,
params: Mapping[str, float] | Sequence[float] | NDArray[Float],
target: float,
constraint_value: float | NDArray[Float] | None = None,
self, params: ParamsType, target: float, constraint_value: float | NDArray[Float] | None = None
) -> None:
"""Register an observation with known target.

Expand All @@ -224,9 +222,7 @@ def register(
self._space.register(params, target, constraint_value)
self.dispatch(Events.OPTIMIZATION_STEP)

def probe(
self, params: Mapping[str, float] | Sequence[float] | NDArray[Float], lazy: bool = True
) -> None:
def probe(self, params: ParamsType, lazy: bool = True) -> None:
"""Evaluate the function at the given points.

Useful to guide the optimizer.
Expand All @@ -246,7 +242,7 @@ def probe(
self._space.probe(params)
self.dispatch(Events.OPTIMIZATION_STEP)

def suggest(self) -> dict[str, float]:
def suggest(self) -> dict[str, float | NDArray[Float]]:
"""Suggest a promising point to probe next."""
if len(self._space) == 0:
return self._space.array_to_params(self._space.random_sample(random_state=self._random_state))
Expand Down Expand Up @@ -321,7 +317,7 @@ def maximize(self, init_points: int = 5, n_iter: int = 25) -> None:

self.dispatch(Events.OPTIMIZATION_END)

def set_bounds(self, new_bounds: Mapping[str, NDArray[Float] | Sequence[float]]) -> None:
def set_bounds(self, new_bounds: BoundsMapping) -> None:
"""Modify the bounds of the search space.

Parameters
Expand Down
2 changes: 1 addition & 1 deletion bayes_opt/constraint.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ def __init__(
fun: Callable[..., float] | Callable[..., NDArray[Float]] | None,
lb: float | NDArray[Float],
ub: float | NDArray[Float],
transform=None,
transform: Callable[[Any], Any] | None = None,
random_state: int | RandomState | None = None,
) -> None:
self.fun = fun
Expand Down
12 changes: 7 additions & 5 deletions bayes_opt/domain_reduction.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from __future__ import annotations

from abc import ABC, abstractmethod
from collections.abc import Iterable, Mapping, Sequence
from typing import TYPE_CHECKING, Any
from warnings import warn

Expand All @@ -16,8 +17,6 @@
from bayes_opt.target_space import TargetSpace

if TYPE_CHECKING:
from collections.abc import Iterable, Mapping, Sequence

from numpy.typing import NDArray

Float = np.floating[Any]
Expand Down Expand Up @@ -67,14 +66,16 @@ def __init__(
gamma_osc: float = 0.7,
gamma_pan: float = 1.0,
eta: float = 0.9,
minimum_window: NDArray[Float] | Sequence[float] | float | Mapping[str, float] | None = 0.0,
minimum_window: NDArray[Float] | Sequence[float] | Mapping[str, float] | float = 0.0,
) -> None:
# TODO: Ensure that this is only applied to continuous parameters
self.parameters = parameters
self.gamma_osc = gamma_osc
self.gamma_pan = gamma_pan
self.eta = eta
if isinstance(minimum_window, dict):

self.minimum_window_value: NDArray[Float] | Sequence[float] | float
if isinstance(minimum_window, Mapping):
self.minimum_window_value = [
item[1] for item in sorted(minimum_window.items(), key=lambda x: x[0])
]
Expand All @@ -93,8 +94,9 @@ def initialize(self, target_space: TargetSpace) -> None:
self.original_bounds = np.copy(target_space.bounds)
self.bounds = [self.original_bounds]

self.minimum_window: NDArray[Float] | Sequence[float]
# Set the minimum window to an array of length bounds
if isinstance(self.minimum_window_value, (list, np.ndarray)):
if isinstance(self.minimum_window_value, (Sequence, np.ndarray)):
if len(self.minimum_window_value) != len(target_space.bounds):
error_msg = "Length of minimum_window must be the same as the number of parameters"
raise ValueError(error_msg)
Expand Down
Loading