NEWS
mlr3tuning 1.7.0 (2026-09-02)
- refactor:
TunerBatchCmaes now calls libcmaesr::cmaes() instead of adagio::pureCMAES().
- feat: Tuning instances now accept plain
bbotk::CallbackBatch and bbotk::CallbackAsync objects as callbacks.
Tuning specific stages such as on_eval_after_design are skipped for these callbacks, while all bbotk stages are called with a ContextBatchTuning or ContextAsyncTuning.
mlr3tuning 1.6.1 (2026-07-26)
- compatibility: mlr3 1.7.2
- chore: Minimum required version of
rush is now 1.2.0.
Removed all compatibility workarounds for older versions.
- fix: The package now unions
mlr_reflections$tuner_properties on load instead of overwriting it, so a property registered by another extension package is no longer dropped, and it removes its registered callbacks and tuner property on unload.
- fix:
AutoTuner accessors ($learner, $tuning_instance, $tuning_result, $archive, $importance(), $selected_features(), $oob_error(), $loglik()) now raise an informative error when the model is marshaled, instead of silently returning the untrained learner or NULL.
- fix:
AutoTuner$marshaled is now an active binding as in mlr3::Learner, so at$marshaled returns a flag instead of a method and can be used in conditions.
- fix:
AutoTuner$train() now correctly checks that an instantiated inner resampling only uses row ids present in the task for all resampling types. Previously, the check read list-based instances and silently did nothing for resamplings such as cv and holdout.
- fix: Unmarshaling an
AutoTuner model with inplace = TRUE after a non-inplace marshal no longer drops the auto_tuner_model class, which had caused a subsequent marshal to become a no-op.
- fix:
auto_tuner(), AutoTuner$new(), and tune() now error at construction when a rush controller is supplied together with a batch tuner.
- fix: The
mlr3tuning.backup callback now errors at the start of the run when store_benchmark_result = FALSE instead of silently writing an empty benchmark result, and it no longer errors when the target file already exists.
- fix:
ArchiveBatchTuning$print() no longer prints the archive table twice.
- fix:
ArchiveAsyncTuning$benchmark_result now raises a clear error when the tuning instance was created with store_benchmark_result = FALSE. Previously, the first access overwrote the cached benchmark result with NULL and every later access failed with an unrelated error. Freezing such an archive with ArchiveAsyncTuningFrozen works now and returns an empty benchmark result.
- fix:
AutoTuner$hash now also depends on the predict_sets, validate, and use_weights settings so that autotuners differing only in these fields no longer share a hash.
- fix:
as.data.table.ArchiveAsyncTuning() and as.data.table.ArchiveAsyncTuningFrozen() no longer error when the measures argument is used on an archive that contains queued, running, or failed points.
The extra measures are NA for these points.
callback_async_tuning() and callback_batch_tuning() remove the deprecated on_result stage.
Use on_result_end instead.
- fix:
as_tuner() with clone = TRUE now performs a deep clone, so the returned tuner no longer shares its ParamSet with the input.
- fix:
as_search_space() no longer errors when converting a ParamSet that contains an unset required parameter.
- fix:
assert_async_tuning_callbacks() and assert_batch_tuning_callbacks() now check that each callback inherits from CallbackAsyncTuning and CallbackBatchTuning, respectively, so tuning instances reject callbacks of the wrong type at construction time.
- fix:
Tuner$id now validates new values on assignment, and Tuner$label correctly rejects modification instead of silently accepting some invalid assignments.
- fix:
as.data.table.ArchiveAsyncTuning(), as.data.table.ArchiveAsyncTuningFrozen(), and as.data.table.ArchiveBatchTuning() now warn instead of silently ignoring the measures argument when no benchmark result is stored.
- fix:
tnr("irace") destroyed its own configuration during $optimize() by removing n_instances from and writing instantiated resamplings into its param set, which made a second run of the same tuner or AutoTuner impossible. The param set is now restored after the run.
- fix:
clbk("mlr3tuning.async_one_se_rule") now stores an unnamed numeric in the n_features column of the archive, matching the batch callback.
- fix:
clbk("mlr3tuning.async_measures") now accepts a single measure in the measures argument like the batch version, instead of requiring a list of measures.
- fix:
ObjectiveTuningBatch now errors when the number of custom resamplings does not match the number of hyperparameter configurations. Previously, the resamplings were silently recycled, pairing configurations with the wrong resamplings.
- fix:
extract_inner_tuning_results() no longer modifies the result table of the stored tuning instances by reference. Previously, the iteration and tuning_instance columns were written into instance$result, and a stale tuning_instance column could leak into the output of a second call with tuning_instance = FALSE.
- fix:
TuningInstanceBatchMultiCrit$assign_result() and TuningInstanceAsyncMultiCrit$assign_result() produced wrong result_learner_param_vals when the search space was empty, because the number of measures instead of the number of Pareto points was used to recycle the parameter values.
- fix:
assign_result() of TuningInstanceBatchMultiCrit and TuningInstanceAsyncMultiCrit now validates learner_param_vals like the single-crit instances.
- fix:
AutoTuner$clone(deep = TRUE) now deep clones the wrapped learner, resampling, measure, terminator, callbacks, and the trained model. Previously, the clone shared these objects with the original, so for example setting the predict type on the clone also changed the original.
- fix:
clbk("mlr3tuning.one_se_rule") and clbk("mlr3tuning.async_one_se_rule") no longer crash at result assignment when the archive contains a single evaluation or points without a performance score (queued, running, or failed points). These points are now removed before the standard error is computed, so they no longer deflate the standard error.
mlr3tuning 1.6.0 (2026-03-16)
- compatibility: rush 1.0.0.
- fix:
ArchiveAsyncTuning, ArchiveAsyncTuningFrozen, and ArchiveBatchTuning convert the archive to a data.table with a consistent column order.
mlr3tuning 1.5.1 (2025-12-14)
- compatibility: xgboost 3.1.2.1
mlr3tuning 1.5.0 (2025-11-07)
- feat: Add
on_optimizer_queue_before_eval and on_optimizer_queue_after_eval stages to CallbackAsyncTuning.
- fix: Add loaded packages to objective.
- feat: Add tiny logging.
- fix: Remove internal search space and trafo error.
- fix: Unsatisfied dependencies in results in debug mode.
mlr3tuning 1.4.0 (2025-06-04)
- feat: Resample stages from
CallbackResample are now available in CallbackBatchTuning and CallbackAsyncTuning.
- fix: The
$predict_type was written to the model even when the AutoTuner was not trained.
- feat: Internal tuned values are now visible in logs.
- BREAKING CHANGE: Remove internal search space argument.
- BREAKING CHANGE: The mlr3 ecosystem has a base logger now which is named
mlr3.
The mlr3/bbotk logger is a child of the mlr3 logger and is used for logging messages from the bbotk and mlr3tuning package.
- feat: Classes are now printed with the
cli package.
mlr3tuning 1.3.0 (2024-12-17)
- feat: Save
ArchiveAsyncTuning to a data.table with ArchiveAsyncTuningFrozen.
- perf: Save models on worker only when requested in
ObjectiveTuningAsync.
mlr3tuning 1.2.1 (2024-11-26)
- refactor: Only pass
extra to $assign_result().
mlr3tuning 1.2.0 (2024-11-08)
- feat: Add new callback
clbk("mlr3tuning.one_se_rule") that selects the hyperparameter configuration with the smallest feature set within one standard error of the best.
- feat: Add new stages
on_tuning_result_begin and on_result_begin to CallbackAsyncTuning and CallbackBatchTuning.
- refactor: Rename stage
on_result to on_result_end in CallbackAsyncTuning and CallbackBatchTuning.
- docs: Extend the
CallbackAsyncTuning and CallbackBatchTuning documentation.
- compatibility: mlr3 0.22.0
- compatibility: Work with new irace 4.0.0
mlr3tuning 1.1.0 (2024-10-27)
- fix: The
as_data_table() functions do not unnest the x_domain column anymore by default.
- fix:
to_tune(internal = TRUE) now also works if non-internal tuning parameters have an .extra_trafo.
- feat: It is now possible to pass an
internal_search_space manually.
This allows to use parameter transformations on the primary search space in combination with internal hyperparameter tuning.
- refactor: The
Tuner pass extra information of the result in the extra parameter now.
mlr3tuning 1.0.2 (2024-10-14)
- refactor: Extract internal tuned values in instance.
mlr3tuning 1.0.1 (2024-09-10)
- refactor: Replace internal tuning callback.
- perf: Delete intermediate
BenchmarkResult in ObjectiveTuningBatch after optimization.
mlr3tuning 1.0.0 (2024-06-29)
- feat: Introduce asynchronous optimization with the
TunerAsync and TuningInstanceAsync* classes.
- BREAKING CHANGE: The
Tuner class is TunerBatch now.
- BREAKING CHANGE: The
TuningInstanceSingleCrit and TuningInstanceMultiCrit classes are TuningInstanceBatchSingleCrit and TuningInstanceBatchMultiCrit now.
- BREAKING CHANGE: The
CallbackTuning class is CallbackBatchTuning now.
- BREAKING CHANGE: The
ContextEval class is ContextBatchTuning now.
- refactor: Remove hotstarting from batch optimization due to low performance.
- refactor: The option
evaluate_default is a callback now.
mlr3tuning 0.20.0 (2024-03-05)
- compatibility: Work with new paradox version 1.0.0
- fix:
TunerIrace failed with logical parameters and dependencies.
- Added marshaling support to
AutoTuner
mlr3tuning 0.19.2 (2023-11-28)
- refactor: Change thread limits.
mlr3tuning 0.19.1 (2023-11-20)
- refactor: Speed up the tuning process by minimizing the number of deep clones and parameter checks.
- fix: Set
store_benchmark_result = TRUE if store_models = TRUE when creating a tuning instance.
- fix: Passing a terminator in
tune_nested() did not work.
mlr3tuning 0.19.0 (2023-06-26)
- fix: Add
$phash() method to AutoTuner.
- fix: Include
Tuner in hash of AutoTuner.
- feat: Add new callback that scores the configurations on additional measures while tuning.
- feat: Add vignette about adding new tuners which was previously part of the mlr3book.
mlr3tuning 0.18.0 (2023-03-08)
- BREAKING CHANGE: The
method parameter of tune(), tune_nested() and auto_tuner() is renamed to tuner.
Only Tuner objects are accepted now.
Arguments to the tuner cannot be passed with ... anymore.
- BREAKING CHANGE: The
tuner parameter of AutoTuner is moved to the first position to achieve consistency with the other functions.
- docs: Update resources sections.
- docs: Add list of default measures.
- fix: Add
allow_hotstarting, keep_hotstart_stack and keep_models flags to AutoTuner and auto_tuner().
mlr3tuning 0.17.2 (2022-12-22)
- feat:
AutoTuner accepts instantiated resamplings now.
The AutoTuner checks if all row ids of the inner resampling are present in the outer resampling train set when nested resampling is performed.
- fix: Standalone
Tuner did not create a ContextOptimization.
mlr3tuning 0.17.1 (2022-12-07)
- fix: The
ti() function did not accept callbacks.
mlr3tuning 0.17.0 (2022-11-18)
- feat: The methods
$importance(), $selected_features(), $oob_error() and $loglik() are forwarded from the final model to the AutoTuner now.
- refactor: The
AutoTuner stores the instance and benchmark result if store_models = TRUE.
- refactor: The
AutoTuner stores the instance if store_benchmark_result = TRUE.
mlr3tuning 0.16.0 (2022-11-08)
- feat: Add new callback that enables early stopping while tuning to
mlr_callbacks.
- feat: Add new callback that backups the benchmark result to disk after each batch.
- feat: Create custom callbacks with the
callback_batch_tuning() function.
mlr3tuning 0.15.0 (2022-10-21)
- fix:
AutoTuner did not accept TuningSpace objects as search spaces.
- feat: Add
ti() function to create a TuningInstanceSingleCrit or TuningInstanceMultiCrit.
- docs: Documentation has a technical details section now.
- feat: New option for
extract_inner_tuning_results() to return the tuning instances.
mlr3tuning 0.14.0 (2022-08-25)
- feat: Add option
evaluate_default to evaluate learners with hyperparameters set to their default values.
- refactor: From now on, the default of
smooth is FALSE for TunerGenSA.
mlr3tuning 0.13.1 (2022-05-03)
- feat:
Tuner objects have the field $id now.
mlr3tuning 0.13.0 (2022-04-06)
- feat: Allow to pass
Tuner objects as method in tune() and auto_tuner().
- docs: Link
Tuner to help page of bbotk::Optimizer.
- feat:
Tuner objects have the optional field $label now.
- feat:
as.data.table() functions for objects of class Dictionary have been extended with additional columns.
mlr3tuning 0.12.1 (2022-02-25)
- feat: Add a
as.data.table.DictionaryTuner function.
- feat: New
$help() method which opens the manual page of a Tuner.
mlr3tuning 0.12.0 (2022-02-17)
- feat:
as_search_space() function to create search spaces from Learner and ParamSet objects.
Allow to pass TuningSpace objects as search_space in TuningInstanceSingleCrit and TuningInstanceMultiCrit.
- feat: The
mlr3::HotstartStack can now be removed after tuning with the keep_hotstart_stack flag.
- feat: The
Archive stores errors and warnings of the learners.
- feat: When no measure is provided, the default measure is used in
auto_tuner() and tune_nested().
mlr3tuning 0.11.0 (2022-02-02)
- fix:
$assign_result() method in TuningInstanceSingleCrit when search space is empty.
- feat: Default measure is used when no measure is supplied to
TuningInstanceSingleCrit.
mlr3tuning 0.10.0 (2022-01-20)
- Fixes bug in
TuningInstanceMultiCrit$assign_result().
- Hotstarting of learners with previously fitted models.
- Remove deep clones to speed up tuning.
- Add
store_models flag to auto_tuner().
- Add
"noisy" property to ObjectiveTuning.
mlr3tuning 0.9.0 (2021-09-14)
- Adds
AutoTuner$base_learner() method to extract the base learner from
nested learner objects.
tune() supports multi-criteria tuning.
- Allows empty search space.
- Adds
TunerIrace from irace package.
extract_inner_tuning_archives() helper function to extract inner tuning
archives.
- Removes
ArchiveTuning$extended_archive() method. The mlr3::ResampleResults
are joined automatically by as.data.table.TuningArchive() and
extract_inner_tuning_archives().
mlr3tuning 0.8.0 (2021-03-12)
- Adds
tune(), auto_tuner() and tune_nested() sugar functions.
TuningInstanceSingleCrit, TuningInstanceMultiCrit and AutoTuner can be
initialized with store_benchmark_result = FALSE and store_models = TRUE
to allow measures to access the models.
- Prettier printing methods.
mlr3tuning 0.7.0 (2021-02-11)
- Fix
TuningInstance*$assign_result() errors with required parameter bug.
- Shortcuts to access
$learner(), $learners(), $learner_param_vals(),
$predictions() and $resample_result() from benchmark result in archive.
extract_inner_tuning_results() helper function to extract inner tuning
results.
mlr3tuning 0.6.0 (2021-01-24)
ArchiveTuning$data is a public field now.
mlr3tuning 0.5.0 (2020-12-07)
- Adds
TunerCmaes from adagio package.
- Fix
predict_type in AutoTuner.
- Support to set
TuneToken in Learner$param_set and create a search space
from it.
- The order of the parameters in
TuningInstanceSingleCrit and
TuningInstanceSingleCrit changed.
mlr3tuning 0.4.0 (2020-10-07)
- Option to control
store_benchmark_result, store_models and check_values
in AutoTuner. store_tuning_instance must be set as a parameter during
initialization.
- Fixes
check_values flag in TuningInstanceSingleCrit and
TuningInstanceMultiCrit.
- Removed dependency on orphaned package
bibtex.
mlr3tuning 0.3.0 (2020-09-08)
- Compact in-memory representation of R6 objects to save space when
saving mlr3 objects via
saveRDS(), serialize() etc.
Archive is ArchiveTuning now which stores the benchmark result in
$benchmark_result. This change removed the resample results from the archive
but they can be still accessed via the benchmark result.
- Warning message if external package for tuning is not installed.
- To retrieve the inner tuning results in nested resampling,
as.data.table(rr)$learner[[1]]$tuning_result must be used now.
mlr3tuning 0.2.0 (2020-07-28)
TuningInstance is now TuningInstanceSingleCrit. TuningInstanceMultiCrit
is still available for multi-criteria tuning.
- Terminators are now accessible by
trm() and trms() instead of term() and
terms().
- Storing of resample results is optional now by using the
store_resample_result flag in TuningInstanceSingleCrit and
TuningInstanceMultiCrit
TunerNLoptr adds non-linear optimization from the nloptr package.
- Logging is controlled by the
bbotk logger now.
- Proposed points and performance values can be checked for validity by
activating the
check_values flag in TuningInstanceSingleCrit and
TuningInstanceMultiCrit.
mlr3tuning 0.1.3
- mlr3tuning now depends on the
bbotk package for basic tuning objects.
Terminator classes now live in bbotk. As a consequence ObjectiveTuning
inherits from bbotk::Objective, TuningInstance from bbotk::OptimInstance
and Tuner from bbotk::Optimizer
TuningInstance$param_set becomes TuningInstance$search_space to avoid
confusion as the param_set usually contains the parameters that change the
behavior of an object.
- Tuning is triggered by
$optimize() instead of $tune()
mlr3tuning 0.1.2 (2020-01-31)
- Fixed a bug in
AutoTuner where a $clone() was missing. Tuning results are
unaffected, only stored models contained wrong hyperparameter values (#223).
- Improved output log (#218).
mlr3tuning 0.1.1 (2019-12-06)
mlr3tuning 0.1.0 (2019-09-30)