ucminf
Generalpurpose unconstrained nonlinear optimization
An algorithm for generalpurpose unconstrained nonlinear optimization. The algorithm is of quasiNewton type with BFGS updating of the inverse Hessian and soft line search with a trust region type monitoring of the input to the line search algorithm. The interface of ‘ucminf’ is designed for easy interchange with ‘optim’.
Usage
ucminf(par, fn, gr = NULL, ..., control = list(), hessian=0)
Arguments
 par

Initial estimate of minimum for
fn
.  fn
 Objective function to be minimized.
 gr

Gradient of objective function. If
NULL
a finite difference approximation is used.  ...
 Optional arguments passed to the objective and gradient functions.
 control
 A list of control parameters. See ‘Details’.
 hessian

Integer value:
 0
 No hessian approximation is returned.
 1
 Returns a numerical approximation of the Hessian using ‘hessian’ in the package ‘numDeriv’.
 2
 Returns final approximation of the inverse Hessian based on the series of BFGS updates during optimization.
 3
 Same at 2, but will also return the Hessian (the inverse of 2).
If a
TRUE
orFALSE
value is given it will switch between option 1 or 0.
Details
The algorithm is documented in (Nielsen, 2000) (see References below) together with a comparison to the Fortran subroutine ‘MINF’ and the Matlab function ‘fminunc’. The implementation of ‘ucminf’ in R uses the original Fortran version of the algorithm.
The interface in R is designed so that it is very easy to switch
between using ‘ucminf’ and ‘optim’. The
arguments par
, fn
, gr
, and hessian
are all the same (with a few extra options for hessian
in
‘ucminf’). The difference is that there is no method
argument in ‘ucminf’ and that some of the components in the
control
argument are different due to differences in the
algorithms.
The algorithm can be given an initial estimate of the Hessian for the optimization and it is possible to get the final approximation of the Hessian based on the series of BFGS updates. This extra functionality may be useful for optimization in a series of related problems.
The functions fn
and gr
can return Inf
or NaN
if the functions cannot be evaluated at the supplied value, but the
functions must be computable at the initial value. The functions
are not allowed to return NA
. Any names given to par
will be
copied to the vectors passed to fn
and gr
. No
other attributes of par
are copied over.
The control
argument is a list that can supply any of the
following components:
trace
 If trace is positive then detailed tracing information is printed for each iteration.
grtol
grtol = 1e6.
xtol
xtol = 1e12.
stepmax
stepmax = 1
.
maxeval
maxeval = 500
.
grad
grad = 'forward'
.
gradstep
gradstep = c(1e6, 1e8)
.
invhessian.lt
H0
is the initial hessian matrix then
the lower triangle of the inverse of H0
can be found as
invhessian.lt = solve(H0)[lower.tri(H0,diag=TRUE)]
.
Value
 par
 Computed minimizer.
 value
 Objective function value at computed minimizer.
 convergence
 Flag for reason of termination:
 1
 Stopped by small gradient (grtol).
 2
 Stopped by small step (xtol).
 3
 Stopped by function evaluation limit (maxeval).
 4
 Stopped by zero step from line search
 2
 Computation did not start: length(par) = 0.
 4
 Computation did not start: stepmax is too small.
 5
 Computation did not start: grtol or xtol <= 0.<="" dd="">
 6
 Computation did not start: maxeval <= 0.<="" dd="">
 7
 Computation did not start: given Hessian not pos. definite.
 maxgradient
 $F'(x)_inf$, the largest element in the absolute value of the gradient at the computed minimizer.
 laststep
 Length of last step.
 stepmax
 Final maximal allowed step length.
 neval
 Number of calls to both objective and gradient function.
References
Nielsen, H. B. (2000) ‘UCMINF  An Algorithm For Unconstrained, Nonlinear Optimization’, Report IMMREP200018, Department of Mathematical Modelling, Technical University of Denmark. http://www2.imm.dtu.dk/~hbn/publ/TR0019.ps or http://orbit.dtu.dk/recid/200975.
The original Fortran source code can be found at http://www2.imm.dtu.dk/~hbn/Software/ucminf.f. The code has been slightly modified in this package to be suitable for use with R.
The general structure of the implementation in R is based on the package ‘FortranCallsR’ by Diethelm Wuertz.
See Also
Examples
## Rosenbrock Banana function
fR < function(x) (1  x[1])^2 + 100 * (x[2]  x[1]^2)^2
gR < function(x) c(400 * x[1] * (x[2]  x[1] * x[1])  2 * (1  x[1]),
200 * (x[2]  x[1] * x[1]))
# Find minimum and show trace
ucminf(par = c(2,.5), fn = fR, gr = gR, control = list(trace = 1))