
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()
# NOT RUN {
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)
# }
Run the code above in your browser using DataLab