Surrogate
Every surrogate has a different definition depending on the parameters needed. However, they have in common:
add_point!(::AbstractSurrogate,x_new,y_new)
AbstractSurrogate(value)
The first function adds a sample point to the surrogate, thus changing the internal coefficients. The second one calculates the approximation at value.
- Linear surrogate
Surrogates.LinearSurrogate
— MethodLinearSurrogate(x,y,lb,ub)
Builds a linear surrogate using GLM.jl
- Radial basis function surrogate
Surrogates.RadialBasis
— MethodRadialBasis(x,y,bounds,phi::Function,q::Int)
Constructor for RadialBasis surrogate
- (x,y): sampled points
- bounds: region of interest of the form [[a,b],[c,d],...,[w,z]]
- phi: radial basis of choice
- q: number of polynomial elements
- Kriging surrogate
Surrogates.Kriging
— MethodKriging(x,y,p,theta)
Constructor for Kriging surrogate.
- (x,y): sampled points
- p: array of values 0<=p<2 modelling the smoothness of the function being approximated in the i-th variable. low p -> rough, high p -> smooth
- theta: array of values > 0 modellig how much the function is changing in the i-th variable
- Kriging surrogate based on a Stheno backend
Surrogates.SthenoKriging
— TypeSthenoKriging(x::X, y::Y, GP::Stheno.GP=Stheno.GP(Stheno.EQ(), Stheno.GPC()), σ²=1e-18)
Returns a Kriging (or Gaussian process) surrogate conditioned on the data points x
and y
. The GP
is the base Gaussian process defined with Stheno.
Arguments
x::X
: Vector containing the observation pointsy::Y
: Vector containing the observed pointsGP::Stheno.GP
: The base Gaussian process used to condition over. A simple prior is
provided as default. If there are multiple observation dimensions, a Tuple
of Gaussian processes can be passed, otherwise the same process is used across all dimensions.
σ²
=1e-18: Variance of the observation noise, default is equivalent to no noise
function (k::SthenoKriging)(val)
Gives the mean predicted value for the SthenoKriging
object.
- Lobachesky surrogate
Surrogates.LobacheskySurrogate
— MethodLobacheskySurrogate(x,y,alpha,n::Int,lb,ub)
Build the Lobachesky surrogate with parameters alpha and n.
Surrogates.lobachesky_integral
— Methodlobachesky_integral(loba::LobacheskySurrogate,lb,ub)
Calculates the integral of the Lobachesky surrogate, which has a closed form.
- Support vector machine surrogate, requires
using LIBSVM
Currently unavailable due to problems with LIBSVM
- Random forest surrogate, requires
using XGBoost
Surrogates.RandomForestSurrogate
— MethodRandomForestSurrogate(x,y,lb,ub,num_round)
Build Random forest surrogate. num_round is the number of trees.
- Neural network surrogate, requires
using Flux
Surrogates.NeuralSurrogate
— MethodNeuralSurrogate(x,y,lb,ub,model,loss,opt,n_echos)
- model: Flux layers
- loss: loss function
- opt: optimization function
Creating another surrogate
It's great that you want to add another surrogate to the library! You will need to:
- Define a new mutable struct and a constructor function
- Define add_point!(your_surrogate::AbstactSurrogate,x_new,y_new)
- Define your_surrogate(value) for the approximation
Example
mutable struct NewSurrogate{X,Y,L,U,C,A,B} <: AbstractSurrogate
x::X
y::Y
lb::L
ub::U
coeff::C
alpha::A
beta::B
end
function NewSurrogate(x,y,lb,ub,parameters)
...
return NewSurrogate(x,y,lb,ub,calculated\_coeff,alpha,beta)
end
function add_point!(NewSurrogate,x\_new,y\_new)
nothing
end
function (s::NewSurrogate)(value)
return s.coeff*value + s.alpha
end