A surrogate model is an approximation method that mimics the behavior of a computationally
expensive simulation. In more mathematical terms: suppose we are attempting to optimize a function
f(p), but each calculation of f is very expensive. It may be the case we need to solve a PDE for each point or use advanced numerical linear algebra machinery, which is usually costly. The idea is then to develop a surrogate model g which approximates f by training on previous data collected from evaluations of f.
The construction of a surrogate model can be seen as a three-step process:
- Sample selection
 - Construction of the surrogate model
 - Surrogate optimization
 
Sampling can be done through QuasiMonteCarlo.jl, all the functions available there can be used in Surrogates.jl.
- Kriging
 - Kriging using Stheno
 - Radial Basis
 - Wendland
 - Linear
 - Second Order Polynomial
 - Support Vector Machines (Wait for LIBSVM resolution)
 - Neural Networks
 - Random Forests
 - Lobachevsky
 - Inverse-distance
 - Polynomial expansions
 - Variable fidelity
 - Mixture of experts (Waiting GaussianMixtures package to work on v1.5)
 - Earth
 - Gradient Enhanced Kriging
 
- SRBF
 - LCBS
 - DYCORS
 - EI
 - SOP
 - Multi-optimization: SMB and RTEA
 
using Pkg
Pkg.add("Surrogates")