Source code for pyvbmc.acquisition_functions.acq_fcn_log

import sys

import gpyreg as gpr
import numpy as np

from pyvbmc.function_logger import FunctionLogger
from pyvbmc.variational_posterior import VariationalPosterior

from .abstract_acq_fcn import AbstractAcqFcn


[docs] class AcqFcnLog(AbstractAcqFcn): """ Acquisition function for prospective uncertainty search (log-valued). """ def __init__(self): super().__init__() self.acq_info["log_flag"] = True def _compute_acquisition_function( self, Xs: np.ndarray, vp: VariationalPosterior, gp: gpr.GP, function_logger: FunctionLogger, optim_state: dict, f_mu: np.ndarray, f_s2: np.ndarray, f_bar: np.ndarray, var_tot: np.ndarray, ): """ Compute the value of the acquisition function. """ # Xs is in *transformed* coordinates # Probability density of variational posterior at test points realmin = sys.float_info.min log_p = np.ravel( np.maximum( vp.pdf(Xs, orig_flag=False, log_flag=True), np.log(realmin) ) ) # Log prospective uncertainty search z = function_logger.y_max acq = -(np.log(var_tot) + f_bar - z + log_p) return acq