Skip to contents

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():

mlr_optimizers$get("cmaes")
opt("cmaes")

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.

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

Methods

Inherited methods


Method new()

Creates a new instance of this R6 class.

Usage


Method clone()

The objects of this class are cloneable with this method.

Usage

OptimizerBatchCmaes$clone(deep = FALSE)

Arguments

deep

Whether to make a deep clone.

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]> 2024-12-18 10:02:33        1
#>  2:   4.462792 -1.7927417    2.477185 <list[2]> 2024-12-18 10:02:33        2
#>  3:   3.996612  1.3335799  -12.766374 <list[2]> 2024-12-18 10:02:33        3
#>  4:   3.192703 -2.1698473    7.888305 <list[2]> 2024-12-18 10:02:33        4
#>  5:  -1.368575  3.7848878  -47.381999 <list[2]> 2024-12-18 10:02:33        5
#>  6:   4.026872  5.0000000  -58.108210 <list[2]> 2024-12-18 10:02:33        6
#>  7:  -7.555327  2.4121352 -110.595477 <list[2]> 2024-12-18 10:02:33        7
#>  8:  -5.200698 -0.4365754  -48.421200 <list[2]> 2024-12-18 10:02:33        8
#>  9:  -5.635132 -5.0000000  -52.295237 <list[2]> 2024-12-18 10:02:33        9
#> 10:   5.779773 -5.0000000   -8.286682 <list[2]> 2024-12-18 10:02:33       10