跳到内容

抽象采集函数最大化器

smac.acquisition.maximizer.abstract_acquisition_maximizer #

AbstractAcquisitionMaximizer #

AbstractAcquisitionMaximizer(
    configspace: ConfigurationSpace,
    acquisition_function: AbstractAcquisitionFunction
    | None = None,
    challengers: int = 5000,
    seed: int = 0,
)

采集函数最大化的抽象类。

要使用此类,必须继承它并实现 _maximize 方法。

参数#

configspace : ConfigurationSpace acquisition_function : AbstractAcquisitionFunction challengers : int, 默认为 5000 优化过程中采样的配置数量,具体取决于使用的最大化器。也是调用 maximize 返回的配置数量。 seed : int, 默认为 0

源代码位于 smac/acquisition/maximizer/abstract_acquisition_maximizer.py
def __init__(
    self,
    configspace: ConfigurationSpace,
    acquisition_function: AbstractAcquisitionFunction | None = None,
    challengers: int = 5000,
    seed: int = 0,
):
    self._configspace = configspace
    self._acquisition_function = acquisition_function
    self._challengers = challengers
    self._seed = seed
    self._rng = np.random.RandomState(seed=seed)

acquisition_function property writable #

acquisition_function: AbstractAcquisitionFunction | None

用于最大化的采集函数。

meta property #

meta: dict[str, Any]

返回创建对象的元数据。

maximize #

maximize(
    previous_configs: list[Configuration],
    n_points: int | None = None,
    random_design: AbstractRandomDesign | None = None,
) -> Iterator[Configuration]

使用子类实现的 _maximize 方法最大化采集函数。

参数#

previous_configs: list[Configuration] 之前评估过的配置。 n_points: int, 默认为 None 要采样的点数和要返回的配置数量。如果未指定 n_points,则使用 self._challengers。语义取决于具体实现。 random_design: AbstractRandomDesign, 默认为 None 返回的 ChallengerList 的一部分,以便我们可以按照随机设计定义的方案交错插入随机配置。在此函数的末尾调用 random_design.next_iteration() 方法。

返回值#

challengers : Iterator[Configuration] 一个由配置组成的可迭代对象。

源代码位于 smac/acquisition/maximizer/abstract_acquisition_maximizer.py
def maximize(
    self,
    previous_configs: list[Configuration],
    n_points: int | None = None,
    random_design: AbstractRandomDesign | None = None,
) -> Iterator[Configuration]:
    """Maximize acquisition function using `_maximize`, implemented by a subclass.

    Parameters
    ----------
    previous_configs: list[Configuration]
        Previous evaluated configurations.
    n_points: int, defaults to None
        Number of points to be sampled & number of configurations to be returned. If `n_points` is not specified,
        `self._challengers` is used. Semantics depend on concrete implementation.
    random_design: AbstractRandomDesign, defaults to None
        Part of the returned ChallengerList such that we can interleave random configurations
        by a scheme defined by the random design. The method `random_design.next_iteration()`
        is called at the end of this function.

    Returns
    -------
    challengers : Iterator[Configuration]
        An iterable consisting of configurations.
    """
    if n_points is None:
        n_points = self._challengers

    def next_configs_by_acquisition_value() -> list[Configuration]:
        assert n_points is not None
        # since maximize returns a tuple of acquisition value and configuration,
        # and we only need the configuration, we return the second element of the tuple
        # for each element in the list
        return [t[1] for t in self._maximize(previous_configs, n_points)]

    challengers = ChallengerList(
        self._configspace,
        next_configs_by_acquisition_value,
        random_design,
    )

    if random_design is not None:
        random_design.next_iteration()

    return challengers