An R interface to the bobyqa implementation of Powell
bobyqa.RdThe purpose of bobyqa is to minimize a function of many variables
by a trust region method that forms quadratic models by interpolation.
Box constraints (bounds) on the parameters are permitted.
Usage
bobyqa(par, fn, lower = -Inf, upper = Inf, control = list(), ...)Arguments
- par
A numeric vector of starting estimates of the parameters of the objective function.
- fn
A function that returns the value of the objective at the supplied set of parameters
parusing auxiliary data in .... The first argument offnmust bepar.- lower
A numeric vector of lower bounds on the parameters. If the length is 1 the single lower bound is applied to all parameters.
- upper
A numeric vector of upper bounds on the parameters. If the length is 1 the single upper bound is applied to all parameters.
- control
An optional list of control settings. See the details section for the names of the settable control values and their effect.
- ...
Further arguments to be passed to
fn.
Details
The function fn must return a scalar numeric value.
The control argument is a list. Possible named values in the
list and their defaults are:
- npt
The number of points used to approximate the objective function via a quadratic approximation. The value of npt must be in the interval \([n+2,(n+1)(n+2)/2]\) where \(n\) is the number of parameters in
par. Choices that exceed \(2*n+1\) are not recommended. If not defined, it will be set to \(\min(n * 2, n+2)\).- rhobeg
rhobegandrhoendmust be set to the initial and final values of a trust region radius, so both must be positive with0 < rhoend < rhobeg. Typicallyrhobegshould be about one tenth of the greatest expected change to a variable. If the user does not provide a value, this will be set tomin(0.95, 0.2 * max(abs(par))). Note also that smallest differenceabs(upper-lower)should be greater than or equal torhobeg*2. If this is not the case thenrhobegwill be adjusted.- rhoend
The smallest value of the trust region radius that is allowed. If not defined, then 1e-6 times the value set for
rhobegwill be used.- iprint
The value of
iprintshould be set to an integer value in0, 1, 2, 3, ..., which controls the amount of printing. Specifically, there is no output ifiprint=0and there is output only at the start and the return ifiprint=1. Otherwise, each new value ofrhois printed, with the best vector of variables so far and the corresponding value of the objective function. Further, each new value of the objective function with its variables are output ifiprint=3. Ifiprint > 3, the objective function value and corresponding variables are output everyiprintevaluations. Default value is0.- maxfun
The maximum allowed number of function evaluations. If this is exceeded, the method will terminate.
Value
A list with components:
- par
The best set of parameters found.
- fval
The value of the objective at the best set of parameters found.
- feval
The number of function evaluations used.
- ierr
An integer error code. A value of zero indicates success. Other values are
- 1
maximum number of function evaluations exceeded
- 2
NPT, the number of approximation points, is not in the required interval
- 3
a trust region step failed to reduce q (Consult Powell for explanation.)
- 4
one of the box constraint ranges is too small (< 2*RHOBEG)
- 5
bobyqa detected too much cancellation in denominator (We have not fully understood Powell's code to explain this.)
- msg
A message describing the outcome of UOBYQA
References
M. J. D. Powell (2007) "Developments of NEWUOA for unconstrained minimization without derivatives", Cambridge University, Department of Applied Mathematics and Theoretical Physics, Numerical Analysis Group, Report NA2007/05, http://www.damtp.cam.ac.uk/user/na/NA_papers/NA2007_05.pdf.
M. J. D. Powell (2009), "The BOBYQA algorithm for bound constrained optimization without derivatives", Report No. DAMTP 2009/NA06, Centre for Mathematical Sciences, University of Cambridge, UK. http://www.damtp.cam.ac.uk/user/na/NA_papers/NA2009_06.pdf.
Description was taken from comments in the Fortran code of M. J. D. Powell on which minqa is based.
Examples
fr <- function(x) { ## Rosenbrock Banana function
100 * (x[2] - x[1]^2)^2 + (1 - x[1])^2
}
(x1 <- bobyqa(c(1, 2), fr, lower = c(0, 0), upper = c(4, 4)))
#> parameter estimates: 0.999999968901681, 0.999999928305543
#> objective: 9.98796325533312e-15
#> number of function evaluations: 341
## => optimum at c(1, 1) with fval = 0
str(x1) # see that the error code and msg are returned
#> List of 5
#> $ par : num [1:2] 1 1
#> $ fval : num 9.99e-15
#> $ feval: int 341
#> $ ierr : int 0
#> $ msg : chr "Normal exit from bobyqa"
#> - attr(*, "class")= chr [1:2] "bobyqa" "minqa"
# check the error exits
# too many iterations
x1e<-bobyqa(c(1, 2), fr, lower = c(0, 0), upper = c(4, 4), control = list(maxfun=50))
str(x1e)
#> List of 5
#> $ par : num [1:2] 1.34 1.81
#> $ fval : num 0.121
#> $ feval: int 50
#> $ ierr : num 1
#> $ msg : chr "bobyqa -- maximum number of function evaluations exceeded"
#> - attr(*, "class")= chr [1:2] "bobyqa" "minqa"
# Throw an error because bounds too tight
x1b<-bobyqa(c(4,4), fr, lower = c(0, 3.9999999), upper = c(4, 4))
#> Warning: All upper - lower must be >= 2*rhobeg. Changing rhobeg
str(x1b)
#> List of 5
#> $ par : num [1:2] 2 4
#> $ fval : num 0.999
#> $ feval: int 92
#> $ ierr : int 0
#> $ msg : chr "Normal exit from bobyqa"
#> - attr(*, "class")= chr [1:2] "bobyqa" "minqa"
# Throw an error because npt is too small -- does NOT work as of 2010-8-10 as
# minqa.R seems to force a reset.
x1n<-bobyqa(c(2,2), fr, lower = c(0, 0), upper = c(4, 4), control=list(npt=1))
str(x1n)
#> List of 5
#> $ par : num [1:2] 1 1
#> $ fval : num 3.05e-12
#> $ feval: int 484
#> $ ierr : int 0
#> $ msg : chr "Normal exit from bobyqa"
#> - attr(*, "class")= chr [1:2] "bobyqa" "minqa"
# To add if we can find them -- examples of ierr = 3 and ierr = 5.