import numpy as np
import matplotlib.pyplot as plt
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF
import scipy
from scipy.optimize import differential_evolution, minimize
import warnings
warnings.filterwarnings("ignore")
def target(x):
    """
    Function to optimise
    """
    f = np.sin( 3 * np.pi * x**3) - 0.5 * np.sin(8 * np.pi * x**3)
    return f
def phi(x):
    return scipy.stats.norm.pdf(x)

def Phi(x):
    return scipy.stats.norm.cdf(x)
    
# EI - to be maximised
def EI(mu, sigma, f_best):
    s = (f_best - mu)/sigma
    return (sigma*s * Phi(s) + sigma*phi(s))

# PI - to be maximised
def PI(mu, sigma,f_best):
    s = (f_best - mu)/sigma
    return (Phi(s))

# LCB - to be minimised
def LCB(mu, sigma,beta):
    return (mu - beta*sigma)