Skip to contents

mlr3mbo (development version)

mlr3mbo 1.2.0

CRAN release: 2026-07-21

  • fix: acqo() now raises an error when terminator or callbacks are combined with a dictionary key as optimizer, because these arguments were silently discarded before.
  • fix: AcqOptimizer now respects warmstart_size when warm-starting a single-objective acquisition function on a multi-objective archive, instead of evaluating the entire non-dominated front.
  • fix: AcqOptimizer and its subclasses gained $label and $man fields, so that as.data.table(mlr_acqoptimizers) no longer errors.
  • fix: AcqOptimizer no longer attaches an x_domain to the proposed candidates, so the archive stores the transformed values computed by the instance instead of a stale or untransformed x_domain, which was incorrect under a search space transformation or after clipping out-of-bounds candidates to the bounds.
  • fix: bayesopt_mpcl() now logs a warning when a surrogate or acquisition function error is caught and a randomly sampled point is proposed, consistent with the other loop functions.
  • fix: bayesopt_mpcl() no longer aborts when a batch mixes model-based proposals and randomly sampled fallback points, because the batch is now combined with filling missing columns.
  • fix: bayesopt_mpcl() and bayesopt_parego() now advance the random interleaving counter per proposal instead of per batch, so random interleaving also triggers for q > 1 as documented.
  • fix: bayesopt_parego() now subsets the minimization multiplier to the target columns, so the scalarization signs no longer misalign when the codomain holds non-target columns.
  • fix: bayesopt_ego(), bayesopt_emo(), bayesopt_mpcl(), bayesopt_parego(), and bayesopt_smsego() no longer silently disable random interleaving when the archive already contains a user-supplied initial design and init_design_size is NULL.
  • fix: bayesopt_parego() no longer silently degrades to random search when an objective is constant, because the zero-range scaling now maps the constant objective to a constant value instead of NaN.
  • fix: AcqFunctionAEI no longer errors during $update() when the surrogate model is not a "regr.km" model and now falls back to a noise variance of 0 as documented.
  • fix: AcqFunctionEHVI, AcqFunctionEHVIGH, and AcqFunctionSmsEgo now apply the surrogate’s output transformation to ys_front, so the front and the reference point are compared on the same scale.
  • fix: AcqFunctionEHVIGH no longer prunes all Gauss-Hermite nodes when their weights are tied, which previously made the acquisition function identically 0 for k = 2.
  • feat: AcqFunctionEHVIGH now computes the hypervolume via the moocore package instead of emoa, which is no longer a dependency (#186).
  • fix: AcqFunctionEI, AcqFunctionEILog, AcqFunctionPI, and AcqFunctionStochasticEI now ignore the missing outcomes of pending evaluations when determining the best observed value, so y_best is no longer NA on an asynchronous archive with more than one worker.
  • fix: AcqFunctionEIPS now correctly divides the expected improvement by the predicted time instead of behaving like plain expected improvement.
  • fix: AcqFunctionSmsEgo now accepts a lambda below 1 during construction, consistent with the lower bound of its constants parameter set.
  • fix: AcqFunctionMulti now raises an informative error when the wrapped acquisition functions do not share the same domain instead of failing with a cryptic type error.
  • fix: AcqFunctionMulti can now be deep cloned without error and preserves the shared surrogate across the wrapped acquisition functions.
  • fix: AcqFunctionStochasticCB now clears the sampled lambda on $reset(), so a reused optimizer draws a fresh initial lambda for each run as documented.
  • BREAKING CHANGE: AcqOptimizerDirect no longer supports restarts and its restart_strategy and max_restarts parameters have been removed, because the deterministic NLOPT_GN_DIRECT_L algorithm ignores the starting point, so restarts only repeated the identical search with a smaller evaluation budget.
  • fix: AcqOptimizerDirect, AcqOptimizerLbfgsb, AcqOptimizerLocalSearch, and AcqOptimizerRandomSearch now support the skip_already_evaluated parameter (default TRUE) and reject an already evaluated candidate, so an AcqOptimizerLbfgsb starting at the incumbent no longer re-proposes and re-evaluates the same point every iteration.
  • fix: AcqOptimizerDirect, AcqOptimizerLbfgsb, AcqOptimizerLocalSearch, and AcqOptimizerRandomSearch can now be deep cloned without error.
  • fix: AcqOptimizerDirect and AcqOptimizerLbfgsb no longer expose the minf_max parameter, which was not a valid nloptr option and was silently ignored.
  • fix: AcqOptimizerDirect and AcqOptimizerLbfgsb now accept maxeval = -1L to deactivate the evaluation limit, as documented.
  • fix: AcqOptimizerDirect and AcqOptimizerLbfgsb now raise an informative error for non-numeric search spaces instead of failing confusingly inside nloptr or silently degrading to random search under catch_errors = TRUE.
  • fix: AcqOptimizerDirect and AcqOptimizerLbfgsb now reset their state at the start of each optimize() call and clear it on reset(), so the state no longer grows unboundedly across a Bayesian optimization loop.
  • fix: AcqOptimizerLbfgsb now raises a catchable acquisition function optimizer error instead of an unrelated error when no restart produces a valid solution, so the loop function can fall back to a randomly sampled point.
  • fix: AcqOptimizerLbfgsb no longer fails when the incumbent lies on a search space bound, which previously caused the optimization to silently degenerate into random search.
  • fix: InputTrafoUnitcube now raises an informative error for infinite bounds and maps degenerate parameters with equal lower and upper bounds to a constant, instead of producing NaN features that fail inside the surrogate learner.
  • fix: default_acqfunction() now raises an informative error for unsupported instance classes instead of returning invisible NULL.
  • fix: AcqOptimizerLocalSearch now populates its state field with the result of the last bbotk::local_search() call and clears it on reset(), and no longer references the unavailable cmaes package in its documentation.
  • fix: OptimizerADBO and TunerADBO now draw the initial lambda from an exponential distribution as documented, so that the lambda parameter has an effect.
  • fix: OptimizerMbo and TunerMbo now update the surrogate a final time even when the optimization exits through a termination error, e.g., when the archive is already at budget or the terminator triggers between two evaluations.
  • fix: OptimizerMbo and OptimizerAsyncMbo no longer abort a successful run when the final surrogate update fails with a plain error, e.g., when the surrogate is configured with catch_errors = FALSE.
  • fix: OptimizerAsyncMbo, OptimizerADBO, TunerAsyncMbo, and TunerADBO now perform the final surrogate update on the main process, so the user-facing surrogate reflects all available data after optimization instead of remaining untrained.
  • fix: OptimizerAsyncMbo now proposes a randomly sampled point when the archive contains no finished evaluations yet, instead of failing to train the surrogate on an empty archive.
  • fix: mlr_loop_functions$get() now raises an error when additional arguments are passed, because loop functions are stored as plain values and the arguments were silently discarded before.
  • fix: OutputTrafo$max_to_min now requires a named vector whose names match $cols_y, so invalid assignments fail immediately instead of causing a subscript error during the transformation.
  • fix: OptimizerAsyncMbo and TunerAsyncMbo now raise an informative error when the param_set construction argument is not a ParamSet.
  • fix: OptimizerAsyncMbo no longer ignores its id construction argument, so OptimizerADBO and TunerADBO now correctly report the id "adbo" instead of "async_mbo".
  • fix: OutputTrafoLog and OutputTrafoStandardize no longer produce NaN or Inf values when all observed outcomes are identical.
  • fix: OutputTrafoLog$inverse_transform_posterior() no longer errors on mean-only predictions of a response-only learner; the mean is inverted with a variance of zero and no se column is fabricated.
  • fix: OutputTrafoStandardize$inverse_transform_posterior() no longer fabricates an all-NA se column for mean-only predictions of a response-only learner.
  • fix: OutputTrafoLog no longer produces infinite values when the range of the observed outcomes is tiny relative to their magnitude, because the epsilon padding is now floored at the local floating point precision.
  • fix: ResultAssignerSurrogate no longer errors when the archive contains duplicated x-configurations.
  • fix: srlrn() now correctly unwraps a single learner supplied in a list instead of erroring.
  • fix: srlrn() now implements the documented replication of a single learner when cols_y or the archive reference more than one target variable, returning a SurrogateLearnerCollection with deep clones of the learner.
  • fix: TunerAsyncMbo now accepts the documented result_assigner construction argument and forwards it to OptimizerAsyncMbo.
  • fix: Surrogate now provides default output_trafo and output_trafo_must_be_considered fields, so third-party subclasses work with the acquisition functions without implementing output transformation support.
  • fix: SurrogateLearner$predict() no longer modifies the data.table passed as xdt by reference.
  • fix: SurrogateLearner and SurrogateLearnerCollection now validate assignments to the learner, input_trafo, and output_trafo fields, so invalid values are rejected immediately instead of failing later during updating or predicting.
  • fix: SurrogateLearner$predict() now always returns a data.table with columns mean and se as documented, instead of a bare named list in configurations without an inverting output transformation.

mlr3mbo 1.1.1

CRAN release: 2026-04-24

  • fix: acqo() now correctly returns the mlr_acqoptimizers dictionary when called with no arguments (#211).
  • fix: AcqFunctionEILog now provides a more informative error message when the surrogate is not configured with the correct output transformation.
  • fix: AcqOptimizerDirect and AcqOptimizerLbfgsb now correctly enforce the max_restarts limit in all cases.
  • fix: SurrogateLearner and SurrogateLearnerCollection now correctly apply their output transformation after imputing running evaluations.

mlr3mbo 1.1.0

CRAN release: 2026-03-18

  • compatibility: rush 1.0.0 (#202).
  • feat: Surrogate gained a $check() method (#200).

mlr3mbo 1.0.0

CRAN release: 2026-02-27

  • feat: Added mlr_acqoptimizers dictionary with pre-defined acquisition function optimizers (AcqOptimizerDirect, AcqOptimizerLbfgsb, AcqOptimizerLocalSearch, AcqOptimizerRandomSearch).
  • perf: Default surrogate model, acquisition function, optimizer, and further settings of OptimizerMbo are now empirically derived from a large-scale benchmark study, significantly improving out-of-the-box optimization performance.
  • feat: Added Mlr3ErrorMbo* condition classes.

mlr3mbo 0.3.3

CRAN release: 2025-10-10

  • compatibility: bbotk 1.7.0

mlr3mbo 0.3.2

CRAN release: 2025-10-02

  • compatibility: mlr3learners 0.13.0

mlr3mbo 0.3.1

CRAN release: 2025-08-19

  • chore: maintainer change.
  • chore: work with new mlr3pipelines version 0.9.0 (fix for tests only).
  • test: expect_rush_reset changes related to rush developments.
  • fix: allow InputTrafoUnitcube to work in mixed spaces.

mlr3mbo 0.3.0

CRAN release: 2025-06-03

  • fix: logger changes related to bbotk.
  • fix: assure that candidates after acquisition function optimization are always within bounds.
  • perf: minor changes to speed up predictions with SurrogateLearner and SurrogateLearnerCollection.
  • feat: added supported for input and output transformations (see InputTrafo, OutputTrafo and the related classes).
  • refactor: dropped functionality to assert insample performance of the surrogate model completely.

mlr3mbo 0.2.9

CRAN release: 2025-03-04

  • chore: silence rush logger and fixed some partial matches, depend on mlr3 >= 0.22.1.
  • test: fix test_AcqFunctionMulti, robustify helper and loading.
  • test: fix test_ResultAssignerArchive and test_ResultAssignerSurrogate due to upcoming changes of internal tuned values in mlr3tuning 1.3.1.

mlr3mbo 0.2.8

CRAN release: 2024-11-21

  • docs: gracefully exit examples of OptimizerAsyncMbo, OptimizerADBO, TunerAsyncMbo, and TunerADBO if Redis is not available.
  • test: skip tests involving asynchronous logic if Redis is not available.

mlr3mbo 0.2.7

CRAN release: 2024-11-15

  • refactor: refactored SurrogateLearner and SurrogateLearnerCollection to allow updating on an asynchronous Archive.
  • feat: added experimental OptimizerAsyncMbo, OptimizerADBO, TunerAsyncMbo, and TunerADBO that allow for asynchronous optimization.
  • feat: added AcqFunctionStochasticCB and AcqFunctionStochasticEI that are useful for asynchronous optimization.
  • docs: minor changes to highlight differences between batch and asynchronous objects related to asynchronous support.
  • refactor: AcqFunctions and AcqOptimizer gained a reset() method.

mlr3mbo 0.2.6

CRAN release: 2024-10-16

  • refactor: extract internal tuned values in instance.

mlr3mbo 0.2.5

CRAN release: 2024-09-24

  • docs: move vignette to mlr3book.
  • feat: add AcqFunctionMulti that can wrap multiple acquisition functions resulting in a multi-objective acquisition function problem.
  • feat: support callbacks in AcqOptimizer.
  • feat: allow AcqFunctionEI to be adjusted by epsilon to strengthen exploration.

mlr3mbo 0.2.4

CRAN release: 2024-07-06

  • fix: improve runtime of AcqOptimizer by setting check_values = FALSE.

mlr3mbo 0.2.3

CRAN release: 2024-07-01

  • compatibility: work with new bbotk and mlr3tuning version 1.0.0.

mlr3mbo 0.2.2

CRAN release: 2024-03-01

  • refactor: compatibility with upcoming paradox upgrade.
  • feat: OptimizerMbo and TunerMbo now update the Surrogate a final time after the optimization process finished to ensure that the Surrogate correctly reflects the state of being trained on all data seen during optimization.
  • fix: AcqFunction domain construction now respects Surrogate cols_x field.
  • feat: support more than one candidate point as a result of acquisition function optimization even for non-batch acquisition functions.
  • feat: added default_gp and default_rf helpers that allow for construction of a default Gaussian Process and random forest as for example used within default_surrogate.
  • refactor: changed Gaussian Process and random forest defaults (in default_gp and default_rf and therefore also in default_surrogate). Gaussian Process now uses a "matern5_2" kernel. Random forest now uses 100 trees. The number of trees used in the fallback random forest was reduced to 10.

mlr3mbo 0.2.1

CRAN release: 2023-06-05

  • docs: updated some references in vignette.
  • refactor: minor clean up of the internal structure of all loop functions.
  • perf: default initial design constructed based on a Sobol sequence in all loop functions.
  • refactor: no longer depend on mlr3tuning but import instead.
  • refactor: srlrn sugar function now can construct both a SurrogateLearner and SurrogateLearnerCollection; dropped srlrnc.
  • feat: added AcqFunctionSD, AcqFunctionEHVI and AcqFunctionEHVIGH, introduced bayesopt_emo loop function.
  • feat: AcqFunctions now include a $packages field stating required packages which are checked for whether their namespace can be loaded prior to optimization.
  • fix: fixed bug in fix_xdt_missing() helper function.
  • BREAKING CHANGE: renaming default_loopfun -> default_loop_function, default_acqfun -> default_acqfunction, default_acqopt -> default_acqoptimizer.
  • BREAKING CHANGE: result_functions now replaced by ResultAssigners.
  • BREAKING CHANGE: renamed $model field of all Surrogate classes to $learner.
  • BREAKING CHANGE: For all Surrogate and AcquisitionFunction classes fields *_cols renamed to cols_* (e.g., x_cols to cols_x).

mlr3mbo 0.1.2

CRAN release: 2023-03-02

  • refactor: adapt to mlr3tuning 0.18.0.
  • feat: acquisition functions now assert whether surrogates match their required predict type.
  • fix: unloading mlr3mbo removes optimizers and tuners from the dictionaries.
  • docs: faster examples.
  • feat: characters in surrogate regression tasks are no longer automatically converted to factors. default_surrogate now respects this and gained an appropriate pipeline step.
  • feat: AcqFunctionAEI added.
  • docs: fix of docs, README and bibentries.

mlr3mbo 0.1.1

CRAN release: 2022-11-18

  • Initial upload to CRAN.