ROI_solve function

Solve an Optimization Problem

Solve an Optimization Problem

Solve a given optimization problem. This function uses the given solver (or searches for an appropriate solver) to solve the supplied optimization problem.

ROI_solve(x, solver, control = list(), ...)

Arguments

  • x: an optimization problem of class "OP".
  • solver: a character vector specifying the solver to use. If missing, then the default solver returned by ROI_options is used.
  • control: a list with additional control parameters for the solver. This is solver specific so please consult the corresponding documentation.
  • ...: a list of control parameters (overruling those specified in control).

Returns

a list containing the solution and a message from the solver.

  • solutionthe vector of optimal coefficients
  • objvalthe value of the objective function at the optimum
  • statusa list giving the status code and message form the solver. The status code is 0 on success (no error occurred) 1 otherwise.
  • messagea list giving the original message provided by the solver.

Examples

## Rosenbrock Banana Function ## ----------------------------------------- ## objective f <- function(x) { return( 100 * (x[2] - x[1] * x[1])^2 + (1 - x[1])^2 ) } ## gradient g <- function(x) { return( c( -400 * x[1] * (x[2] - x[1] * x[1]) - 2 * (1 - x[1]), 200 * (x[2] - x[1] * x[1])) ) } ## bounds b <- V_bound(li = 1:2, ui = 1:2, lb = c(-3, -3), ub = c(3, 3)) op <- OP( objective = F_objective(f, n = 2L, G = g), bounds = b ) res <- ROI_solve( op, solver = "nlminb", control = list(start = c( -1.2, 1 )) ) solution( res ) ## Portfolio optimization - minimum variance ## ----------------------------------------- ## get monthly returns of 30 US stocks data( US30 ) r <- na.omit( US30 ) ## objective function to minimize obj <- Q_objective( 2*cov(r) ) ## full investment constraint full_invest <- L_constraint( rep(1, ncol(US30)), "==", 1 ) ## create optimization problem / long-only op <- OP( objective = obj, constraints = full_invest ) ## solve the problem - only works if a QP solver is registered ## Not run: res <- ROI_solve( op ) res sol <- solution( res ) names( sol ) <- colnames( US30 ) round( sol[ which(sol > 1/10^6) ], 3 ) ## End(Not run)

References

Theussl S, Schwendinger F, Hornik K (2020). 'ROI: An Extensible R Optimization Infrastructure.' Journal of Statistical Software_, 94(15), 1-64. doi: 10.18637/jss.v094.i15 (URL: https://doi.org/10.18637/jss.v094.i15).

Author(s)

Stefan Theussl

  • Maintainer: Stefan Theussl
  • License: GPL-3
  • Last published: 2023-04-20