Changelog
Source:NEWS.md
mlr3mbo 1.2.0
CRAN release: 2026-07-21
- fix:
acqo()now raises an error whenterminatororcallbacksare combined with a dictionary key asoptimizer, because these arguments were silently discarded before. - fix:
AcqOptimizernow respectswarmstart_sizewhen warm-starting a single-objective acquisition function on a multi-objective archive, instead of evaluating the entire non-dominated front. - fix:
AcqOptimizerand its subclasses gained$labeland$manfields, so thatas.data.table(mlr_acqoptimizers)no longer errors. - fix:
AcqOptimizerno longer attaches anx_domainto the proposed candidates, so the archive stores the transformed values computed by the instance instead of a stale or untransformedx_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()andbayesopt_parego()now advance the random interleaving counter per proposal instead of per batch, so random interleaving also triggers forq > 1as 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(), andbayesopt_smsego()no longer silently disable random interleaving when the archive already contains a user-supplied initial design andinit_design_sizeisNULL. - 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 ofNaN. - fix:
AcqFunctionAEIno longer errors during$update()when the surrogate model is not a"regr.km"model and now falls back to a noise variance of0as documented. - fix:
AcqFunctionEHVI,AcqFunctionEHVIGH, andAcqFunctionSmsEgonow apply the surrogate’s output transformation toys_front, so the front and the reference point are compared on the same scale. - fix:
AcqFunctionEHVIGHno longer prunes all Gauss-Hermite nodes when their weights are tied, which previously made the acquisition function identically0fork = 2. - feat:
AcqFunctionEHVIGHnow computes the hypervolume via themoocorepackage instead ofemoa, which is no longer a dependency (#186). - fix:
AcqFunctionEI,AcqFunctionEILog,AcqFunctionPI, andAcqFunctionStochasticEInow ignore the missing outcomes of pending evaluations when determining the best observed value, soy_bestis no longerNAon an asynchronous archive with more than one worker. - fix:
AcqFunctionEIPSnow correctly divides the expected improvement by the predicted time instead of behaving like plain expected improvement. - fix:
AcqFunctionSmsEgonow accepts alambdabelow1during construction, consistent with the lower bound of itsconstantsparameter set. - fix:
AcqFunctionMultinow raises an informative error when the wrapped acquisition functions do not share the same domain instead of failing with a cryptic type error. - fix:
AcqFunctionMultican now be deep cloned without error and preserves the shared surrogate across the wrapped acquisition functions. - fix:
AcqFunctionStochasticCBnow clears the sampled lambda on$reset(), so a reused optimizer draws a fresh initial lambda for each run as documented. - BREAKING CHANGE:
AcqOptimizerDirectno longer supports restarts and itsrestart_strategyandmax_restartsparameters have been removed, because the deterministicNLOPT_GN_DIRECT_Lalgorithm ignores the starting point, so restarts only repeated the identical search with a smaller evaluation budget. - fix:
AcqOptimizerDirect,AcqOptimizerLbfgsb,AcqOptimizerLocalSearch, andAcqOptimizerRandomSearchnow support theskip_already_evaluatedparameter (defaultTRUE) and reject an already evaluated candidate, so anAcqOptimizerLbfgsbstarting at the incumbent no longer re-proposes and re-evaluates the same point every iteration. - fix:
AcqOptimizerDirect,AcqOptimizerLbfgsb,AcqOptimizerLocalSearch, andAcqOptimizerRandomSearchcan now be deep cloned without error. - fix:
AcqOptimizerDirectandAcqOptimizerLbfgsbno longer expose theminf_maxparameter, which was not a validnloptroption and was silently ignored. - fix:
AcqOptimizerDirectandAcqOptimizerLbfgsbnow acceptmaxeval = -1Lto deactivate the evaluation limit, as documented. - fix:
AcqOptimizerDirectandAcqOptimizerLbfgsbnow raise an informative error for non-numeric search spaces instead of failing confusingly insidenloptror silently degrading to random search undercatch_errors = TRUE. - fix:
AcqOptimizerDirectandAcqOptimizerLbfgsbnow reset theirstateat the start of eachoptimize()call and clear it onreset(), so thestateno longer grows unboundedly across a Bayesian optimization loop. - fix:
AcqOptimizerLbfgsbnow 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:
AcqOptimizerLbfgsbno longer fails when the incumbent lies on a search space bound, which previously caused the optimization to silently degenerate into random search. - fix:
InputTrafoUnitcubenow raises an informative error for infinite bounds and maps degenerate parameters with equal lower and upper bounds to a constant, instead of producingNaNfeatures that fail inside the surrogate learner. - fix:
default_acqfunction()now raises an informative error for unsupported instance classes instead of returning invisibleNULL. - fix:
AcqOptimizerLocalSearchnow populates itsstatefield with the result of the lastbbotk::local_search()call and clears it onreset(), and no longer references the unavailablecmaespackage in its documentation. - fix:
OptimizerADBOandTunerADBOnow draw the initial lambda from an exponential distribution as documented, so that thelambdaparameter has an effect. - fix:
OptimizerMboandTunerMbonow 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:
OptimizerMboandOptimizerAsyncMbono longer abort a successful run when the final surrogate update fails with a plain error, e.g., when the surrogate is configured withcatch_errors = FALSE. - fix:
OptimizerAsyncMbo,OptimizerADBO,TunerAsyncMbo, andTunerADBOnow 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:
OptimizerAsyncMbonow 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_minnow requires a named vector whose names match$cols_y, so invalid assignments fail immediately instead of causing a subscript error during the transformation. - fix:
OptimizerAsyncMboandTunerAsyncMbonow raise an informative error when theparam_setconstruction argument is not aParamSet. - fix:
OptimizerAsyncMbono longer ignores itsidconstruction argument, soOptimizerADBOandTunerADBOnow correctly report the id"adbo"instead of"async_mbo". - fix:
OutputTrafoLogandOutputTrafoStandardizeno longer produceNaNorInfvalues 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 nosecolumn is fabricated. - fix:
OutputTrafoStandardize$inverse_transform_posterior()no longer fabricates an all-NAsecolumn for mean-only predictions of a response-only learner. - fix:
OutputTrafoLogno 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:
ResultAssignerSurrogateno 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 whencols_yor thearchivereference more than one target variable, returning aSurrogateLearnerCollectionwith deep clones of the learner. - fix:
TunerAsyncMbonow accepts the documentedresult_assignerconstruction argument and forwards it toOptimizerAsyncMbo. - fix:
Surrogatenow provides defaultoutput_trafoandoutput_trafo_must_be_consideredfields, so third-party subclasses work with the acquisition functions without implementing output transformation support. - fix:
SurrogateLearner$predict()no longer modifies the data.table passed asxdtby reference. - fix:
SurrogateLearnerandSurrogateLearnerCollectionnow validate assignments to thelearner,input_trafo, andoutput_trafofields, so invalid values are rejected immediately instead of failing later during updating or predicting. - fix:
SurrogateLearner$predict()now always returns adata.tablewith columnsmeanandseas 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 themlr_acqoptimizersdictionary when called with no arguments (#211). - fix:
AcqFunctionEILognow provides a more informative error message when the surrogate is not configured with the correct output transformation. - fix:
AcqOptimizerDirectandAcqOptimizerLbfgsbnow correctly enforce themax_restartslimit in all cases. - fix:
SurrogateLearnerandSurrogateLearnerCollectionnow correctly apply their output transformation after imputing running evaluations.
mlr3mbo 1.0.0
CRAN release: 2026-02-27
- feat: Added
mlr_acqoptimizersdictionary with pre-defined acquisition function optimizers (AcqOptimizerDirect,AcqOptimizerLbfgsb,AcqOptimizerLocalSearch,AcqOptimizerRandomSearch). - perf: Default surrogate model, acquisition function, optimizer, and further settings of
OptimizerMboare 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.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_resetchanges related to rush developments. - fix: allow
InputTrafoUnitcubeto 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
SurrogateLearnerandSurrogateLearnerCollection. - feat: added supported for input and output transformations (see
InputTrafo,OutputTrafoand 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_ResultAssignerArchiveandtest_ResultAssignerSurrogatedue 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, andTunerADBOif 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
SurrogateLearnerandSurrogateLearnerCollectionto allow updating on an asynchronousArchive. - feat: added experimental
OptimizerAsyncMbo,OptimizerADBO,TunerAsyncMbo, andTunerADBOthat allow for asynchronous optimization. - feat: added
AcqFunctionStochasticCBandAcqFunctionStochasticEIthat are useful for asynchronous optimization. - docs: minor changes to highlight differences between batch and asynchronous objects related to asynchronous support.
- refactor:
AcqFunctions andAcqOptimizergained areset()method.
mlr3mbo 0.2.5
CRAN release: 2024-09-24
- docs: move vignette to mlr3book.
- feat: add
AcqFunctionMultithat can wrap multiple acquisition functions resulting in a multi-objective acquisition function problem. - feat: support callbacks in
AcqOptimizer. - feat: allow
AcqFunctionEIto be adjusted by epsilon to strengthen exploration.
mlr3mbo 0.2.4
CRAN release: 2024-07-06
- fix: improve runtime of
AcqOptimizerby settingcheck_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:
OptimizerMboandTunerMbonow update theSurrogatea final time after the optimization process finished to ensure that theSurrogatecorrectly reflects the state of being trained on all data seen during optimization. - fix:
AcqFunctiondomain construction now respectsSurrogatecols_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_gpanddefault_rfhelpers that allow for construction of a default Gaussian Process and random forest as for example used withindefault_surrogate. - refactor: changed Gaussian Process and random forest defaults (in
default_gpanddefault_rfand therefore also indefault_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
mlr3tuningbut import instead. - refactor:
srlrnsugar function now can construct both aSurrogateLearnerandSurrogateLearnerCollection; droppedsrlrnc. - feat: added
AcqFunctionSD,AcqFunctionEHVIandAcqFunctionEHVIGH, introducedbayesopt_emoloop function. - feat:
AcqFunctions now include a$packagesfield 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 byResultAssigners. - BREAKING CHANGE: renamed
$modelfield of allSurrogateclasses to$learner. - BREAKING CHANGE: For all
SurrogateandAcquisitionFunctionclasses fields*_colsrenamed tocols_*(e.g.,x_colstocols_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
mlr3mboremoves optimizers and tuners from the dictionaries. - docs: faster examples.
- feat: characters in surrogate regression tasks are no longer automatically converted to factors.
default_surrogatenow respects this and gained an appropriate pipeline step. - feat:
AcqFunctionAEIadded. - docs: fix of docs, README and bibentries.