Extends an MBO control object with infill criteria and infill optimizer options.

setMBOControlTermination(control, iters = NULL, time.budget = NULL,
  exec.time.budget = NULL, target.fun.value = NULL, max.evals = NULL,
  more.termination.conds = list(), use.for.adaptive.infill = NULL)

Arguments

control

[MBOControl]
Control object for mbo.

iters

[integer(1)]
Number of sequential optimization steps.

time.budget

[integer(1) | NULL]
Running time budget in seconds. Note that the actual mbo run can take more time since the condition is checked after each iteration. The default NULL means: There is no time budget.

exec.time.budget

[integer(1) | NULL]
Execution time (time spent executing the function passed to mbo) budget in seconds. Note that the actual mbo run can take more time since the condition is checked after each iteration. The default NULL means: There is no execution time budget.

target.fun.value

[numeric(1)] | NULL]
Termination criterion for single-objective optimization: Stop if a function evaluation is better than this given target.value. The default NULL means: The function value won't be taken into account for termination.

max.evals

[integer(1) | NULL]
Maximal number of function evaluations. The default NULL means: The total number of evaluations won't be taken into account for termination.

more.termination.conds

[list]
Optional list of termination conditions. Each condition needs to be a function of a single argument opt.state of type OptState and should return a list with the following elements:

term [logical(1)]

Logical value indicating whether the termination condition is met.

message [character(1)]

Termination message. At the moment we just allow term.custom.

use.for.adaptive.infill

[character(1)|NULL]
Which termination criterion should determine the progress that is used for adaptive infill criteria like [makeMBOInfillCritAdaCB]. The default is NULL which means, that the first supplied argument is taken, following the order of the function signature. Other values can be "iters", "time.budget", etc.
If you want to to use it together with a criterion you supplied in more.termination.conds, more.termination.conds has to be a named list and the function further has to return a list element progress with values between 0 and 1.

Value

[MBOControl].

See also

Examples

fn = smoof::makeSphereFunction(1L) ctrl = makeMBOControl() # custom termination condition (stop if target function value reached) # We neglect the optimization direction (min/max) in this example. yTargetValueTerminator = function(y.val) { force(y.val) function(opt.state) { opt.path = opt.state$opt.path current.best = getOptPathEl(opt.path, getOptPathBestIndex((opt.path)))$y term = (current.best <= y.val) message = if (!term) NA_character_ else sprintf("Target function value %f reached.", y.val) return(list(term = term, message = message)) } } # assign custom termination condition ctrl = setMBOControlTermination(ctrl, more.termination.conds = list(yTargetValueTerminator(0.05))) res = mbo(fn, control = ctrl) print(res)
#> Recommended parameters: #> x=0.0042 #> Objective: y = 0.000 #> #> Optimization path #> 4 + 1 entries in total, displaying last 10 (or less): #> x y dob eol error.message exec.time cb error.model #> 1 4.68194391 2.192060e+01 0 NA <NA> 0.001 NA <NA> #> 2 0.57912163 3.353819e-01 0 NA <NA> 0.000 NA <NA> #> 3 -3.19594558 1.021407e+01 0 NA <NA> 0.000 NA <NA> #> 4 -0.58781997 3.455323e-01 0 NA <NA> 0.000 NA <NA> #> 5 0.00420156 1.765310e-05 1 NA <NA> 0.000 -1.86575 <NA> #> train.time prop.type propose.time se mean lambda #> 1 NA initdesign NA NA NA NA #> 2 NA initdesign NA NA NA NA #> 3 NA initdesign NA NA NA NA #> 4 NA initdesign NA NA NA NA #> 5 0.06 infill_cb 0.194 1.490817 -0.3749323 1