Source code for pyvbmc.acquisition_functions.acq_fcn_noisy
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 AcqFcnNoisy(AbstractAcqFcn):
"""
Acquisition function for noisy prospective uncertainty search.
"""
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
p = np.ravel(np.maximum(vp.pdf(Xs, orig_flag=False), realmin))
# Estimate observation noise at test points from nearest neighbor.
sn2 = super()._estimate_observation_noise(Xs, gp, optim_state)
z = function_logger.y_max
# Prospective uncertainty search corrected for noisy observations
acq = -var_tot * (1 - sn2 / (var_tot + sn2)) * np.exp(f_bar - z) * p
return acq