The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
A lightweight R interface to the libcmaes C++ library for covariance matrix adaptation evolution strategy (CMA-ES). It allows for the optimization of black-box functions using the CMA-ES algorithm and its variants.
A patched copy of libcmaes is bundled with the package, so no system dependencies are needed beyond a standard C++ toolchain (Eigen headers are provided by the RcppEigen package at build time).
Install the released version from CRAN with:
install.packages("libcmaesr")Or install the development version from GitHub with:
# install.packages("pak")
pak::pak("mlr-org/libcmaesr")This is a basic example which shows you how to solve a common test
problem, the sphere function. The objective function receives a numeric
vector and returns a single number. cmaes_control()
collects the settings of the algorithm, and cmaes() runs
the optimization.
library(libcmaesr)
fn = function(x) sum(x^2)
dim = 3
x0 = rep(0.5, dim)
lower = rep(-1, dim)
upper = rep(1, dim)
control = cmaes_control(algo = "bipop", max_fevals = 5000 * dim, seed = 123, lambda = 5)
res = cmaes(fn, x0, lower, upper, control)
res$x
#> [1] -1.102e-09 -4.948e-10 1.933e-09
res$y
#> [1] 5.195e-18
res$status_msg
#> [1] "[Success] The optimization has converged"Set batch = TRUE to evaluate a whole generation at once.
The objective function then receives a matrix with lambda
rows and one column per dimension, and returns one objective value per
row. This is useful when the evaluation can be vectorized or
parallelized.
fn_batch = function(x) rowSums(x^2)
control = cmaes_control(algo = "acmaes", max_fevals = 1000, seed = 123, lambda = 10)
res = cmaes(fn_batch, x0, lower, upper, control, batch = TRUE)
res$y
#> [1] 2.185e-16The variant is selected with the algo argument of
cmaes_control(). The default is "acmaes", as
recommended by the libcmaes
practical hints. For multimodal problems, "ipop" or
"bipop" are usually the better choice.
cmaes_algos
#> [1] "cmaes" "ipop" "bipop" "acmaes" "aipop" "abipop" "sepcmaes"
#> [8] "sepipop" "sepbipop" "sepacmaes" "sepaipop" "sepabipop" "vdcma" "vdipopcma"
#> [15] "vdbipopcma"These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.