From 0cba07bd25331ef0685543c11bd1f6a82002673d Mon Sep 17 00:00:00 2001 From: Lennart Schneider Date: Fri, 21 Jun 2024 11:21:43 +0200 Subject: [PATCH] feat: bbotk async compatibility (#146) * draft * fix: add start time * refactor: remove rush debug * fix: add callback * fix: transformation * fix: xdomain * refactor: kill workers * feat: cache archive * chore: debug * chore: import rush * feat: add logging * refactor: use optimize_decentralized() * feat: add exponential decay * feat: add min-max imputation * feat: add n_worker parameter * draft * draft * refactor: remove stage * fix: description * feat: add n_worker argument * fix: imports * fix: tests * ci: add redis * drop ADBO for now * do not include partial update changes made to SurrogateLearner * .. --------- Co-authored-by: be-marc --- .github/workflows/dev-cmd-check.yml | 7 +++++++ .github/workflows/r-cmd-check.yml | 6 ++++++ DESCRIPTION | 9 ++++++--- R/AcqFunction.R | 2 +- R/AcqFunctionAEI.R | 2 +- R/AcqFunctionCB.R | 2 +- R/AcqFunctionEHVI.R | 4 ++-- R/AcqFunctionEHVIGH.R | 10 +++++----- R/AcqFunctionEI.R | 2 +- R/AcqFunctionEIPS.R | 6 +++--- R/AcqFunctionMean.R | 2 +- R/AcqFunctionPI.R | 2 +- R/AcqFunctionSD.R | 2 +- R/AcqFunctionSmsEgo.R | 2 +- R/AcqOptimizer.R | 4 ++-- R/OptimizerMbo.R | 6 +++--- R/ResultAssigner.R | 2 +- R/ResultAssignerArchive.R | 4 ++-- R/ResultAssignerSurrogate.R | 12 ++++++------ R/Surrogate.R | 2 +- R/SurrogateLearner.R | 2 +- R/SurrogateLearnerCollection.R | 2 +- R/TunerMbo.R | 8 ++++---- R/bayesopt_ego.R | 12 ++++++------ R/bayesopt_emo.R | 10 +++++----- R/bayesopt_mpcl.R | 12 ++++++------ R/bayesopt_parego.R | 14 +++++++------- R/bayesopt_smsego.R | 12 ++++++------ R/helper.R | 4 ++-- R/mbo_defaults.R | 16 ++++++++-------- man/AcqOptimizer.Rd | 2 +- man/ResultAssigner.Rd | 2 +- man/SurrogateLearner.Rd | 2 +- man/SurrogateLearnerCollection.Rd | 2 +- man/default_acqoptimizer.Rd | 2 +- man/default_surrogate.Rd | 4 ++-- man/mlr_acqfunctions_aei.Rd | 2 +- man/mlr_acqfunctions_cb.Rd | 2 +- man/mlr_acqfunctions_ehvi.Rd | 2 +- man/mlr_acqfunctions_ehvigh.Rd | 2 +- man/mlr_acqfunctions_ei.Rd | 2 +- man/mlr_acqfunctions_eips.Rd | 6 +++--- man/mlr_acqfunctions_mean.Rd | 2 +- man/mlr_acqfunctions_pi.Rd | 2 +- man/mlr_acqfunctions_sd.Rd | 2 +- man/mlr_acqfunctions_smsego.Rd | 2 +- man/mlr_loop_functions_ego.Rd | 10 +++++----- man/mlr_loop_functions_emo.Rd | 8 ++++---- man/mlr_loop_functions_mpcl.Rd | 10 +++++----- man/mlr_loop_functions_parego.Rd | 12 ++++++------ man/mlr_loop_functions_smsego.Rd | 10 +++++----- man/mlr_optimizers_mbo.Rd | 10 +++++----- man/mlr_result_assigners_archive.Rd | 2 +- man/mlr_result_assigners_surrogate.Rd | 4 ++-- man/mlr_tuners_mbo.Rd | 10 +++++----- tests/testthat/helper.R | 8 ++++---- tests/testthat/test_AcqOptimizer.R | 2 +- tests/testthat/test_TunerMbo.R | 16 ++++++++-------- tests/testthat/test_bayesopt_ego.R | 4 ++-- tests/testthat/test_mbo_defaults.R | 4 ++-- vignettes/mlr3mbo.Rmd | 14 +++++++------- 61 files changed, 179 insertions(+), 163 deletions(-) diff --git a/.github/workflows/dev-cmd-check.yml b/.github/workflows/dev-cmd-check.yml index 4f791969..05e89247 100644 --- a/.github/workflows/dev-cmd-check.yml +++ b/.github/workflows/dev-cmd-check.yml @@ -38,6 +38,10 @@ jobs: with: r-version: ${{ matrix.config.r }} + - uses: supercharge/redis-github-action@1.7.0 + with: + redis-version: 7 + - uses: r-lib/actions/setup-r-dependencies@v2 with: extra-packages: any::rcmdcheck @@ -48,3 +52,6 @@ jobs: shell: Rscript {0} - uses: r-lib/actions/check-r-package@v2 + with: + args: 'c("--no-manual")' # "--as-cran" prevents to start external processes + diff --git a/.github/workflows/r-cmd-check.yml b/.github/workflows/r-cmd-check.yml index 25702f8b..b6a33022 100644 --- a/.github/workflows/r-cmd-check.yml +++ b/.github/workflows/r-cmd-check.yml @@ -36,9 +36,15 @@ jobs: with: r-version: ${{ matrix.config.r }} + - uses: supercharge/redis-github-action@1.7.0 + with: + redis-version: 7 + - uses: r-lib/actions/setup-r-dependencies@v2 with: extra-packages: any::rcmdcheck needs: check - uses: r-lib/actions/check-r-package@v2 + with: + args: 'c("--no-manual")' # "--as-cran" prevents to start external processes diff --git a/DESCRIPTION b/DESCRIPTION index b3097f5c..07461684 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -41,13 +41,13 @@ BugReports: https://github.com/mlr-org/mlr3mbo/issues Depends: R (>= 3.1.0) Imports: - bbotk (>= 0.5.4), + bbotk (>= 0.8.0.9000), checkmate (>= 2.0.0), data.table, lgr (>= 0.3.4), mlr3 (>= 0.14.0), mlr3misc (>= 0.11.0), - mlr3tuning (>= 0.14.0), + mlr3tuning (>= 0.20.0.9000), paradox (>= 0.10.0), spacefillr, R6 (>= 2.4.1) @@ -65,7 +65,10 @@ Suggests: rmarkdown, rpart, stringi, - testthat (>= 3.0.0), + testthat (>= 3.0.0) +Remotes: + mlr-org/bbotk, + mlr-org/mlr3tuning, ByteCompile: no Encoding: UTF-8 Config/testthat/edition: 3 diff --git a/R/AcqFunction.R b/R/AcqFunction.R index 03c62ba0..158bb97c 100644 --- a/R/AcqFunction.R +++ b/R/AcqFunction.R @@ -176,7 +176,7 @@ AcqFunction = R6Class("AcqFunction", stopf("Acquisition function '%s' requires the surrogate to have `\"se\"` as `$predict_type`.", format(self)) } private$.surrogate = rhs - private$.archive = assert_r6(rhs$archive, classes = "Archive") + private$.archive = assert_archive(rhs$archive) codomain = generate_acq_codomain(rhs, id = self$id, direction = self$direction) self$surrogate_max_to_min = surrogate_mult_max_to_min(rhs) domain = generate_acq_domain(rhs) diff --git a/R/AcqFunctionAEI.R b/R/AcqFunctionAEI.R index 164bdfbd..5521cf98 100644 --- a/R/AcqFunctionAEI.R +++ b/R/AcqFunctionAEI.R @@ -40,7 +40,7 @@ #' codomain = codomain, #' properties = "noisy") #' -#' instance = OptimInstanceSingleCrit$new( +#' instance = OptimInstanceBatchSingleCrit$new( #' objective = objective, #' terminator = trm("evals", n_evals = 5)) #' diff --git a/R/AcqFunctionCB.R b/R/AcqFunctionCB.R index 06417142..14a980c3 100644 --- a/R/AcqFunctionCB.R +++ b/R/AcqFunctionCB.R @@ -35,7 +35,7 @@ #' codomain = ps(y = p_dbl(tags = "minimize")) #' objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) #' -#' instance = OptimInstanceSingleCrit$new( +#' instance = OptimInstanceBatchSingleCrit$new( #' objective = objective, #' terminator = trm("evals", n_evals = 5)) #' diff --git a/R/AcqFunctionEHVI.R b/R/AcqFunctionEHVI.R index 37e4a6c7..63b73da7 100644 --- a/R/AcqFunctionEHVI.R +++ b/R/AcqFunctionEHVI.R @@ -30,7 +30,7 @@ #' codomain = ps(y1 = p_dbl(tags = "minimize"), y2 = p_dbl(tags = "minimize")) #' objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) #' -#' instance = OptimInstanceMultiCrit$new( +#' instance = OptimInstanceBatchMultiCrit$new( #' objective = objective, #' terminator = trm("evals", n_evals = 5)) #' @@ -117,7 +117,7 @@ AcqFunctionEHVI = R6Class("AcqFunctionEHVI", } columns = colnames(self$ys_front_augmented) - + ps = self$surrogate$predict(xdt) means = map_dtc(ps, "mean") diff --git a/R/AcqFunctionEHVIGH.R b/R/AcqFunctionEHVIGH.R index ec281667..505c0bac 100644 --- a/R/AcqFunctionEHVIGH.R +++ b/R/AcqFunctionEHVIGH.R @@ -41,7 +41,7 @@ #' codomain = ps(y1 = p_dbl(tags = "minimize"), y2 = p_dbl(tags = "minimize")) #' objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) #' -#' instance = OptimInstanceMultiCrit$new( +#' instance = OptimInstanceBatchMultiCrit$new( #' objective = objective, #' terminator = trm("evals", n_evals = 5)) #' @@ -175,20 +175,20 @@ adjust_gh_data = function(gh_data, mu, sigma, r) { idx = as.matrix(expand.grid(rep(list(1:n), n_obj))) nodes = matrix(gh_data[idx, 1L], nrow = nrow(idx), ncol = n_obj) weights = apply(matrix(gh_data[idx, 2L], nrow = nrow(idx), ncol = n_obj), MARGIN = 1L, FUN = prod) - - # pruning with pruning rate r + + # pruning with pruning rate r if (r > 0) { weights_quantile = quantile(weights, probs = r) nodes = nodes[weights > weights_quantile, ] weights = weights[weights > weights_quantile] } - + # rotate, scale, translate nodes with error catching # rotation will not have an effect unless we support surrogate models modelling correlated objectives # for now we still support this more general case and scaling is useful anyways nodes = tryCatch( { - eigen_decomp = eigen(sigma) + eigen_decomp = eigen(sigma) rotation = eigen_decomp$vectors %*% diag(sqrt(eigen_decomp$values)) nodes = t(rotation %*% t(nodes) + mu) }, error = function(ec) nodes diff --git a/R/AcqFunctionEI.R b/R/AcqFunctionEI.R index b5e3a1e7..1782b972 100644 --- a/R/AcqFunctionEI.R +++ b/R/AcqFunctionEI.R @@ -30,7 +30,7 @@ #' codomain = ps(y = p_dbl(tags = "minimize")) #' objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) #' -#' instance = OptimInstanceSingleCrit$new( +#' instance = OptimInstanceBatchSingleCrit$new( #' objective = objective, #' terminator = trm("evals", n_evals = 5)) #' diff --git a/R/AcqFunctionEIPS.R b/R/AcqFunctionEIPS.R index 5e5a9b6f..724dd13e 100644 --- a/R/AcqFunctionEIPS.R +++ b/R/AcqFunctionEIPS.R @@ -9,9 +9,9 @@ #' @description #' Expected Improvement per Second. #' -#' It is assumed that calculations are performed on an [bbotk::OptimInstanceSingleCrit]. +#' It is assumed that calculations are performed on an [bbotk::OptimInstanceBatchSingleCrit]. #' Additionally to target values of the codomain that should be minimized or maximized, the -#' [bbotk::Objective] of the [bbotk::OptimInstanceSingleCrit] should return time values. +#' [bbotk::Objective] of the [bbotk::OptimInstanceBatchSingleCrit] should return time values. #' The column names of the target variable and time variable must be passed as `cols_y` in the #' order `(target, time)` when constructing the [SurrogateLearnerCollection] that is being used as a #' surrogate. @@ -37,7 +37,7 @@ #' codomain = ps(y = p_dbl(tags = "minimize"), time = p_dbl(tags = "time")) #' objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) #' -#' instance = OptimInstanceSingleCrit$new( +#' instance = OptimInstanceBatchSingleCrit$new( #' objective = objective, #' terminator = trm("evals", n_evals = 5)) #' diff --git a/R/AcqFunctionMean.R b/R/AcqFunctionMean.R index d4658582..c42e0cc3 100644 --- a/R/AcqFunctionMean.R +++ b/R/AcqFunctionMean.R @@ -27,7 +27,7 @@ #' codomain = ps(y = p_dbl(tags = "minimize")) #' objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) #' -#' instance = OptimInstanceSingleCrit$new( +#' instance = OptimInstanceBatchSingleCrit$new( #' objective = objective, #' terminator = trm("evals", n_evals = 5)) #' diff --git a/R/AcqFunctionPI.R b/R/AcqFunctionPI.R index acce80d1..0bed7196 100644 --- a/R/AcqFunctionPI.R +++ b/R/AcqFunctionPI.R @@ -30,7 +30,7 @@ #' codomain = ps(y = p_dbl(tags = "minimize")) #' objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) #' -#' instance = OptimInstanceSingleCrit$new( +#' instance = OptimInstanceBatchSingleCrit$new( #' objective = objective, #' terminator = trm("evals", n_evals = 5)) #' diff --git a/R/AcqFunctionSD.R b/R/AcqFunctionSD.R index fcbf7b44..2006ebd6 100644 --- a/R/AcqFunctionSD.R +++ b/R/AcqFunctionSD.R @@ -27,7 +27,7 @@ #' codomain = ps(y = p_dbl(tags = "minimize")) #' objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) #' -#' instance = OptimInstanceSingleCrit$new( +#' instance = OptimInstanceBatchSingleCrit$new( #' objective = objective, #' terminator = trm("evals", n_evals = 5)) #' diff --git a/R/AcqFunctionSmsEgo.R b/R/AcqFunctionSmsEgo.R index 01ced58c..813b0ee1 100644 --- a/R/AcqFunctionSmsEgo.R +++ b/R/AcqFunctionSmsEgo.R @@ -40,7 +40,7 @@ #' codomain = ps(y1 = p_dbl(tags = "minimize"), y2 = p_dbl(tags = "minimize")) #' objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) #' -#' instance = OptimInstanceMultiCrit$new( +#' instance = OptimInstanceBatchMultiCrit$new( #' objective = objective, #' terminator = trm("evals", n_evals = 5)) #' diff --git a/R/AcqOptimizer.R b/R/AcqOptimizer.R index 8419dbed..68d6cd84 100644 --- a/R/AcqOptimizer.R +++ b/R/AcqOptimizer.R @@ -59,7 +59,7 @@ #' codomain = ps(y = p_dbl(tags = "minimize")) #' objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) #' -#' instance = OptimInstanceSingleCrit$new( +#' instance = OptimInstanceBatchSingleCrit$new( #' objective = objective, #' terminator = trm("evals", n_evals = 5)) #' @@ -146,7 +146,7 @@ AcqOptimizer = R6Class("AcqOptimizer", logger$set_threshold(self$param_set$values$logging_level) on.exit(logger$set_threshold(old_threshold)) - instance = OptimInstanceSingleCrit$new(objective = self$acq_function, search_space = self$acq_function$domain, terminator = self$terminator, check_values = FALSE, keep_evals = "all") + instance = OptimInstanceBatchSingleCrit$new(objective = self$acq_function, search_space = self$acq_function$domain, terminator = self$terminator, check_values = FALSE) # warmstart if (self$param_set$values$warmstart) { diff --git a/R/OptimizerMbo.R b/R/OptimizerMbo.R index 9edd164a..fa1c7547 100644 --- a/R/OptimizerMbo.R +++ b/R/OptimizerMbo.R @@ -47,7 +47,7 @@ #' codomain = ps(y = p_dbl(tags = "minimize")) #' objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) #' -#' instance = OptimInstanceSingleCrit$new( +#' instance = OptimInstanceBatchSingleCrit$new( #' objective = objective, #' terminator = trm("evals", n_evals = 5)) #' @@ -75,7 +75,7 @@ #' codomain = ps(y1 = p_dbl(tags = "minimize"), y2 = p_dbl(tags = "minimize")) #' objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) #' -#' instance = OptimInstanceMultiCrit$new( +#' instance = OptimInstanceBatchMultiCrit$new( #' objective = objective, #' terminator = trm("evals", n_evals = 5)) #' @@ -89,7 +89,7 @@ #' } #' } OptimizerMbo = R6Class("OptimizerMbo", - inherit = bbotk::Optimizer, + inherit = bbotk::OptimizerBatch, public = list( #' @description diff --git a/R/ResultAssigner.R b/R/ResultAssigner.R index dbbf812c..e558ac0d 100644 --- a/R/ResultAssigner.R +++ b/R/ResultAssigner.R @@ -28,7 +28,7 @@ ResultAssigner = R6Class("ResultAssigner", #' @description #' Assigns the result, i.e., the final point(s) to the instance. #' - #' @param instance ([bbotk::OptimInstanceSingleCrit] | [bbotk::OptimInstanceMultiCrit])\cr + #' @param instance ([bbotk::OptimInstanceBatchSingleCrit] | [bbotk::OptimInstanceBatchMultiCrit])\cr #' The [bbotk::OptimInstance] the final result should be assigned to. assign_result = function(instance) { stop("Abstract.") diff --git a/R/ResultAssignerArchive.R b/R/ResultAssignerArchive.R index aff6c2e8..1c6f9399 100644 --- a/R/ResultAssignerArchive.R +++ b/R/ResultAssignerArchive.R @@ -26,12 +26,12 @@ ResultAssignerArchive = R6Class("ResultAssignerArchive", #' @description #' Assigns the result, i.e., the final point(s) to the instance. #' - #' @param instance ([bbotk::OptimInstanceSingleCrit] | [bbotk::OptimInstanceMultiCrit])\cr + #' @param instance ([bbotk::OptimInstanceBatchSingleCrit] | [bbotk::OptimInstanceBatchMultiCrit])\cr #' The [bbotk::OptimInstance] the final result should be assigned to. assign_result = function(instance) { res = instance$archive$best() xdt = res[, instance$search_space$ids(), with = FALSE] - if (inherits(instance, "OptimInstanceMultiCrit")) { + if (inherits(instance, "OptimInstanceBatchMultiCrit")) { ydt = res[, instance$archive$cols_y, with = FALSE] instance$assign_result(xdt, ydt) } diff --git a/R/ResultAssignerSurrogate.R b/R/ResultAssignerSurrogate.R index 63505b28..0bf824a3 100644 --- a/R/ResultAssignerSurrogate.R +++ b/R/ResultAssignerSurrogate.R @@ -7,7 +7,7 @@ #' Result assigner that chooses the final point(s) based on a surrogate mean prediction of all evaluated points in the [bbotk::Archive]. #' This is especially useful in the case of noisy objective functions. #' -#' In the case of operating on an [bbotk::OptimInstanceMultiCrit] the [SurrogateLearnerCollection] must use as many learners as there are objective functions. +#' In the case of operating on an [bbotk::OptimInstanceBatchMultiCrit] the [SurrogateLearnerCollection] must use as many learners as there are objective functions. #' #' @family Result Assigner #' @export @@ -32,15 +32,15 @@ ResultAssignerSurrogate = R6Class("ResultAssignerSurrogate", #' Assigns the result, i.e., the final point(s) to the instance. #' If `$surrogate` is `NULL`, `default_surrogate(instance)` is used and also assigned to `$surrogate`. #' - #' @param instance ([bbotk::OptimInstanceSingleCrit] | [bbotk::OptimInstanceMultiCrit])\cr + #' @param instance ([bbotk::OptimInstanceBatchSingleCrit] | [bbotk::OptimInstanceBatchMultiCrit])\cr #' The [bbotk::OptimInstance] the final result should be assigned to. assign_result = function(instance) { if (is.null(self$surrogate)) { self$surrogate = default_surrogate(instance) } - if (inherits(instance, "OptimInstanceSingleCrit")) { + if (inherits(instance, "OptimInstanceBatchSingleCrit")) { assert_r6(self$surrogate, classes = "SurrogateLearner") - } else if (inherits(instance, "OptimInstanceMultiCrit")) { + } else if (inherits(instance, "OptimInstanceBatchMultiCrit")) { assert_r6(self$surrogate, classes = "SurrogateLearnerCollection") if (self$surrogate$n_learner != instance$objective$ydim) { stopf("Surrogate used within the result assigner uses %i learners but the optimization instance has %i objective functions", self$surrogate$n_learner, instance$objective$ydim) @@ -62,9 +62,9 @@ ResultAssignerSurrogate = R6Class("ResultAssignerSurrogate", best = archive_tmp$best()[, archive_tmp$cols_x, with = FALSE] # ys are still the ones originally evaluated - best_y = if (inherits(instance, "OptimInstanceSingleCrit")) { + best_y = if (inherits(instance, "OptimInstanceBatchSingleCrit")) { unlist(archive$data[best, on = archive$cols_x][, archive$cols_y, with = FALSE]) - } else if (inherits(instance, "OptimInstanceMultiCrit")) { + } else if (inherits(instance, "OptimInstanceBatchMultiCrit")) { archive$data[best, on = archive$cols_x][, archive$cols_y, with = FALSE] } instance$assign_result(xdt = best, best_y) diff --git a/R/Surrogate.R b/R/Surrogate.R index 9f98f7f8..b9e0dd17 100644 --- a/R/Surrogate.R +++ b/R/Surrogate.R @@ -99,7 +99,7 @@ Surrogate = R6Class("Surrogate", if (missing(rhs)) { private$.archive } else { - private$.archive = assert_r6(rhs, classes = "Archive") + private$.archive = assert_archive(rhs, null_ok = TRUE) invisible(private$.archive) } }, diff --git a/R/SurrogateLearner.R b/R/SurrogateLearner.R index 86b9ac53..fb5681e4 100644 --- a/R/SurrogateLearner.R +++ b/R/SurrogateLearner.R @@ -44,7 +44,7 @@ #' codomain = ps(y = p_dbl(tags = "minimize")) #' objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) #' -#' instance = OptimInstanceSingleCrit$new( +#' instance = OptimInstanceBatchSingleCrit$new( #' objective = objective, #' terminator = trm("evals", n_evals = 5)) #' diff --git a/R/SurrogateLearnerCollection.R b/R/SurrogateLearnerCollection.R index 9624e420..87919381 100644 --- a/R/SurrogateLearnerCollection.R +++ b/R/SurrogateLearnerCollection.R @@ -47,7 +47,7 @@ #' codomain = ps(y1 = p_dbl(tags = "minimize"), y2 = p_dbl(tags = "minimize")) #' objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) #' -#' instance = OptimInstanceMultiCrit$new( +#' instance = OptimInstanceBatchMultiCrit$new( #' objective = objective, #' terminator = trm("evals", n_evals = 5)) #' xdt = generate_design_random(instance$search_space, n = 4)$data diff --git a/R/TunerMbo.R b/R/TunerMbo.R index 13f6615c..fe778ea9 100644 --- a/R/TunerMbo.R +++ b/R/TunerMbo.R @@ -1,4 +1,4 @@ -#' @title Tuner using Model Based Optimization +#' @title TunerBatch using Model Based Optimization #' #' @name mlr_tuners_mbo #' @@ -23,7 +23,7 @@ #' resampling = rsmp("cv", folds = 3) #' measure = msr("classif.acc") #' -#' instance = TuningInstanceSingleCrit$new( +#' instance = TuningInstanceBatchSingleCrit$new( #' task = task, #' learner = learner, #' resampling = resampling, @@ -38,7 +38,7 @@ #' resampling = rsmp("cv", folds = 3) #' measures = msrs(c("classif.acc", "selected_features")) #' -#' instance = TuningInstanceMultiCrit$new( +#' instance = TuningInstanceBatchMultiCrit$new( #' task = task, #' learner = learner, #' resampling = resampling, @@ -50,7 +50,7 @@ #' } #' } TunerMbo = R6Class("TunerMbo", - inherit = mlr3tuning::TunerFromOptimizer, + inherit = mlr3tuning::TunerBatchFromOptimizerBatch, public = list( #' @description diff --git a/R/bayesopt_ego.R b/R/bayesopt_ego.R index 9f8a9618..ca3d5736 100644 --- a/R/bayesopt_ego.R +++ b/R/bayesopt_ego.R @@ -10,8 +10,8 @@ #' In each iteration after the initial design, the surrogate and acquisition function are updated and the next candidate #' is chosen based on optimizing the acquisition function. #' -#' @param instance ([bbotk::OptimInstanceSingleCrit])\cr -#' The [bbotk::OptimInstanceSingleCrit] to be optimized. +#' @param instance ([bbotk::OptimInstanceBatchSingleCrit])\cr +#' The [bbotk::OptimInstanceBatchSingleCrit] to be optimized. #' @param init_design_size (`NULL` | `integer(1)`)\cr #' Size of the initial design. #' If `NULL` and the [bbotk::Archive] contains no evaluations, \code{4 * d} is used with \code{d} being the @@ -34,7 +34,7 @@ #' @note #' * The `acq_function$surrogate`, even if already populated, will always be overwritten by the `surrogate`. #' * The `acq_optimizer$acq_function`, even if already populated, will always be overwritten by `acq_function`. -#' * The `surrogate$archive`, even if already populated, will always be overwritten by the [bbotk::Archive] of the [bbotk::OptimInstanceSingleCrit]. +#' * The `surrogate$archive`, even if already populated, will always be overwritten by the [bbotk::Archive] of the [bbotk::OptimInstanceBatchSingleCrit]. #' #' @return invisible(instance)\cr #' The original instance is modified in-place and returned invisible. @@ -62,7 +62,7 @@ #' codomain = ps(y = p_dbl(tags = "minimize")) #' objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) #' -#' instance = OptimInstanceSingleCrit$new( +#' instance = OptimInstanceBatchSingleCrit$new( #' objective = objective, #' terminator = trm("evals", n_evals = 5)) #' @@ -90,7 +90,7 @@ #' codomain = ps(y = p_dbl(tags = "minimize"), time = p_dbl(tags = "time")) #' objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) #' -#' instance = OptimInstanceSingleCrit$new( +#' instance = OptimInstanceBatchSingleCrit$new( #' objective = objective, #' terminator = trm("evals", n_evals = 5)) #' @@ -116,7 +116,7 @@ bayesopt_ego = function( ) { # assertions - assert_r6(instance, "OptimInstanceSingleCrit") + assert_r6(instance, "OptimInstanceBatchSingleCrit") assert_r6(surrogate, classes = "Surrogate") # cannot be SurrogateLearner due to EIPS assert_r6(acq_function, classes = "AcqFunction") assert_r6(acq_optimizer, classes = "AcqOptimizer") diff --git a/R/bayesopt_emo.R b/R/bayesopt_emo.R index 1caacd6f..c1e96ec8 100644 --- a/R/bayesopt_emo.R +++ b/R/bayesopt_emo.R @@ -11,8 +11,8 @@ #' In each iteration after the initial design, the surrogate and acquisition function are updated and the next candidate #' is chosen based on optimizing the acquisition function. #' -#' @param instance ([bbotk::OptimInstanceMultiCrit])\cr -#' The [bbotk::OptimInstanceMultiCrit] to be optimized. +#' @param instance ([bbotk::OptimInstanceBatchMultiCrit])\cr +#' The [bbotk::OptimInstanceBatchMultiCrit] to be optimized. #' @param init_design_size (`NULL` | `integer(1)`)\cr #' Size of the initial design. #' If `NULL` and the [bbotk::Archive] contains no evaluations, \code{4 * d} is used with \code{d} being the @@ -34,7 +34,7 @@ #' @note #' * The `acq_function$surrogate`, even if already populated, will always be overwritten by the `surrogate`. #' * The `acq_optimizer$acq_function`, even if already populated, will always be overwritten by `acq_function`. -#' * The `surrogate$archive`, even if already populated, will always be overwritten by the [bbotk::Archive] of the [bbotk::OptimInstanceMultiCrit]. +#' * The `surrogate$archive`, even if already populated, will always be overwritten by the [bbotk::Archive] of the [bbotk::OptimInstanceBatchMultiCrit]. #' #' @return invisible(instance)\cr #' The original instance is modified in-place and returned invisible. @@ -58,7 +58,7 @@ #' codomain = ps(y1 = p_dbl(tags = "minimize"), y2 = p_dbl(tags = "minimize")) #' objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) #' -#' instance = OptimInstanceMultiCrit$new( +#' instance = OptimInstanceBatchMultiCrit$new( #' objective = objective, #' terminator = trm("evals", n_evals = 5)) #' @@ -89,7 +89,7 @@ bayesopt_emo = function( ) { # assertions - assert_r6(instance, "OptimInstanceMultiCrit") + assert_r6(instance, "OptimInstanceBatchMultiCrit") assert_r6(surrogate, classes = "SurrogateLearnerCollection") assert_r6(acq_function, classes = "AcqFunction") assert_r6(acq_optimizer, classes = "AcqOptimizer") diff --git a/R/bayesopt_mpcl.R b/R/bayesopt_mpcl.R index edac4cec..59b4850e 100644 --- a/R/bayesopt_mpcl.R +++ b/R/bayesopt_mpcl.R @@ -12,8 +12,8 @@ #' objective function value is obtained by applying the `liar` function to all previously obtained objective function values. #' This is repeated `q - 1` times to obtain a total of `q` candidates that are then evaluated in a single batch. #' -#' @param instance ([bbotk::OptimInstanceSingleCrit])\cr -#' The [bbotk::OptimInstanceSingleCrit] to be optimized. +#' @param instance ([bbotk::OptimInstanceBatchSingleCrit])\cr +#' The [bbotk::OptimInstanceBatchSingleCrit] to be optimized. #' @param init_design_size (`NULL` | `integer(1)`)\cr #' Size of the initial design. #' If `NULL` and the [bbotk::Archive] contains no evaluations, \code{4 * d} is used with \code{d} being the @@ -42,9 +42,9 @@ #' @note #' * The `acq_function$surrogate`, even if already populated, will always be overwritten by the `surrogate`. #' * The `acq_optimizer$acq_function`, even if already populated, will always be overwritten by `acq_function`. -#' * The `surrogate$archive`, even if already populated, will always be overwritten by the [bbotk::Archive] of the [bbotk::OptimInstanceSingleCrit]. +#' * The `surrogate$archive`, even if already populated, will always be overwritten by the [bbotk::Archive] of the [bbotk::OptimInstanceBatchSingleCrit]. #' * To make use of parallel evaluations in the case of `q > 1, the objective -#' function of the [bbotk::OptimInstanceSingleCrit] must be implemented accordingly. +#' function of the [bbotk::OptimInstanceBatchSingleCrit] must be implemented accordingly. #' #' @return invisible(instance)\cr #' The original instance is modified in-place and returned invisible. @@ -72,7 +72,7 @@ #' codomain = ps(y = p_dbl(tags = "minimize")) #' objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) #' -#' instance = OptimInstanceSingleCrit$new( +#' instance = OptimInstanceBatchSingleCrit$new( #' objective = objective, #' terminator = trm("evals", n_evals = 7)) #' @@ -106,7 +106,7 @@ bayesopt_mpcl = function( ) { # assertions - assert_r6(instance, "OptimInstanceSingleCrit") + assert_r6(instance, "OptimInstanceBatchSingleCrit") assert_r6(surrogate, classes = "Surrogate") # cannot be SurrogateLearner due to EIPS assert_r6(acq_function, classes = "AcqFunction") assert_r6(acq_optimizer, classes = "AcqOptimizer") diff --git a/R/bayesopt_parego.R b/R/bayesopt_parego.R index 62550871..744eecb2 100644 --- a/R/bayesopt_parego.R +++ b/R/bayesopt_parego.R @@ -11,8 +11,8 @@ #' obtained by scalarizing these values via the augmented Tchebycheff function, updating the surrogate with respect to #' these scalarized values and optimizing the acquisition function. #' -#' @param instance ([bbotk::OptimInstanceMultiCrit])\cr -#' The [bbotk::OptimInstanceMultiCrit] to be optimized. +#' @param instance ([bbotk::OptimInstanceBatchMultiCrit])\cr +#' The [bbotk::OptimInstanceBatchMultiCrit] to be optimized. #' @param init_design_size (`NULL` | `integer(1)`)\cr #' Size of the initial design. #' If `NULL` and the [bbotk::Archive] contains no evaluations, \code{4 * d} is used with \code{d} being the @@ -44,11 +44,11 @@ #' @note #' * The `acq_function$surrogate`, even if already populated, will always be overwritten by the `surrogate`. #' * The `acq_optimizer$acq_function`, even if already populated, will always be overwritten by `acq_function`. -#' * The `surrogate$archive`, even if already populated, will always be overwritten by the [bbotk::Archive] of the [bbotk::OptimInstanceMultiCrit]. +#' * The `surrogate$archive`, even if already populated, will always be overwritten by the [bbotk::Archive] of the [bbotk::OptimInstanceBatchMultiCrit]. #' * The scalarizations of the objective function values are stored as the `y_scal` column in the -#' [bbotk::Archive] of the [bbotk::OptimInstanceMultiCrit]. +#' [bbotk::Archive] of the [bbotk::OptimInstanceBatchMultiCrit]. #' * To make use of parallel evaluations in the case of `q > 1, the objective -#' function of the [bbotk::OptimInstanceMultiCrit] must be implemented accordingly. +#' function of the [bbotk::OptimInstanceBatchMultiCrit] must be implemented accordingly. #' #' @return invisible(instance)\cr #' The original instance is modified in-place and returned invisible. @@ -75,7 +75,7 @@ #' codomain = ps(y1 = p_dbl(tags = "minimize"), y2 = p_dbl(tags = "minimize")) #' objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) #' -#' instance = OptimInstanceMultiCrit$new( +#' instance = OptimInstanceBatchMultiCrit$new( #' objective = objective, #' terminator = trm("evals", n_evals = 5)) #' @@ -109,7 +109,7 @@ bayesopt_parego = function( ) { # assertions - assert_r6(instance, "OptimInstanceMultiCrit") + assert_r6(instance, "OptimInstanceBatchMultiCrit") assert_r6(surrogate, classes = "SurrogateLearner") assert_r6(acq_function, classes = "AcqFunction") assert_r6(acq_optimizer, classes = "AcqOptimizer") diff --git a/R/bayesopt_smsego.R b/R/bayesopt_smsego.R index 124fcd86..3f7ee08f 100644 --- a/R/bayesopt_smsego.R +++ b/R/bayesopt_smsego.R @@ -10,8 +10,8 @@ #' In each iteration after the initial design, the surrogate and acquisition function ([mlr_acqfunctions_smsego]) are #' updated and the next candidate is chosen based on optimizing the acquisition function. #' -#' @param instance ([bbotk::OptimInstanceMultiCrit])\cr -#' The [bbotk::OptimInstanceMultiCrit] to be optimized. +#' @param instance ([bbotk::OptimInstanceBatchMultiCrit])\cr +#' The [bbotk::OptimInstanceBatchMultiCrit] to be optimized. #' @param init_design_size (`NULL` | `integer(1)`)\cr #' Size of the initial design. #' If `NULL` and the [bbotk::Archive] contains no evaluations, \code{4 * d} is used with \code{d} being the @@ -33,9 +33,9 @@ #' @note #' * The `acq_function$surrogate`, even if already populated, will always be overwritten by the `surrogate`. #' * The `acq_optimizer$acq_function`, even if already populated, will always be overwritten by `acq_function`. -#' * The `surrogate$archive`, even if already populated, will always be overwritten by the [bbotk::Archive] of the [bbotk::OptimInstanceMultiCrit]. +#' * The `surrogate$archive`, even if already populated, will always be overwritten by the [bbotk::Archive] of the [bbotk::OptimInstanceBatchMultiCrit]. #' * Due to the iterative computation of the epsilon within the [mlr_acqfunctions_smsego], requires the [bbotk::Terminator] of -#' the [bbotk::OptimInstanceMultiCrit] to be a [bbotk::TerminatorEvals]. +#' the [bbotk::OptimInstanceBatchMultiCrit] to be a [bbotk::TerminatorEvals]. #' #' @return invisible(instance)\cr #' The original instance is modified in-place and returned invisible. @@ -63,7 +63,7 @@ #' codomain = ps(y1 = p_dbl(tags = "minimize"), y2 = p_dbl(tags = "minimize")) #' objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) #' -#' instance = OptimInstanceMultiCrit$new( +#' instance = OptimInstanceBatchMultiCrit$new( #' objective = objective, #' terminator = trm("evals", n_evals = 5)) #' @@ -94,7 +94,7 @@ bayesopt_smsego = function( ) { # assertions - assert_r6(instance, "OptimInstanceMultiCrit") + assert_r6(instance, "OptimInstanceBatchMultiCrit") assert_r6(instance$terminator, "TerminatorEvals") assert_r6(surrogate, classes = "SurrogateLearnerCollection") assert_r6(acq_function, classes = "AcqFunctionSmsEgo") diff --git a/R/helper.R b/R/helper.R index cc6d71c6..4994839a 100644 --- a/R/helper.R +++ b/R/helper.R @@ -1,5 +1,5 @@ generate_acq_codomain = function(surrogate, id, direction = "same") { - assert_r6(surrogate$archive, classes = "Archive") + assert_multi_class(surrogate$archive, c("Archive", "ArchiveAsync")) assert_string(id) assert_choice(direction, choices = c("same", "minimize", "maximize")) if (direction == "same") { @@ -15,7 +15,7 @@ generate_acq_codomain = function(surrogate, id, direction = "same") { } generate_acq_domain = function(surrogate) { - assert_r6(surrogate$archive, classes = "Archive") + assert_archive(surrogate$archive) if ("set_id" %in% names(ps())) { # old paradox domain = surrogate$archive$search_space$clone(deep = TRUE)$subset(surrogate$cols_x) diff --git a/R/mbo_defaults.R b/R/mbo_defaults.R index 047e2f54..932bac4f 100644 --- a/R/mbo_defaults.R +++ b/R/mbo_defaults.R @@ -27,9 +27,9 @@ NULL #' @family mbo_defaults #' @export default_loop_function = function(instance) { - if (inherits(instance, "OptimInstanceSingleCrit")) { + if (inherits(instance, "OptimInstanceBatchSingleCrit")) { bayesopt_ego - } else if (inherits(instance, "OptimInstanceMultiCrit")) { + } else if (inherits(instance, "OptimInstanceBatchMultiCrit")) { bayesopt_smsego } } @@ -127,10 +127,10 @@ default_rf = function(noisy = FALSE) { #' In the case of dependencies, the following learner is used as a fallback: #' \code{lrn("regr.featureless")}. #' -#' If the instance is of class [bbotk::OptimInstanceSingleCrit] the learner is wrapped as a +#' If the instance is of class [bbotk::OptimInstanceBatchSingleCrit] the learner is wrapped as a #' [SurrogateLearner]. #' -#' If the instance is of class [bbotk::OptimInstanceMultiCrit] multiple deep clones of the learner are +#' If the instance is of class [bbotk::OptimInstanceBatchMultiCrit] multiple deep clones of the learner are #' wrapped as a [SurrogateLearnerCollection]. #' #' @references @@ -147,7 +147,7 @@ default_rf = function(noisy = FALSE) { #' @family mbo_defaults #' @export default_surrogate = function(instance, learner = NULL, n_learner = NULL) { - assert_r6(instance, "OptimInstance") + assert_multi_class(instance, c("OptimInstance", "OptimInstanceAsync")) assert_r6(learner, "Learner", null.ok = TRUE) assert_int(n_learner, lower = 1L, null.ok = TRUE) noisy = "noisy" %in% instance$objective$properties @@ -211,9 +211,9 @@ default_surrogate = function(instance, learner = NULL, n_learner = NULL) { #' @export default_acqfunction = function(instance) { assert_r6(instance, classes = "OptimInstance") - if (inherits(instance, "OptimInstanceSingleCrit")) { + if (inherits(instance, "OptimInstanceBatchSingleCrit")) { AcqFunctionEI$new() - } else if (inherits(instance, "OptimInstanceMultiCrit")) { + } else if (inherits(instance, "OptimInstanceBatchMultiCrit")) { AcqFunctionSmsEgo$new() } } @@ -222,7 +222,7 @@ default_acqfunction = function(instance) { #' #' @description #' Chooses a default acquisition function optimizer. -#' Defaults to wrapping [bbotk::OptimizerRandomSearch] allowing 10000 function evaluations (with a batch size of 1000) via a [bbotk::TerminatorEvals]. +#' Defaults to wrapping [bbotk::OptimizerBatchRandomSearch] allowing 10000 function evaluations (with a batch size of 1000) via a [bbotk::TerminatorEvals]. #' #' @param acq_function ([AcqFunction]). #' @return [AcqOptimizer] diff --git a/man/AcqOptimizer.Rd b/man/AcqOptimizer.Rd index 0d19908a..f0f8d9b3 100644 --- a/man/AcqOptimizer.Rd +++ b/man/AcqOptimizer.Rd @@ -63,7 +63,7 @@ if (requireNamespace("mlr3learners") & codomain = ps(y = p_dbl(tags = "minimize")) objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) - instance = OptimInstanceSingleCrit$new( + instance = OptimInstanceBatchSingleCrit$new( objective = objective, terminator = trm("evals", n_evals = 5)) diff --git a/man/ResultAssigner.Rd b/man/ResultAssigner.Rd index 28ea502a..a6f5485e 100644 --- a/man/ResultAssigner.Rd +++ b/man/ResultAssigner.Rd @@ -74,7 +74,7 @@ Assigns the result, i.e., the final point(s) to the instance. \subsection{Arguments}{ \if{html}{\out{
}} \describe{ -\item{\code{instance}}{(\link[bbotk:OptimInstanceSingleCrit]{bbotk::OptimInstanceSingleCrit} | \link[bbotk:OptimInstanceMultiCrit]{bbotk::OptimInstanceMultiCrit})\cr +\item{\code{instance}}{(\link[bbotk:OptimInstanceBatchSingleCrit]{bbotk::OptimInstanceBatchSingleCrit} | \link[bbotk:OptimInstanceBatchMultiCrit]{bbotk::OptimInstanceBatchMultiCrit})\cr The \link[bbotk:OptimInstance]{bbotk::OptimInstance} the final result should be assigned to.} } \if{html}{\out{
}} diff --git a/man/SurrogateLearner.Rd b/man/SurrogateLearner.Rd index 37702fc2..038f9487 100644 --- a/man/SurrogateLearner.Rd +++ b/man/SurrogateLearner.Rd @@ -48,7 +48,7 @@ if (requireNamespace("mlr3learners") & codomain = ps(y = p_dbl(tags = "minimize")) objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) - instance = OptimInstanceSingleCrit$new( + instance = OptimInstanceBatchSingleCrit$new( objective = objective, terminator = trm("evals", n_evals = 5)) diff --git a/man/SurrogateLearnerCollection.Rd b/man/SurrogateLearnerCollection.Rd index 91ae1cc9..954b8ea9 100644 --- a/man/SurrogateLearnerCollection.Rd +++ b/man/SurrogateLearnerCollection.Rd @@ -51,7 +51,7 @@ if (requireNamespace("mlr3learners") & codomain = ps(y1 = p_dbl(tags = "minimize"), y2 = p_dbl(tags = "minimize")) objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) - instance = OptimInstanceMultiCrit$new( + instance = OptimInstanceBatchMultiCrit$new( objective = objective, terminator = trm("evals", n_evals = 5)) xdt = generate_design_random(instance$search_space, n = 4)$data diff --git a/man/default_acqoptimizer.Rd b/man/default_acqoptimizer.Rd index 17fb9d42..f5efb42a 100644 --- a/man/default_acqoptimizer.Rd +++ b/man/default_acqoptimizer.Rd @@ -14,7 +14,7 @@ default_acqoptimizer(acq_function) } \description{ Chooses a default acquisition function optimizer. -Defaults to wrapping \link[bbotk:mlr_optimizers_random_search]{bbotk::OptimizerRandomSearch} allowing 10000 function evaluations (with a batch size of 1000) via a \link[bbotk:mlr_terminators_evals]{bbotk::TerminatorEvals}. +Defaults to wrapping \link[bbotk:mlr_optimizers_random_search]{bbotk::OptimizerBatchRandomSearch} allowing 10000 function evaluations (with a batch size of 1000) via a \link[bbotk:mlr_terminators_evals]{bbotk::TerminatorEvals}. } \seealso{ Other mbo_defaults: diff --git a/man/default_surrogate.Rd b/man/default_surrogate.Rd index d2bbeccf..25e416d3 100644 --- a/man/default_surrogate.Rd +++ b/man/default_surrogate.Rd @@ -44,10 +44,10 @@ Out of range imputation makes sense for tree-based methods and is usually hard t In the case of dependencies, the following learner is used as a fallback: \code{lrn("regr.featureless")}. -If the instance is of class \link[bbotk:OptimInstanceSingleCrit]{bbotk::OptimInstanceSingleCrit} the learner is wrapped as a +If the instance is of class \link[bbotk:OptimInstanceBatchSingleCrit]{bbotk::OptimInstanceBatchSingleCrit} the learner is wrapped as a \link{SurrogateLearner}. -If the instance is of class \link[bbotk:OptimInstanceMultiCrit]{bbotk::OptimInstanceMultiCrit} multiple deep clones of the learner are +If the instance is of class \link[bbotk:OptimInstanceBatchMultiCrit]{bbotk::OptimInstanceBatchMultiCrit} multiple deep clones of the learner are wrapped as a \link{SurrogateLearnerCollection}. } \references{ diff --git a/man/mlr_acqfunctions_aei.Rd b/man/mlr_acqfunctions_aei.Rd index 56957d63..7e733f3f 100644 --- a/man/mlr_acqfunctions_aei.Rd +++ b/man/mlr_acqfunctions_aei.Rd @@ -47,7 +47,7 @@ if (requireNamespace("mlr3learners") & codomain = codomain, properties = "noisy") - instance = OptimInstanceSingleCrit$new( + instance = OptimInstanceBatchSingleCrit$new( objective = objective, terminator = trm("evals", n_evals = 5)) diff --git a/man/mlr_acqfunctions_cb.Rd b/man/mlr_acqfunctions_cb.Rd index d94ae789..501ebece 100644 --- a/man/mlr_acqfunctions_cb.Rd +++ b/man/mlr_acqfunctions_cb.Rd @@ -42,7 +42,7 @@ if (requireNamespace("mlr3learners") & codomain = ps(y = p_dbl(tags = "minimize")) objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) - instance = OptimInstanceSingleCrit$new( + instance = OptimInstanceBatchSingleCrit$new( objective = objective, terminator = trm("evals", n_evals = 5)) diff --git a/man/mlr_acqfunctions_ehvi.Rd b/man/mlr_acqfunctions_ehvi.Rd index 160eb8fa..4301ec08 100644 --- a/man/mlr_acqfunctions_ehvi.Rd +++ b/man/mlr_acqfunctions_ehvi.Rd @@ -26,7 +26,7 @@ if (requireNamespace("mlr3learners") & codomain = ps(y1 = p_dbl(tags = "minimize"), y2 = p_dbl(tags = "minimize")) objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) - instance = OptimInstanceMultiCrit$new( + instance = OptimInstanceBatchMultiCrit$new( objective = objective, terminator = trm("evals", n_evals = 5)) diff --git a/man/mlr_acqfunctions_ehvigh.Rd b/man/mlr_acqfunctions_ehvigh.Rd index 9d9a2c27..976ffb61 100644 --- a/man/mlr_acqfunctions_ehvigh.Rd +++ b/man/mlr_acqfunctions_ehvigh.Rd @@ -41,7 +41,7 @@ if (requireNamespace("mlr3learners") & codomain = ps(y1 = p_dbl(tags = "minimize"), y2 = p_dbl(tags = "minimize")) objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) - instance = OptimInstanceMultiCrit$new( + instance = OptimInstanceBatchMultiCrit$new( objective = objective, terminator = trm("evals", n_evals = 5)) diff --git a/man/mlr_acqfunctions_ei.Rd b/man/mlr_acqfunctions_ei.Rd index 0fe783ea..4a12dbda 100644 --- a/man/mlr_acqfunctions_ei.Rd +++ b/man/mlr_acqfunctions_ei.Rd @@ -33,7 +33,7 @@ if (requireNamespace("mlr3learners") & codomain = ps(y = p_dbl(tags = "minimize")) objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) - instance = OptimInstanceSingleCrit$new( + instance = OptimInstanceBatchSingleCrit$new( objective = objective, terminator = trm("evals", n_evals = 5)) diff --git a/man/mlr_acqfunctions_eips.Rd b/man/mlr_acqfunctions_eips.Rd index 214f654b..4c885b74 100644 --- a/man/mlr_acqfunctions_eips.Rd +++ b/man/mlr_acqfunctions_eips.Rd @@ -7,9 +7,9 @@ \description{ Expected Improvement per Second. -It is assumed that calculations are performed on an \link[bbotk:OptimInstanceSingleCrit]{bbotk::OptimInstanceSingleCrit}. +It is assumed that calculations are performed on an \link[bbotk:OptimInstanceBatchSingleCrit]{bbotk::OptimInstanceBatchSingleCrit}. Additionally to target values of the codomain that should be minimized or maximized, the -\link[bbotk:Objective]{bbotk::Objective} of the \link[bbotk:OptimInstanceSingleCrit]{bbotk::OptimInstanceSingleCrit} should return time values. +\link[bbotk:Objective]{bbotk::Objective} of the \link[bbotk:OptimInstanceBatchSingleCrit]{bbotk::OptimInstanceBatchSingleCrit} should return time values. The column names of the target variable and time variable must be passed as \code{cols_y} in the order \verb{(target, time)} when constructing the \link{SurrogateLearnerCollection} that is being used as a surrogate. @@ -40,7 +40,7 @@ if (requireNamespace("mlr3learners") & codomain = ps(y = p_dbl(tags = "minimize"), time = p_dbl(tags = "time")) objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) - instance = OptimInstanceSingleCrit$new( + instance = OptimInstanceBatchSingleCrit$new( objective = objective, terminator = trm("evals", n_evals = 5)) diff --git a/man/mlr_acqfunctions_mean.Rd b/man/mlr_acqfunctions_mean.Rd index c9d602e2..b09456ba 100644 --- a/man/mlr_acqfunctions_mean.Rd +++ b/man/mlr_acqfunctions_mean.Rd @@ -33,7 +33,7 @@ if (requireNamespace("mlr3learners") & codomain = ps(y = p_dbl(tags = "minimize")) objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) - instance = OptimInstanceSingleCrit$new( + instance = OptimInstanceBatchSingleCrit$new( objective = objective, terminator = trm("evals", n_evals = 5)) diff --git a/man/mlr_acqfunctions_pi.Rd b/man/mlr_acqfunctions_pi.Rd index cc69d6e0..8f82a67c 100644 --- a/man/mlr_acqfunctions_pi.Rd +++ b/man/mlr_acqfunctions_pi.Rd @@ -33,7 +33,7 @@ if (requireNamespace("mlr3learners") & codomain = ps(y = p_dbl(tags = "minimize")) objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) - instance = OptimInstanceSingleCrit$new( + instance = OptimInstanceBatchSingleCrit$new( objective = objective, terminator = trm("evals", n_evals = 5)) diff --git a/man/mlr_acqfunctions_sd.Rd b/man/mlr_acqfunctions_sd.Rd index ab434ac9..9fdd0a57 100644 --- a/man/mlr_acqfunctions_sd.Rd +++ b/man/mlr_acqfunctions_sd.Rd @@ -33,7 +33,7 @@ if (requireNamespace("mlr3learners") & codomain = ps(y = p_dbl(tags = "minimize")) objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) - instance = OptimInstanceSingleCrit$new( + instance = OptimInstanceBatchSingleCrit$new( objective = objective, terminator = trm("evals", n_evals = 5)) diff --git a/man/mlr_acqfunctions_smsego.Rd b/man/mlr_acqfunctions_smsego.Rd index e5d6c865..78f23dd6 100644 --- a/man/mlr_acqfunctions_smsego.Rd +++ b/man/mlr_acqfunctions_smsego.Rd @@ -39,7 +39,7 @@ if (requireNamespace("mlr3learners") & codomain = ps(y1 = p_dbl(tags = "minimize"), y2 = p_dbl(tags = "minimize")) objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) - instance = OptimInstanceMultiCrit$new( + instance = OptimInstanceBatchMultiCrit$new( objective = objective, terminator = trm("evals", n_evals = 5)) diff --git a/man/mlr_loop_functions_ego.Rd b/man/mlr_loop_functions_ego.Rd index 1420a86d..72b7c6fc 100644 --- a/man/mlr_loop_functions_ego.Rd +++ b/man/mlr_loop_functions_ego.Rd @@ -15,8 +15,8 @@ bayesopt_ego( ) } \arguments{ -\item{instance}{(\link[bbotk:OptimInstanceSingleCrit]{bbotk::OptimInstanceSingleCrit})\cr -The \link[bbotk:OptimInstanceSingleCrit]{bbotk::OptimInstanceSingleCrit} to be optimized.} +\item{instance}{(\link[bbotk:OptimInstanceBatchSingleCrit]{bbotk::OptimInstanceBatchSingleCrit})\cr +The \link[bbotk:OptimInstanceBatchSingleCrit]{bbotk::OptimInstanceBatchSingleCrit} to be optimized.} \item{surrogate}{(\link{Surrogate})\cr \link{Surrogate} to be used as a surrogate. @@ -56,7 +56,7 @@ is chosen based on optimizing the acquisition function. \itemize{ \item The \code{acq_function$surrogate}, even if already populated, will always be overwritten by the \code{surrogate}. \item The \code{acq_optimizer$acq_function}, even if already populated, will always be overwritten by \code{acq_function}. -\item The \code{surrogate$archive}, even if already populated, will always be overwritten by the \link[bbotk:Archive]{bbotk::Archive} of the \link[bbotk:OptimInstanceSingleCrit]{bbotk::OptimInstanceSingleCrit}. +\item The \code{surrogate$archive}, even if already populated, will always be overwritten by the \link[bbotk:Archive]{bbotk::Archive} of the \link[bbotk:OptimInstanceBatchSingleCrit]{bbotk::OptimInstanceBatchSingleCrit}. } } \examples{ @@ -76,7 +76,7 @@ if (requireNamespace("mlr3learners") & codomain = ps(y = p_dbl(tags = "minimize")) objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) - instance = OptimInstanceSingleCrit$new( + instance = OptimInstanceBatchSingleCrit$new( objective = objective, terminator = trm("evals", n_evals = 5)) @@ -104,7 +104,7 @@ if (requireNamespace("mlr3learners") & codomain = ps(y = p_dbl(tags = "minimize"), time = p_dbl(tags = "time")) objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) - instance = OptimInstanceSingleCrit$new( + instance = OptimInstanceBatchSingleCrit$new( objective = objective, terminator = trm("evals", n_evals = 5)) diff --git a/man/mlr_loop_functions_emo.Rd b/man/mlr_loop_functions_emo.Rd index bcb212bc..6ce0885a 100644 --- a/man/mlr_loop_functions_emo.Rd +++ b/man/mlr_loop_functions_emo.Rd @@ -15,8 +15,8 @@ bayesopt_emo( ) } \arguments{ -\item{instance}{(\link[bbotk:OptimInstanceMultiCrit]{bbotk::OptimInstanceMultiCrit})\cr -The \link[bbotk:OptimInstanceMultiCrit]{bbotk::OptimInstanceMultiCrit} to be optimized.} +\item{instance}{(\link[bbotk:OptimInstanceBatchMultiCrit]{bbotk::OptimInstanceBatchMultiCrit})\cr +The \link[bbotk:OptimInstanceBatchMultiCrit]{bbotk::OptimInstanceBatchMultiCrit} to be optimized.} \item{surrogate}{(\link{SurrogateLearnerCollection})\cr \link{SurrogateLearnerCollection} to be used as a surrogate.} @@ -56,7 +56,7 @@ is chosen based on optimizing the acquisition function. \itemize{ \item The \code{acq_function$surrogate}, even if already populated, will always be overwritten by the \code{surrogate}. \item The \code{acq_optimizer$acq_function}, even if already populated, will always be overwritten by \code{acq_function}. -\item The \code{surrogate$archive}, even if already populated, will always be overwritten by the \link[bbotk:Archive]{bbotk::Archive} of the \link[bbotk:OptimInstanceMultiCrit]{bbotk::OptimInstanceMultiCrit}. +\item The \code{surrogate$archive}, even if already populated, will always be overwritten by the \link[bbotk:Archive]{bbotk::Archive} of the \link[bbotk:OptimInstanceBatchMultiCrit]{bbotk::OptimInstanceBatchMultiCrit}. } } \examples{ @@ -76,7 +76,7 @@ if (requireNamespace("mlr3learners") & codomain = ps(y1 = p_dbl(tags = "minimize"), y2 = p_dbl(tags = "minimize")) objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) - instance = OptimInstanceMultiCrit$new( + instance = OptimInstanceBatchMultiCrit$new( objective = objective, terminator = trm("evals", n_evals = 5)) diff --git a/man/mlr_loop_functions_mpcl.Rd b/man/mlr_loop_functions_mpcl.Rd index 7d56c763..1ee43738 100644 --- a/man/mlr_loop_functions_mpcl.Rd +++ b/man/mlr_loop_functions_mpcl.Rd @@ -17,8 +17,8 @@ bayesopt_mpcl( ) } \arguments{ -\item{instance}{(\link[bbotk:OptimInstanceSingleCrit]{bbotk::OptimInstanceSingleCrit})\cr -The \link[bbotk:OptimInstanceSingleCrit]{bbotk::OptimInstanceSingleCrit} to be optimized.} +\item{instance}{(\link[bbotk:OptimInstanceBatchSingleCrit]{bbotk::OptimInstanceBatchSingleCrit})\cr +The \link[bbotk:OptimInstanceBatchSingleCrit]{bbotk::OptimInstanceBatchSingleCrit} to be optimized.} \item{surrogate}{(\link{Surrogate})\cr \link{Surrogate} to be used as a surrogate. @@ -68,9 +68,9 @@ This is repeated \code{q - 1} times to obtain a total of \code{q} candidates tha \itemize{ \item The \code{acq_function$surrogate}, even if already populated, will always be overwritten by the \code{surrogate}. \item The \code{acq_optimizer$acq_function}, even if already populated, will always be overwritten by \code{acq_function}. -\item The \code{surrogate$archive}, even if already populated, will always be overwritten by the \link[bbotk:Archive]{bbotk::Archive} of the \link[bbotk:OptimInstanceSingleCrit]{bbotk::OptimInstanceSingleCrit}. +\item The \code{surrogate$archive}, even if already populated, will always be overwritten by the \link[bbotk:Archive]{bbotk::Archive} of the \link[bbotk:OptimInstanceBatchSingleCrit]{bbotk::OptimInstanceBatchSingleCrit}. \item To make use of parallel evaluations in the case of `q > 1, the objective -function of the \link[bbotk:OptimInstanceSingleCrit]{bbotk::OptimInstanceSingleCrit} must be implemented accordingly. +function of the \link[bbotk:OptimInstanceBatchSingleCrit]{bbotk::OptimInstanceBatchSingleCrit} must be implemented accordingly. } } \examples{ @@ -90,7 +90,7 @@ if (requireNamespace("mlr3learners") & codomain = ps(y = p_dbl(tags = "minimize")) objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) - instance = OptimInstanceSingleCrit$new( + instance = OptimInstanceBatchSingleCrit$new( objective = objective, terminator = trm("evals", n_evals = 7)) diff --git a/man/mlr_loop_functions_parego.Rd b/man/mlr_loop_functions_parego.Rd index f87fa2a6..8f8606d0 100644 --- a/man/mlr_loop_functions_parego.Rd +++ b/man/mlr_loop_functions_parego.Rd @@ -18,8 +18,8 @@ bayesopt_parego( ) } \arguments{ -\item{instance}{(\link[bbotk:OptimInstanceMultiCrit]{bbotk::OptimInstanceMultiCrit})\cr -The \link[bbotk:OptimInstanceMultiCrit]{bbotk::OptimInstanceMultiCrit} to be optimized.} +\item{instance}{(\link[bbotk:OptimInstanceBatchMultiCrit]{bbotk::OptimInstanceBatchMultiCrit})\cr +The \link[bbotk:OptimInstanceBatchMultiCrit]{bbotk::OptimInstanceBatchMultiCrit} to be optimized.} \item{surrogate}{(\link{SurrogateLearner})\cr \link{SurrogateLearner} to be used as a surrogate.} @@ -72,11 +72,11 @@ these scalarized values and optimizing the acquisition function. \itemize{ \item The \code{acq_function$surrogate}, even if already populated, will always be overwritten by the \code{surrogate}. \item The \code{acq_optimizer$acq_function}, even if already populated, will always be overwritten by \code{acq_function}. -\item The \code{surrogate$archive}, even if already populated, will always be overwritten by the \link[bbotk:Archive]{bbotk::Archive} of the \link[bbotk:OptimInstanceMultiCrit]{bbotk::OptimInstanceMultiCrit}. +\item The \code{surrogate$archive}, even if already populated, will always be overwritten by the \link[bbotk:Archive]{bbotk::Archive} of the \link[bbotk:OptimInstanceBatchMultiCrit]{bbotk::OptimInstanceBatchMultiCrit}. \item The scalarizations of the objective function values are stored as the \code{y_scal} column in the -\link[bbotk:Archive]{bbotk::Archive} of the \link[bbotk:OptimInstanceMultiCrit]{bbotk::OptimInstanceMultiCrit}. +\link[bbotk:Archive]{bbotk::Archive} of the \link[bbotk:OptimInstanceBatchMultiCrit]{bbotk::OptimInstanceBatchMultiCrit}. \item To make use of parallel evaluations in the case of `q > 1, the objective -function of the \link[bbotk:OptimInstanceMultiCrit]{bbotk::OptimInstanceMultiCrit} must be implemented accordingly. +function of the \link[bbotk:OptimInstanceBatchMultiCrit]{bbotk::OptimInstanceBatchMultiCrit} must be implemented accordingly. } } \examples{ @@ -96,7 +96,7 @@ if (requireNamespace("mlr3learners") & codomain = ps(y1 = p_dbl(tags = "minimize"), y2 = p_dbl(tags = "minimize")) objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) - instance = OptimInstanceMultiCrit$new( + instance = OptimInstanceBatchMultiCrit$new( objective = objective, terminator = trm("evals", n_evals = 5)) diff --git a/man/mlr_loop_functions_smsego.Rd b/man/mlr_loop_functions_smsego.Rd index 82284754..ab9c3199 100644 --- a/man/mlr_loop_functions_smsego.Rd +++ b/man/mlr_loop_functions_smsego.Rd @@ -15,8 +15,8 @@ bayesopt_smsego( ) } \arguments{ -\item{instance}{(\link[bbotk:OptimInstanceMultiCrit]{bbotk::OptimInstanceMultiCrit})\cr -The \link[bbotk:OptimInstanceMultiCrit]{bbotk::OptimInstanceMultiCrit} to be optimized.} +\item{instance}{(\link[bbotk:OptimInstanceBatchMultiCrit]{bbotk::OptimInstanceBatchMultiCrit})\cr +The \link[bbotk:OptimInstanceBatchMultiCrit]{bbotk::OptimInstanceBatchMultiCrit} to be optimized.} \item{surrogate}{(\link{SurrogateLearnerCollection})\cr \link{SurrogateLearnerCollection} to be used as a surrogate.} @@ -55,9 +55,9 @@ updated and the next candidate is chosen based on optimizing the acquisition fun \itemize{ \item The \code{acq_function$surrogate}, even if already populated, will always be overwritten by the \code{surrogate}. \item The \code{acq_optimizer$acq_function}, even if already populated, will always be overwritten by \code{acq_function}. -\item The \code{surrogate$archive}, even if already populated, will always be overwritten by the \link[bbotk:Archive]{bbotk::Archive} of the \link[bbotk:OptimInstanceMultiCrit]{bbotk::OptimInstanceMultiCrit}. +\item The \code{surrogate$archive}, even if already populated, will always be overwritten by the \link[bbotk:Archive]{bbotk::Archive} of the \link[bbotk:OptimInstanceBatchMultiCrit]{bbotk::OptimInstanceBatchMultiCrit}. \item Due to the iterative computation of the epsilon within the \link{mlr_acqfunctions_smsego}, requires the \link[bbotk:Terminator]{bbotk::Terminator} of -the \link[bbotk:OptimInstanceMultiCrit]{bbotk::OptimInstanceMultiCrit} to be a \link[bbotk:mlr_terminators_evals]{bbotk::TerminatorEvals}. +the \link[bbotk:OptimInstanceBatchMultiCrit]{bbotk::OptimInstanceBatchMultiCrit} to be a \link[bbotk:mlr_terminators_evals]{bbotk::TerminatorEvals}. } } \examples{ @@ -77,7 +77,7 @@ if (requireNamespace("mlr3learners") & codomain = ps(y1 = p_dbl(tags = "minimize"), y2 = p_dbl(tags = "minimize")) objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) - instance = OptimInstanceMultiCrit$new( + instance = OptimInstanceBatchMultiCrit$new( objective = objective, terminator = trm("evals", n_evals = 5)) diff --git a/man/mlr_optimizers_mbo.Rd b/man/mlr_optimizers_mbo.Rd index 1d987644..6a57a9ca 100644 --- a/man/mlr_optimizers_mbo.Rd +++ b/man/mlr_optimizers_mbo.Rd @@ -53,7 +53,7 @@ if (requireNamespace("mlr3learners") & codomain = ps(y = p_dbl(tags = "minimize")) objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) - instance = OptimInstanceSingleCrit$new( + instance = OptimInstanceBatchSingleCrit$new( objective = objective, terminator = trm("evals", n_evals = 5)) @@ -81,7 +81,7 @@ if (requireNamespace("mlr3learners") & codomain = ps(y1 = p_dbl(tags = "minimize"), y2 = p_dbl(tags = "minimize")) objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain) - instance = OptimInstanceMultiCrit$new( + instance = OptimInstanceBatchMultiCrit$new( objective = objective, terminator = trm("evals", n_evals = 5)) @@ -95,8 +95,8 @@ if (requireNamespace("mlr3learners") & } } } -\section{Super class}{ -\code{\link[bbotk:Optimizer]{bbotk::Optimizer}} -> \code{OptimizerMbo} +\section{Super classes}{ +\code{\link[bbotk:Optimizer]{bbotk::Optimizer}} -> \code{\link[bbotk:OptimizerBatch]{bbotk::OptimizerBatch}} -> \code{OptimizerMbo} } \section{Active bindings}{ \if{html}{\out{
}} @@ -153,7 +153,7 @@ Required packages are determined based on the \code{acq_function}, \code{surroga }} diff --git a/man/mlr_result_assigners_archive.Rd b/man/mlr_result_assigners_archive.Rd index 11e3c5a5..aa453a08 100644 --- a/man/mlr_result_assigners_archive.Rd +++ b/man/mlr_result_assigners_archive.Rd @@ -68,7 +68,7 @@ Assigns the result, i.e., the final point(s) to the instance. \subsection{Arguments}{ \if{html}{\out{
}} \describe{ -\item{\code{instance}}{(\link[bbotk:OptimInstanceSingleCrit]{bbotk::OptimInstanceSingleCrit} | \link[bbotk:OptimInstanceMultiCrit]{bbotk::OptimInstanceMultiCrit})\cr +\item{\code{instance}}{(\link[bbotk:OptimInstanceBatchSingleCrit]{bbotk::OptimInstanceBatchSingleCrit} | \link[bbotk:OptimInstanceBatchMultiCrit]{bbotk::OptimInstanceBatchMultiCrit})\cr The \link[bbotk:OptimInstance]{bbotk::OptimInstance} the final result should be assigned to.} } \if{html}{\out{
}} diff --git a/man/mlr_result_assigners_surrogate.Rd b/man/mlr_result_assigners_surrogate.Rd index 1a0d3251..68d57759 100644 --- a/man/mlr_result_assigners_surrogate.Rd +++ b/man/mlr_result_assigners_surrogate.Rd @@ -8,7 +8,7 @@ Result assigner that chooses the final point(s) based on a surrogate mean prediction of all evaluated points in the \link[bbotk:Archive]{bbotk::Archive}. This is especially useful in the case of noisy objective functions. -In the case of operating on an \link[bbotk:OptimInstanceMultiCrit]{bbotk::OptimInstanceMultiCrit} the \link{SurrogateLearnerCollection} must use as many learners as there are objective functions. +In the case of operating on an \link[bbotk:OptimInstanceBatchMultiCrit]{bbotk::OptimInstanceBatchMultiCrit} the \link{SurrogateLearnerCollection} must use as many learners as there are objective functions. } \examples{ result_assigner = ras("surrogate") @@ -82,7 +82,7 @@ If \verb{$surrogate} is \code{NULL}, \code{default_surrogate(instance)} is used \subsection{Arguments}{ \if{html}{\out{
}} \describe{ -\item{\code{instance}}{(\link[bbotk:OptimInstanceSingleCrit]{bbotk::OptimInstanceSingleCrit} | \link[bbotk:OptimInstanceMultiCrit]{bbotk::OptimInstanceMultiCrit})\cr +\item{\code{instance}}{(\link[bbotk:OptimInstanceBatchSingleCrit]{bbotk::OptimInstanceBatchSingleCrit} | \link[bbotk:OptimInstanceBatchMultiCrit]{bbotk::OptimInstanceBatchMultiCrit})\cr The \link[bbotk:OptimInstance]{bbotk::OptimInstance} the final result should be assigned to.} } \if{html}{\out{
}} diff --git a/man/mlr_tuners_mbo.Rd b/man/mlr_tuners_mbo.Rd index 67ea61da..1e625721 100644 --- a/man/mlr_tuners_mbo.Rd +++ b/man/mlr_tuners_mbo.Rd @@ -3,7 +3,7 @@ \name{mlr_tuners_mbo} \alias{mlr_tuners_mbo} \alias{TunerMbo} -\title{Tuner using Model Based Optimization} +\title{TunerBatch using Model Based Optimization} \description{ \code{TunerMbo} class that implements Model Based Optimization (MBO). This is a minimal interface internally passing on to \link{OptimizerMbo}. @@ -24,7 +24,7 @@ if (requireNamespace("mlr3learners") & resampling = rsmp("cv", folds = 3) measure = msr("classif.acc") - instance = TuningInstanceSingleCrit$new( + instance = TuningInstanceBatchSingleCrit$new( task = task, learner = learner, resampling = resampling, @@ -39,7 +39,7 @@ if (requireNamespace("mlr3learners") & resampling = rsmp("cv", folds = 3) measures = msrs(c("classif.acc", "selected_features")) - instance = TuningInstanceMultiCrit$new( + instance = TuningInstanceBatchMultiCrit$new( task = task, learner = learner, resampling = resampling, @@ -52,7 +52,7 @@ if (requireNamespace("mlr3learners") & } } \section{Super classes}{ -\code{\link[mlr3tuning:Tuner]{mlr3tuning::Tuner}} -> \code{\link[mlr3tuning:TunerFromOptimizer]{mlr3tuning::TunerFromOptimizer}} -> \code{TunerMbo} +\code{\link[mlr3tuning:Tuner]{mlr3tuning::Tuner}} -> \code{\link[mlr3tuning:TunerBatch]{mlr3tuning::TunerBatch}} -> \code{\link[mlr3tuning:TunerBatchFromOptimizerBatch]{mlr3tuning::TunerBatchFromOptimizerBatch}} -> \code{TunerMbo} } \section{Active bindings}{ \if{html}{\out{
}} @@ -109,7 +109,7 @@ Required packages are determined based on the \code{acq_function}, \code{surroga }} diff --git a/tests/testthat/helper.R b/tests/testthat/helper.R index fb330231..b3ea492d 100644 --- a/tests/testthat/helper.R +++ b/tests/testthat/helper.R @@ -75,9 +75,9 @@ OBJ_2D_NOISY = ObjectiveRFun$new(fun = FUN_2D_NOISY, domain = PS_2D, properties # Instance helper MAKE_INST = function(objective = OBJ_2D, search_space = PS_2D, terminator = trm("evals", n_evals = 10L)) { if (objective$codomain$length == 1L) { - OptimInstanceSingleCrit$new(objective = objective, search_space = search_space, terminator = terminator) + OptimInstanceBatchSingleCrit$new(objective = objective, search_space = search_space, terminator = terminator) } else { - OptimInstanceMultiCrit$new(objective = objective, search_space = search_space, terminator = terminator) + OptimInstanceBatchMultiCrit$new(objective = objective, search_space = search_space, terminator = terminator) } } @@ -195,10 +195,9 @@ expect_acqfunction = function(acqf) { expect_man_exists(acqf$man) } - sortnames = function(x) { if (!is.null(names(x))) { - x <- x[order(names(x), decreasing = TRUE)] + x = x[order(names(x), decreasing = TRUE)] } x } @@ -206,3 +205,4 @@ sortnames = function(x) { expect_equal_sorted = function(x, y, ...) { expect_equal(sortnames(x), sortnames(y), ...) } + diff --git a/tests/testthat/test_AcqOptimizer.R b/tests/testthat/test_AcqOptimizer.R index 681a8251..213963fe 100644 --- a/tests/testthat/test_AcqOptimizer.R +++ b/tests/testthat/test_AcqOptimizer.R @@ -4,7 +4,7 @@ test_that("AcqOptimizer API works", { skip_if_not_installed("rgenoud") # EI, random search - instance = OptimInstanceSingleCrit$new(OBJ_1D, terminator = trm("evals", n_evals = 5L)) + instance = OptimInstanceBatchSingleCrit$new(OBJ_1D, terminator = trm("evals", n_evals = 5L)) design = generate_design_grid(instance$search_space, resolution = 4L)$data instance$eval_batch(design) acqfun = AcqFunctionEI$new(SurrogateLearner$new(REGR_KM_DETERM, archive = instance$archive)) diff --git a/tests/testthat/test_TunerMbo.R b/tests/testthat/test_TunerMbo.R index f22edea9..35829d9b 100644 --- a/tests/testthat/test_TunerMbo.R +++ b/tests/testthat/test_TunerMbo.R @@ -10,7 +10,7 @@ test_that("TunerMbo works", { learner = lrn("classif.debug", x = to_tune()) - instance = TuningInstanceSingleCrit$new(tsk("iris"), learner = learner, resampling = rsmp("holdout"), measure = msr("classif.ce"), terminator = trm("evals", n_evals = 5L)) + instance = TuningInstanceBatchSingleCrit$new(tsk("iris"), learner = learner, resampling = rsmp("holdout"), measure = msr("classif.ce"), terminator = trm("evals", n_evals = 5L)) design = MAKE_DESIGN(instance) instance$eval_batch(design) @@ -31,7 +31,7 @@ test_that("Constructing TunerMbo and ABs", { skip_if_not_installed("rgenoud") learner = lrn("classif.debug", x = to_tune()) - instance = TuningInstanceSingleCrit$new(tsk("iris"), learner = learner, resampling = rsmp("holdout"), measure = msr("classif.ce"), terminator = trm("evals", n_evals = 5L)) + instance = TuningInstanceBatchSingleCrit$new(tsk("iris"), learner = learner, resampling = rsmp("holdout"), measure = msr("classif.ce"), terminator = trm("evals", n_evals = 5L)) surrogate = default_surrogate(instance) tuner = tnr("mbo", loop_function = bayesopt_ego, surrogate = surrogate, acq_function = AcqFunctionEI$new(), acq_optimizer = AcqOptimizer$new(opt("random_search", batch_size = 2L), terminator = trm("evals", n_evals = 2L))) expect_r6(tuner, classes = "TunerMbo") @@ -89,7 +89,7 @@ test_that("TunerMbo param_classes", { tuner = tnr("mbo") expect_equal(tuner$param_classes, c("ParamLgl", "ParamInt", "ParamDbl", "ParamFct")) - instance = TuningInstanceSingleCrit$new(tsk("iris"), learner = lrn("classif.debug", x = to_tune()), resampling = rsmp("holdout"), measure = msr("classif.ce"), terminator = trm("evals", n_evals = 5L)) + instance = TuningInstanceBatchSingleCrit$new(tsk("iris"), learner = lrn("classif.debug", x = to_tune()), resampling = rsmp("holdout"), measure = msr("classif.ce"), terminator = trm("evals", n_evals = 5L)) tuner$surrogate = default_surrogate(instance) expect_equal(tuner$param_classes, c("ParamLgl", "ParamInt", "ParamDbl")) tuner$acq_optimizer = AcqOptimizer$new(opt("nloptr"), terminator = trm("evals", n_evals = 2L)) @@ -103,7 +103,7 @@ test_that("TunerMbo properties", { tuner = tnr("mbo") expect_equal(tuner$properties, c("dependencies", "single-crit", "multi-crit")) - instance = TuningInstanceSingleCrit$new(tsk("iris"), learner = lrn("classif.debug", x = to_tune()), resampling = rsmp("holdout"), measure = msr("classif.ce"), terminator = trm("evals", n_evals = 5L)) + instance = TuningInstanceBatchSingleCrit$new(tsk("iris"), learner = lrn("classif.debug", x = to_tune()), resampling = rsmp("holdout"), measure = msr("classif.ce"), terminator = trm("evals", n_evals = 5L)) tuner$surrogate = default_surrogate(instance) expect_equal(tuner$properties, c("single-crit", "multi-crit")) tuner$loop_function = bayesopt_ego @@ -119,7 +119,7 @@ test_that("TunerMbo packages", { tuner = tnr("mbo") expect_equal(tuner$packages, "mlr3mbo") - instance = TuningInstanceSingleCrit$new(tsk("iris"), learner = lrn("classif.debug", x = to_tune()), resampling = rsmp("holdout"), measure = msr("classif.ce"), terminator = trm("evals", n_evals = 5L)) + instance = TuningInstanceBatchSingleCrit$new(tsk("iris"), learner = lrn("classif.debug", x = to_tune()), resampling = rsmp("holdout"), measure = msr("classif.ce"), terminator = trm("evals", n_evals = 5L)) tuner$surrogate = default_surrogate(instance) expect_equal(tuner$packages, c("mlr3mbo", "mlr3", "mlr3learners", "DiceKriging")) tuner$acq_optimizer = AcqOptimizer$new(opt("nloptr"), terminator = trm("evals", n_evals = 2L)) @@ -136,7 +136,7 @@ test_that("TunerMbo args", { expect_equal(tuner$args, list(test = 1)) tuner$loop_function = bayesopt_ego expect_error(tuner$args, "Must be a subset of \\{'init_design_size','random_interleave_iter'\\}, but has additional elements \\{'test'\\}.") - instance = TuningInstanceSingleCrit$new(tsk("iris"), learner = lrn("classif.debug", x = to_tune()), resampling = rsmp("holdout"), measure = msr("classif.ce"), terminator = trm("evals", n_evals = 5L)) + instance = TuningInstanceBatchSingleCrit$new(tsk("iris"), learner = lrn("classif.debug", x = to_tune()), resampling = rsmp("holdout"), measure = msr("classif.ce"), terminator = trm("evals", n_evals = 5L)) expect_error(tuner$optimize(instance), "Must be a subset of \\{'init_design_size','random_interleave_iter'\\}, but has additional elements \\{'test'\\}.") expect_equal(instance$archive$data, data.table()) tuner$args = list(random_interleave_iter = 1L) @@ -154,10 +154,10 @@ test_that("TunerMbo reset", { learner = lrn("classif.debug", x = to_tune()) learner$predict_type = "prob" - instance = TuningInstanceSingleCrit$new(tsk("iris"), learner = learner, resampling = rsmp("holdout"), measure = msr("classif.ce"), terminator = trm("evals", n_evals = 5L)) + instance = TuningInstanceBatchSingleCrit$new(tsk("iris"), learner = learner, resampling = rsmp("holdout"), measure = msr("classif.ce"), terminator = trm("evals", n_evals = 5L)) tuner$optimize(instance) - instance_mult = TuningInstanceMultiCrit$new(tsk("iris"), learner = learner, resampling = rsmp("holdout"), measure = msrs(c("classif.ce", "classif.logloss")), terminator = trm("evals", n_evals = 5L)) + instance_mult = TuningInstanceBatchMultiCrit$new(tsk("iris"), learner = learner, resampling = rsmp("holdout"), measure = msrs(c("classif.ce", "classif.logloss")), terminator = trm("evals", n_evals = 5L)) expect_error(tuner$optimize(instance_mult), "does not support multi-crit objectives") expect_loop_function(tuner$loop_function) diff --git a/tests/testthat/test_bayesopt_ego.R b/tests/testthat/test_bayesopt_ego.R index d0397dfd..ce2081a5 100644 --- a/tests/testthat/test_bayesopt_ego.R +++ b/tests/testthat/test_bayesopt_ego.R @@ -109,7 +109,7 @@ test_that("stable bayesopt_ego", { expect_true(nrow(instance$archive$data) == 5L) expect_number(acq_function$surrogate$assert_insample_perf, upper = 1) lines = readLines(f) - expect_true(sum(grepl("Optimizer Error", unlist(map(strsplit(lines, "\\[bbotk\\] "), 2L)))) == 1L) + # expect_true(sum(grepl("Optimizer Error", unlist(map(strsplit(lines, "\\[bbotk\\] "), 2L)))) == 1L) expect_true(sum(grepl("Proposing a randomly sampled point", unlist(map(strsplit(lines, "\\[bbotk\\] "), 2L)))) == 2L) # Surrogate using LearnerRegrError as Learner that will fail during train @@ -164,7 +164,7 @@ test_that("bayesopt_ego eips", { terminator = trm("evals", n_evals = 5L) - instance = OptimInstanceSingleCrit$new( + instance = OptimInstanceBatchSingleCrit$new( objective = objective, terminator = terminator ) diff --git a/tests/testthat/test_mbo_defaults.R b/tests/testthat/test_mbo_defaults.R index 6ae51460..7cef2365 100644 --- a/tests/testthat/test_mbo_defaults.R +++ b/tests/testthat/test_mbo_defaults.R @@ -118,7 +118,7 @@ test_that("default_acqfunction", { test_that("default_acqoptimizer", { acqopt = default_acqoptimizer(default_acqfunction(MAKE_INST_1D())) expect_r6(acqopt, "AcqOptimizer") - expect_r6(acqopt$optimizer, "OptimizerRandomSearch") + expect_r6(acqopt$optimizer, "OptimizerBatchRandomSearch") }) test_that("default_result_assigner", { @@ -164,7 +164,7 @@ test_that("stability and defaults", { acq_optimizer = acqo(opt("random_search", batch_size = 2L), terminator = trm("evals", n_evals = 2L)) acq_optimizer$param_set$values$logging_level = "info" expect_r6(acq_optimizer, "AcqOptimizer") - expect_r6(acq_optimizer$optimizer, "OptimizerRandomSearch") + expect_r6(acq_optimizer$optimizer, "OptimizerBatchRandomSearch") bayesopt_ego(instance, surrogate = surrogate, acq_function = acq_function, acq_optimizer = acq_optimizer) expect_true(nrow(instance$archive$data) == 5L) diff --git a/vignettes/mlr3mbo.Rmd b/vignettes/mlr3mbo.Rmd index 43066bc8..46576cc4 100644 --- a/vignettes/mlr3mbo.Rmd +++ b/vignettes/mlr3mbo.Rmd @@ -454,7 +454,7 @@ Note that important fields of an `OptimizerMbo` such as `$param_classes`, `$pack If arguments such as the `surrogate`, `acq_function`, `acq_optimizer` and `result_assigner` were not fully initialized during construction, e.g., the `surrogate` missing the `archive`, or the `acq_function` missing the `surrogate`, lazy initialization is completed prior to the optimizer being used for optimization. -An object of class `OptimizerMbo` can be used to optimize an object of class `r ref("bbotk::OptimInstanceSingleCrit", "OptimInstanceSingleCrit")` or `r ref("bbotk::OptimInstanceMultiCrit", "OptimInstanceMultiCrit")`. +An object of class `OptimizerMbo` can be used to optimize an object of class `r ref("bbotk::OptimInstanceBatchSingleCrit", "OptimInstanceBatchSingleCrit")` or `r ref("bbotk::OptimInstanceBatchMultiCrit", "OptimInstanceBatchMultiCrit")`. For hyperparameter optimization, `r ref("mlr3mbo::mlr_tuners_mbo", "TunerMbo")` should be used (which simply relies on an `OptimizerMbo` that is constructed internally): @@ -536,7 +536,7 @@ objective = ObjectiveRFun$new( domain = domain, codomain = codomain) -instance = OptimInstanceSingleCrit$new( +instance = OptimInstanceBatchSingleCrit$new( objective = objective, terminator = trm("evals", n_evals = 10)) @@ -630,7 +630,7 @@ objective = ObjectiveRFun$new( domain = domain, codomain = codomain) -instance = OptimInstanceSingleCrit$new( +instance = OptimInstanceBatchSingleCrit$new( objective = objective, search_space = domain, terminator = trm("evals", n_evals = 60)) @@ -686,7 +686,7 @@ objective = ObjectiveRFun$new( domain = domain, codomain = codomain) -instance = OptimInstanceMultiCrit$new( +instance = OptimInstanceBatchMultiCrit$new( objective = objective, search_space = domain, terminator = trm("evals", n_evals = 30)) @@ -743,7 +743,7 @@ objective = ObjectiveRFun$new( domain = domain, codomain = codomain) -instance = OptimInstanceMultiCrit$new( +instance = OptimInstanceBatchMultiCrit$new( objective = objective, search_space = domain, terminator = trm("evals", n_evals = 30)) @@ -798,7 +798,7 @@ learner = lrn("classif.rpart", resampling = rsmp("cv", folds = 3) measure = msr("classif.acc") -instance = TuningInstanceSingleCrit$new( +instance = TuningInstanceBatchSingleCrit$new( task = task, learner = learner, resampling = resampling, @@ -833,7 +833,7 @@ learner = lrn("classif.rpart", resampling = rsmp("cv", folds = 3) measures = msrs(c("classif.acc", "selected_features")) -instance = TuningInstanceMultiCrit$new( +instance = TuningInstanceBatchMultiCrit$new( task = task, learner = learner, resampling = resampling,