R: Subplex Algorithm

sbplx {nloptr} | R Documentation

## Subplex Algorithm

### Description

Subplex is a variant of Nelder-Mead that uses Nelder-Mead on a sequence of subspaces.

### Usage

    sbplx(x0, fn, lower = NULL, upper = NULL, nl.info = FALSE,
      control = list(), ...)

### Arguments

`x0` | starting point for searching the optimum.
`fn` | objective function that is to be minimized.
`lower, upper` | lower and upper bound constraints.
`nl.info` | logical; shall the original NLopt info been shown.
`control` | list of options, see `nl.opts` for help.
`...` | additional arguments passed to the function.

### Details

SUBPLEX is claimed to be much more efficient and robust than the original Nelder-Mead, while retaining the latter's facility with discontinuous objectives.

This implementation has explicit support for bound constraints (via the method in the Box paper as described on the `neldermead` help page).

### Value

List with components:

`par` | the optimal solution found so far.
`value` | the function value corresponding to `par`.
`iter` | number of (outer) iterations, see `maxeval`.
`convergence` | integer code indicating successful completion (> 0) or a possible error number (< 0).
`message` | character string produced by NLopt and giving additional information.

### Note

It is the request of Tom Rowan that reimplementations of his algorithm shall not use the name ‘subplex’.

### References

T. Rowan, “Functional Stability Analysis of Numerical Algorithms”, Ph.D. thesis, Department of Computer Sciences, University of Texas at Austin, 1990.

### See Also

`subplex::subplex`

### Examples

    # Fletcher and Powell's helic valley
    fphv <- function(x)
        100*(x[3] - 10*atan2(x[2], x[1])/(2*pi))^2 +
            (sqrt(x[1]^2 + x[2]^2) - 1)^2 +x[3]^2
    x0 <- c(-1, 0, 0)
    sbplx(x0, fphv)    #  1 0 0

    # Powell's Singular Function (PSF)
    psf <- function(x)  (x[1] + 10*x[2])^2 + 5*(x[3] - x[4])^2 +
                        (x[2] - 2*x[3])^4 + 10*(x[1] - x[4])^4
    x0 <- c(3, -1, 0, 1)
    sbplx(x0, psf, control = list(maxeval = Inf, ftol_rel = 1e-6))  #  0 0 0 0 (?)

[Package nloptr version 1.2.2.2 Index]