The Objective
object specifies the framework for an objective function
for numerical optimization.
Active bindings
objective_name
[
character(1)
]
The label for the objective function.fixed_arguments
[
character()
, read-only]
The name(s) of the fixed argument(s) (if any).seconds
[
numeric(1)
]
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
[
logical(1)
]
Hide warnings when evaluating the objective function?verbose
[
logical(1)
]
Print status messages?npar
[
integer()
, read-only]
The length of each target argument.target
[
character()
, read-only]
The argument name(s) that get optimized.gradient_specified
[
logical(1)
, read-only]
Whether a gradient function has been specified via$set_gradient()
.hessian_specified
[
logical(1)
, read-only]
Whether a Hessian function has been specified via$set_hessian()
.
Methods
Method new()
Creates a new Objective
object.
Usage
Objective$new(f, target = NULL, npar, ...)
Arguments
f
[
function
]
Afunction
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.target
[
character()
]
The argument name(s) that get optimized.All target arguments must be
numeric
.Can be
NULL
(default), then the first function argument is selected.npar
[
integer()
]
The length of each target argument, i.e., the length(s) of thenumeric
vector
argument(s) specified bytarget
....
Optionally additional function arguments that are fixed during the optimization.
Method set_gradient()
Set a gradient function.
Usage
Objective$set_gradient(
gradient,
target = self$target,
npar = self$npar,
...,
.verbose = self$verbose
)
Arguments
gradient
[
function
]
Afunction
that computes the gradient of the objective functionf
.It is expected that
gradient
has the same call asf
, and thatgradient
returns anumeric
vector
of lengthself$npar
.target
[
character()
]
The argument name(s) that get optimized.All target arguments must be
numeric
.Can be
NULL
(default), then the first function argument is selected.npar
[
integer()
]
The length of each target argument, i.e., the length(s) of thenumeric
vector
argument(s) specified bytarget
....
Optionally additional function arguments that are fixed during the optimization.
.verbose
[
logical(1)
]
Print status messages?
Method set_hessian()
Set a Hessian function.
Usage
Objective$set_hessian(
hessian,
target = self$target,
npar = self$npar,
...,
.verbose = self$verbose
)
Arguments
hessian
[
function
]
Afunction
that computes the Hessian of the objective functionf
.It is expected that
hessian
has the same call asf
, and thathessian
returns anumeric
matrix
of dimensionself$npar
timesself$npar
.target
[
character()
]
The argument name(s) that get optimized.All target arguments must be
numeric
.Can be
NULL
(default), then the first function argument is selected.npar
[
integer()
]
The length of each target argument, i.e., the length(s) of thenumeric
vector
argument(s) specified bytarget
....
Optionally additional function arguments that are fixed during the optimization.
.verbose
[
logical(1)
]
Print status messages?
Method evaluate()
Evaluate the objective function.
Usage
Objective$evaluate(
.at,
.negate = FALSE,
.gradient_as_attribute = FALSE,
.gradient_attribute_name = "gradient",
.hessian_as_attribute = FALSE,
.hessian_attribute_name = "hessian",
...
)
Arguments
.at
[
numeric()
]
The values for the target argument(s), written in a single vector.Must be of length
sum(self$npar)
..negate
[
logical(1)
]
Negate the function return value?.gradient_as_attribute
[`logical(1)]
Add the value of the gradient function as an attribute to the output?The attribute name is defined via the
.gradient_attribute_name
argument.Ignored if
$gradient_specified
isFALSE
..gradient_attribute_name
[
character(1)\]\cr Only relevant if
.gradient_as_attribute = TRUE`.In that case, the attribute name for the gradient (if available).
.hessian_as_attribute
[`logical(1)]
Add the value of the Hessian function as an attribute to the output?The attribute name is defined via the
.hessian_attribute_name
argument.Ignored if
$hessian_specified
isFALSE
..hessian_attribute_name
[
character(1)\]\cr Only relevant if
.hessian_as_attribute = TRUE`.In that case, the attribute name for the Hessian (if available).
...
Optionally additional function arguments that are fixed during the optimization.
Method evaluate_gradient()
Evaluate the gradient function.
Arguments
.at
[
numeric()
]
The values for the target argument(s), written in a single vector.Must be of length
sum(self$npar)
..negate
[
logical(1)
]
Negate the function return value?...
Optionally additional function arguments that are fixed during the optimization.
Method evaluate_hessian()
Evaluate the Hessian function.
Arguments
.at
[
numeric()
]
The values for the target argument(s), written in a single vector.Must be of length
sum(self$npar)
..negate
[
logical(1)
]
Negate the function return value?...
Optionally additional function arguments that are fixed during the optimization.
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))
}
### optimize 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 at 1:5 (1:2 is passed to mu, 3:4 to sd, and 5 to lambda)
objective$evaluate(1:5)
#> [1] -1069.623