Optimization via Covariance Matrix Adaptation Evolution Strategy
Source:R/OptimizerBatchCmaes.R
mlr_optimizers_cmaes.Rd
OptimizerBatchCmaes
class that implements CMA-ES. Calls adagio::pureCMAES()
from package adagio. The algorithm is typically applied to search
space dimensions between three and fifty. Lower search space dimensions might
crash.
Dictionary
This Optimizer can be instantiated via the dictionary
mlr_optimizers or with the associated sugar function opt()
:
Parameters
sigma
numeric(1)
start_values
character(1)
Create"random"
start values or based on"center"
of search space? In the latter case, it is the center of the parameters before a trafo is applied. If set to"custom"
, the start values can be passed via thestart
parameter.start
numeric()
Custom start values. Only applicable ifstart_values
parameter is set to"custom"
.
For the meaning of the control parameters, see adagio::pureCMAES()
. Note
that we have removed all control parameters which refer to the termination of
the algorithm and where our terminators allow to obtain the same behavior.
Progress Bars
$optimize()
supports progress bars via the package progressr
combined with a Terminator. Simply wrap the function in
progressr::with_progress()
to enable them. We recommend to use package
progress as backend; enable with progressr::handlers("progress")
.
Super classes
bbotk::Optimizer
-> bbotk::OptimizerBatch
-> OptimizerBatchCmaes
Examples
if (requireNamespace("adagio")) {
search_space = domain = ps(
x1 = p_dbl(-10, 10),
x2 = p_dbl(-5, 5)
)
codomain = ps(y = p_dbl(tags = "maximize"))
objective_function = function(xs) {
c(y = -(xs[[1]] - 2)^2 - (xs[[2]] + 3)^2 + 10)
}
objective = ObjectiveRFun$new(
fun = objective_function,
domain = domain,
codomain = codomain)
instance = OptimInstanceBatchSingleCrit$new(
objective = objective,
search_space = search_space,
terminator = trm("evals", n_evals = 10))
optimizer = opt("cmaes")
# modifies the instance by reference
optimizer$optimize(instance)
# returns best scoring evaluation
instance$result
# allows access of data.table of full path of all evaluations
as.data.table(instance$archive$data)
}
#> x1 x2 y x_domain timestamp batch_nr
#> <num> <num> <num> <list> <POSc> <int>
#> 1: -10.000000 -3.4852274 -134.235446 <list[2]> 2025-05-30 08:00:22 1
#> 2: 4.462792 -1.7927417 2.477185 <list[2]> 2025-05-30 08:00:22 2
#> 3: 3.996612 1.3335799 -12.766374 <list[2]> 2025-05-30 08:00:22 3
#> 4: 3.192703 -2.1698473 7.888305 <list[2]> 2025-05-30 08:00:22 4
#> 5: -1.368575 3.7848878 -47.381999 <list[2]> 2025-05-30 08:00:23 5
#> 6: 4.026872 5.0000000 -58.108210 <list[2]> 2025-05-30 08:00:23 6
#> 7: -7.555327 2.4121352 -110.595477 <list[2]> 2025-05-30 08:00:23 7
#> 8: -5.200698 -0.4365754 -48.421200 <list[2]> 2025-05-30 08:00:23 8
#> 9: -5.635132 -5.0000000 -52.295237 <list[2]> 2025-05-30 08:00:23 9
#> 10: 5.779773 -5.0000000 -8.286682 <list[2]> 2025-05-30 08:00:23 10