from __future__ import annotations
from abc import ABC, abstractmethod
from typing import Any
__copyright__ = "Copyright 2022, automl.org"
__license__ = "3-clause BSD"
[docs]
class AbstractMultiObjectiveAlgorithm(ABC):
    """A general interface for multi-objective optimizer, depending on different strategies."""
    def __init__(self) -> None:
        pass
    @property
    def meta(self) -> dict[str, Any]:
        """Returns the meta data of the created object."""
        return {"name": self.__class__.__name__}
[docs]
    def update_on_iteration_start(self) -> None:
        """Update the internal state on start of each SMBO iteration."""
        pass 
[docs]
    @abstractmethod
    def __call__(self, values: list[float]) -> float:
        """Transform a multi-objective loss to a single loss.
        Parameters
        ----------
        values : list[float]
            Normalized values in the range [0, 1].
        Returns
        -------
        cost : float
            Combined cost.
        """
        raise NotImplementedError