SurrogateModelOptim is a Julia package for the optimisation of expensive functions. The surrogate model is based on an ensemble of Radial Basis Function interpolants with adaptive axis scaling.
The package is registered and can be installed with Pkg.add
.
julia> Pkg.add("SurrogateModelOptim")
This package is intended to be used for functions which are expensive. Expensive is in this case considered a function that evaluates in several minutes to days. The simplest form of usage is as follows.
julia> using SurrogateModelOptim
julia> rosenbrock_2D(x) = (1.0 - x[1])^2 + 100.0 * (x[2] - x[1]^2)^2
julia> search_range=[(-5.0,5.0),(-5.0,5.0)]
julia> smoptimize(rosenbrock_2D, search_range)
There are many options accessible through the options interface. The target is to minimize the function value. The model is created from a Latin Hypercube sampling plan. Several Radial Basis Function surrogate models are fitted to the data where the ensemble of surrogates is used to predict new design locations. New designs are added in an alternating fashion between the predicted minimum and the largest standard deviation of the surrogate predictions.
Due to the high cost of creating several surrogates it is highly advisable to create
the surrogate model in parallel. Start julia in parallel with > julia -p x
where x
is the number of available cores. The previous example can then be run as
julia> result = smoptimize(rosenbrock_2D, search_range;
options=SurrogateModelOptim.Options(
iterations=25,
num_interpolants=N*x, #Where N is an integer number
num_start_samples=5,
));
num_interpolants=10
meaning that the surrogate model ensemble contains 10 RBF interpolants
has shown good performance for a variety of functions.
- STABLE — tagged version of the documentation.
- Magnus Urquhart - @MrUrq
TBD