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
)
[MBOControl
]
Control object for mbo.
[integer(1)
]
Number of sequential optimization steps.
[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.
[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.
[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.
[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.
[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:
logical(1)
]Logical value indicating whether the termination condition is met.
character(1)
]Termination message. At the moment we just allow term.custom
.
[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.
[MBOControl
].
Other MBOControl:
makeMBOControl()
,
setMBOControlInfill()
,
setMBOControlMultiObj()
,
setMBOControlMultiPoint()
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