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

[numeric(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

[numeric(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].

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)
#> Computing y column(s) for design. Not provided.
#> [mbo] 0: x=-4.06 : y = 16.5 : 0.0 secs : initdesign
#> [mbo] 0: x=-0.944 : y = 0.891 : 0.0 secs : initdesign
#> [mbo] 0: x=3.51 : y = 12.3 : 0.0 secs : initdesign
#> [mbo] 0: x=1.9 : y = 3.61 : 0.0 secs : initdesign
#> [mbo] 1: x=4.81 : y = 23.1 : 0.0 secs : infill_cb
#> [mbo] 2: x=0.208 : y = 0.0431 : 0.0 secs : infill_cb
print(res)
#> Recommended parameters:
#> x=0.208
#> Objective: y = 0.043
#> 
#> Optimization path
#> 4 + 2 entries in total, displaying last 10 (or less):
#>            x           y dob eol error.message exec.time        cb error.model
#> 1 -4.0569278 16.45866318   0  NA          <NA>         0        NA        <NA>
#> 2 -0.9440384  0.89120857   0  NA          <NA>         0        NA        <NA>
#> 3  3.5054652 12.28828641   0  NA          <NA>         0        NA        <NA>
#> 4  1.8996595  3.60870635   0  NA          <NA>         0        NA        <NA>
#> 5  4.8095286 23.13156581   1  NA          <NA>         0  1.999662        <NA>
#> 6  0.2075882  0.04309285   2  NA          <NA>         0 -3.785834        <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.037  infill_cb        0.226 6.312054 8.311716      1
#> 6      0.042  infill_cb        0.250 4.891340 1.105506      1