Objective {optimizeR} | R Documentation |
Specify objective function
Description
The Objective
object specifies the framework for an objective function
for numerical optimization.
Value
An Objective
object.
Active bindings
objective_name
A
character
, a label for the objective function.fixed_arguments
A
character
, the names of the fixed arguments (if any).seconds
A
numeric
, a time limit in seconds. Computations are interrupted prematurely ifseconds
is exceeded.No time limit if
seconds = Inf
(the default).Note the limitations documented in
setTimeLimit
.hide_warnings
Either
TRUE
to hide warnings when evaluating the objective function, orFALSE
(default) if not.verbose
Either
TRUE
(default) to print status messages, orFALSE
to hide those.npar
An
integer
vector, defining the length of each target argument.output_template
A template of the expected output value, used for the
validate
method.
Methods
Public methods
Method new()
Creates a new Objective
object.
Usage
Objective$new(f, target = NULL, npar, ...)
Arguments
f
A
function
to be optimized.It is expected that
f
has at least onenumeric
argument.Further, it is expected that the return value of
f
is of the structurenumeric(1)
, i.e. a singlenumeric
value (although this can be altered via theoutput_template
field).target
A
character
, the argument name(s) off
that get optimized.All target arguments must receive a
numeric
vector
.Can be
NULL
(default), then it is the first argument off
.npar
A
integer
of the same length astarget
, defining the length of the respectivenumeric
vector
argument....
Optionally additional arguments to
f
that are fixed during the optimization.
Returns
A new Objective
object.
Method set_argument()
Set a fixed function argument.
Usage
Objective$set_argument(..., overwrite = TRUE, verbose = self$verbose)
Arguments
...
Optionally additional arguments to
f
that are fixed during the optimization.overwrite
Either
TRUE
(default) to allow overwriting, orFALSE
if not.verbose
Either
TRUE
(default) to print status messages, orFALSE
to hide those.
Returns
Invisibly the Objective
object.
Method get_argument()
Get a fixed function argument.
Usage
Objective$get_argument(argument_name, verbose = self$verbose)
Arguments
argument_name
A
character
, a name of an argument forf
.verbose
Either
TRUE
(default) to print status messages, orFALSE
to hide those.
Returns
The argument value.
Method remove_argument()
Remove a fixed function argument.
Usage
Objective$remove_argument(argument_name, verbose = self$verbose)
Arguments
argument_name
A
character
, a name of an argument forf
.verbose
Either
TRUE
(default) to print status messages, orFALSE
to hide those.
Returns
Invisibly the Objective
object.
Method validate()
Validate an Objective
object.
Usage
Objective$validate(.at)
Arguments
.at
A
numeric
of lengthsum(self$npar)
, the values for the target arguments written in a single vector.
Returns
Invisibly the Objective
object.
Method evaluate()
Evaluate the objective function.
Usage
Objective$evaluate(.at, .negate = FALSE, ...)
Arguments
.at
A
numeric
of lengthsum(self$npar)
, the values for the target arguments written in a single vector..negate
Either
TRUE
to negate thenumeric
return value off
, orFALSE
(default) else....
Optionally additional arguments to
f
that are fixed during the optimization.
Returns
The objective value.
Method print()
Print details of the Objective
object.
Usage
Objective$print()
Returns
Invisibly the Objective
object.
Method clone()
The objects of this class are cloneable with this method.
Usage
Objective$clone(deep = FALSE)
Arguments
deep
Whether to make a deep clone.
Examples
### define log-likelihood function of Gaussian mixture model
llk <- function(mu, sd, lambda, data) {
sd <- exp(sd)
lambda <- plogis(lambda)
cluster_1 <- lambda * dnorm(data, mu[1], sd[1])
cluster_2 <- (1 - lambda) * dnorm(data, mu[2], sd[2])
sum(log(cluster_1 + cluster_2))
}
### the log-likelihood function is supposed to be optimized over the first
### three arguments, the 'data' argument is constant
objective <- Objective$new(
f = llk, target = c("mu", "sd", "lambda"), npar = c(2, 2, 1),
data = faithful$eruptions
)
### evaluate the objective function at 1:5 (1:2 is passed to mu, 3:4 to sd,
### and 5 to lambda)
objective$evaluate(1:5)