AcqOptimizer | R Documentation |
Optimizer for AcqFunctions which performs the acquisition function optimization. Wraps an bbotk::Optimizer and bbotk::Terminator.
n_candidates
integer(1)
Number of candidate points to propose.
Note that this does not affect how the acquisition function itself is calculated (e.g., setting n_candidates > 1
will not
result in computing the q- or multi-Expected Improvement) but rather the top n_candidates
are selected from the
bbotk::Archive of the acquisition function bbotk::OptimInstance.
Note that setting n_candidates > 1
is usually not a sensible idea but it is still supported for experimental reasons.
Note that in the case of the acquisition function bbotk::OptimInstance being multi-criteria, due to using an AcqFunctionMulti,
selection of the best candidates is performed via non-dominated-sorting.
Default is 1
.
logging_level
character(1)
Logging level during the acquisition function optimization.
Can be "fatal"
, "error"
, "warn"
, "info"
, "debug"
or "trace"
.
Default is "warn"
, i.e., only warnings are logged.
warmstart
logical(1)
Should the acquisition function optimization be warm-started by evaluating the best point(s) present in the bbotk::Archive of
the actual bbotk::OptimInstance (which is contained in the archive of the AcqFunction)?
This is sensible when using a population based acquisition function optimizer, e.g., local search or mutation.
Default is FALSE
.
Note that in the case of the bbotk::OptimInstance being multi-criteria, selection of the best point(s) is performed via non-dominated-sorting.
warmstart_size
integer(1) | "all"
Number of best points selected from the bbotk::Archive of the actual bbotk::OptimInstance that are to be used for warm starting.
Can either be an integer or "all" to use all available points.
Only relevant if warmstart = TRUE
.
Default is 1
.
skip_already_evaluated
logical(1)
It can happen that the candidate(s) resulting of the acquisition function optimization were already evaluated on the actual bbotk::OptimInstance.
Should such candidate proposals be ignored and only candidates that were yet not evaluated be considered?
Default is TRUE
.
catch_errors
logical(1)
Should errors during the acquisition function optimization be caught and propagated to the loop_function
which can then handle
the failed acquisition function optimization appropriately by, e.g., proposing a randomly sampled point for evaluation?
Setting this to FALSE
can be helpful for debugging.
Default is TRUE
.
optimizer
(bbotk::Optimizer).
terminator
(bbotk::Terminator).
acq_function
(AcqFunction).
callbacks
(NULL
| list of mlr3misc::Callback).
print_id
(character
)
Id used when printing.
param_set
(paradox::ParamSet)
Set of hyperparameters.
new()
Creates a new instance of this R6 class.
AcqOptimizer$new(optimizer, terminator, acq_function = NULL, callbacks = NULL)
optimizer
(bbotk::Optimizer).
terminator
(bbotk::Terminator).
acq_function
(NULL
| AcqFunction).
callbacks
(NULL
| list of mlr3misc::Callback)
format()
Helper for print outputs.
AcqOptimizer$format()
(character(1)
).
print()
Print method.
AcqOptimizer$print()
(character()
).
optimize()
Optimize the acquisition function.
AcqOptimizer$optimize()
data.table::data.table()
with 1 row per candidate.
clone()
The objects of this class are cloneable with this method.
AcqOptimizer$clone(deep = FALSE)
deep
Whether to make a deep clone.
if (requireNamespace("mlr3learners") &
requireNamespace("DiceKriging") &
requireNamespace("rgenoud")) {
library(bbotk)
library(paradox)
library(mlr3learners)
library(data.table)
fun = function(xs) {
list(y = xs$x ^ 2)
}
domain = ps(x = p_dbl(lower = -10, upper = 10))
codomain = ps(y = p_dbl(tags = "minimize"))
objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain)
instance = OptimInstanceBatchSingleCrit$new(
objective = objective,
terminator = trm("evals", n_evals = 5))
instance$eval_batch(data.table(x = c(-6, -5, 3, 9)))
learner = default_gp()
surrogate = srlrn(learner, archive = instance$archive)
acq_function = acqf("ei", surrogate = surrogate)
acq_function$surrogate$update()
acq_function$update()
acq_optimizer = acqo(
optimizer = opt("random_search", batch_size = 1000),
terminator = trm("evals", n_evals = 1000),
acq_function = acq_function)
acq_optimizer$optimize()
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.