Source code for UQpy.sampling.adaptive_kriging_functions.ExpectedImprovementGlobalFit

from UQpy.sampling.adaptive_kriging_functions.baseclass.LearningFunction import (
    LearningFunction,
)
import numpy as np
from sklearn.neighbors import NearestNeighbors


[docs]class ExpectedImprovementGlobalFit(LearningFunction): """ Expected Improvement for Global Fit (EIGF) learning function. See :cite:`AKMCS5` for a detailed explanation. """ def evaluate_function( self, distributions, n_add, surrogate, population, qoi=None, samples=None ): g, sig = surrogate.predict(population, True) # Remove the inconsistency in the shape of 'g' and 'sig' array g = g.reshape([population.shape[0], 1]) sig = sig.reshape([population.shape[0], 1]) # Evaluation of the learning function # First, find the nearest neighbor in the training set for each point in the population. knn = NearestNeighbors(n_neighbors=1) knn.fit(np.atleast_2d(samples)) neighbors = knn.kneighbors(np.atleast_2d(population), return_distance=False) # noinspection PyTypeChecker qoi_array = np.array([qoi[x] for x in np.squeeze(neighbors)]) # Compute the learning function at every point in the population. u = np.square(g - qoi_array) + np.square(sig) rows = u[:, 0].argsort()[(np.size(g) - n_add) :] stopping_criteria_indicator = False new_samples = population[rows, :] learning_function_evaluations = u[rows, :] return new_samples, learning_function_evaluations, stopping_criteria_indicator