Skip to content

mlr3mbo 1.2.0

Choose a tag to compare

@be-marc be-marc released this 21 Jul 11:12
  • 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.