Type: | Package |
Title: | Embedded Conic Solver in R |
Version: | 0.5.5 |
Date: | 2023-05-13 |
VignetteBuilder: | knitr |
SystemRequirements: | GNU make |
URL: | https://bnaras.github.io/ECOSolveR/ |
BugReports: | https://github.com/bnaras/ECOSolveR/issues |
Imports: | methods |
Suggests: | knitr, rmarkdown, testthat, Matrix, covr, slam |
Description: | R interface to the Embedded COnic Solver (ECOS), an efficient and robust C library for convex problems. Conic and equality constraints can be specified in addition to integer and boolean variable constraints for mixed-integer problems. This R interface is inspired by the python interface and has similar calling conventions. |
License: | GPL (≥ 3) |
Encoding: | UTF-8 |
RoxygenNote: | 7.2.3 |
NeedsCompilation: | yes |
Packaged: | 2023-05-15 21:24:03 UTC; naras |
Author: | Anqi Fu [aut], Balasubramanian Narasimhan [aut, cre], Florian Schwendinger [ctb], Martin Maechler [ctb] |
Maintainer: | Balasubramanian Narasimhan <naras@stat.Stanford.EDU> |
Repository: | CRAN |
Date/Publication: | 2023-05-15 22:20:03 UTC |
Solve a conic optimization problem
Description
The function ECOS_csolve
is a wrapper around the ecos
csolve
C function. Conic constraints are specified using the
G
and h
parameters and can be NULL
and zero
length vector respectively indicating an absence of conic
constraints. Similarly, equality constraints are specified via
A
and b
parameters with NULL
and empty vector
values representing a lack of such constraints. At most one of the
pair (G , h)
or (A, b)
is allowed to be absent.
Usage
ECOS_csolve(
c = numeric(0),
G = NULL,
h = numeric(0),
dims = list(l = integer(0), q = NULL, e = integer(0)),
A = NULL,
b = numeric(0),
bool_vars = integer(0),
int_vars = integer(0),
control = ecos.control()
)
Arguments
c |
the coefficients of the objective function; the length of
this determines the number of variables |
G |
the inequality constraint matrix in one of three forms: a
plain matrix, simple triplet matrix, or compressed column
format, e.g. dgCMatrix-class. Can also be
|
h |
the right hand size of the inequality constraint. Can be empty numeric vector. |
dims |
is a list of three named elements: |
A |
the optional equality constraint matrix in one of three
forms: a plain matrix, simple triplet matrix, or compressed
column format, e.g. dgCMatrix-class. Can be
|
b |
the right hand side of the equality constraint, must be
specified if |
bool_vars |
the indices of the variables, 1 through |
int_vars |
the indices of the variables, 1 through |
control |
is a named list that controls various optimization parameters; see ecos.control. |
Value
a list of 8 named items
- x
primal variables
- y
dual variables for equality constraints
- s
slacks for
Gx + s <= h
,s \in K
- z
dual variables for inequality constraints
s \in K
- infostring
gives information about the status of solution
- retcodes
a named integer vector containing four elements
- exitflag
0=
ECOS_OPTIMAL
, 1=ECOS_PINF
, 2=ECOS_DINF
, 10=ECOS_INACC_OFFSET
, -1=ECOS_MAXIT
, -2=ECOS_NUMERICS
, -3=ECOS_OUTCONE
, -4=ECOS_SIGINT
, -7=ECOS_FATAL
. See ECOS_exitcodes
.
- iter
the number of iterations used
- mi_iter
the number of iterations for mixed integer problems
- numerr
a non-zero number if a numeric error occurred
- summary
a named numeric vector containing
- pcost
value of primal objective
- dcost
value of dual objective
- pres
primal residual on inequalities and equalities
- dres
dual residual
- pinf
primal infeasibility measure
- dinf
dual infeasibility measure
- pinfres
primal infeasibility residual
- dinfres
dual infeasibility residual
- gap
duality gap
- relgap
relative duality gap
- r0
Unknown at the moment to this R package maintainer.
- timing
a named numeric vector of timing information consisting of
- runtime
the total runtime in ecos
- tsetup
the time for setup of the problem
- tsolve
the time to solve the problem
Details
A call to this function will solve the problem:
minimize c^Tx
, subject to Ax = b
, and h - G*x \in K
.
Variables can be constrained to be boolean (1 or 0) or integers. This is indicated
by specifying parameters bool_vars
and/or int_vars
respectively. If so
indicated, the solutions will be found using a branch and bound algorithm.
Examples
## githubIssue98
cat("Basic matrix interface\n")
Gmat <- matrix(c(0.416757847405471, 2.13619609566845, 1.79343558519486, 0, 0,
0, 0, -1, 0, 0, 0, 0.056266827226329, -1.64027080840499, 0.841747365656204,
0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0.416757847405471, 2.13619609566845,
1.79343558519486, 0, 0, 0, -1, 0, 0, 0, 0, 0.056266827226329, -1.64027080840499,
0.841747365656204, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0), ncol = 5L)
c <- as.numeric(c(0, 0, 0, 0, 1))
h <- as.numeric(c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0))
dims <- list(l = 6L, q = 5L, e = 0L)
ECOS_csolve(c = c, G = Gmat, h = h,
dims = dims,
A = NULL, b = numeric(0))
cat("Simple Triplet Matrix interface, if you have package slam\n")
if (requireNamespace("slam")) {
ECOS_csolve(c = c, G = slam::as.simple_triplet_matrix(Gmat), h = h,
dims = dims,
A = NULL, b = numeric(0))
}
if (requireNamespace("Matrix")) {
ECOS_csolve(c = c, G = Matrix::Matrix(Gmat), h = h,
dims = dims,
A = NULL, b = numeric(0))
}
## Larger problems using saved data can be found in the test suite.
## Here is one
if (requireNamespace("Matrix")) {
MPC01 <- readRDS(system.file("testdata", "MPC01_1.RDS", package = "ECOSolveR"))
G <- Matrix::sparseMatrix(x = MPC01$Gpr, i = MPC01$Gir, p = MPC01$Gjc,
dims = c(MPC01$m, MPC01$n), index1 = FALSE)
h <- MPC01$h
dims <- lapply(list(l = MPC01$l, q=MPC01$q, e=MPC01$e), as.integer)
retval <- ECOS_csolve(c = MPC01$c, G=G, h = h, dims = dims, A = NULL, b = NULL,
control = ecos.control(verbose=1L))
retval$retcodes
retval$infostring
retval$summary
}
ECOS solver exit codes
Description
A two-column data frame consisting of the code and description for the ECOS solver with ECOS symbolic code names as row names
ECOSolveR: Embedded Conic Solver in R
Description
ECOSolveR
is a wrapper around the ecos library.
Please see the examples and documentation for the function ECOS_csolve
.
References
https://github.com/embotech/ecos
Return the default optimization parameters for ECOS
Description
This is used to control the behavior of the underlying optimization code.
Usage
ecos.control(
maxit = 100L,
feastol = 1e-08,
reltol = 1e-08,
abstol = 1e-08,
feastol_inacc = 1e-04,
abstol_inacc = 5e-05,
reltol_inacc = 5e-05,
verbose = 0L,
mi_max_iters = 1000L,
mi_int_tol = 1e-04,
mi_abs_eps = 1e-06,
mi_rel_eps = 1e-06
)
Arguments
maxit |
the maximum number of iterations for ecos, default 100L |
feastol |
the tolerance on the primal and dual residual, default 1e-8 |
reltol |
the relative tolerance on the duality gap, default 1e-8 |
abstol |
the absolute tolerance on the duality gap, default 1e-8 |
feastol_inacc |
the tolerance on the primal and dual residual if reduced precisions, default 1e-4 |
abstol_inacc |
the absolute tolerance on the duality gap if reduced precision, default 5e-5 |
reltol_inacc |
the relative tolerance on the duality gap if reduced precision, default 5e-5 |
verbose |
verbosity level, default 0L. A verbosity level of 1L will show more detail, but clutter session transcript. |
mi_max_iters |
the maximum number of branch and bound iterations (mixed integer problems only), default 1000L |
mi_int_tol |
the integer tolerence (mixed integer problems only), default 1e-4 |
mi_abs_eps |
the absolute tolerance between upper and lower bounds (mixed integer problems only), default 1e-6 |
mi_rel_eps |
the relative tolerance, |
Value
a list with the following elements:
- FEASTOL
the tolerance on the primal and dual residual, parameter
feastol
- ABSTOL
the absolute tolerance on the duality gap, parameter
abstol
- RELTOL
the relative tolerance on the duality gap, parameter
reltol
- FEASTOL_INACC
the tolerance on the primal and dual residual if reduced precisions, parameter
feastol_inacc
- ABSTOL_INACC
the absolute tolerance on the duality gap if reduced precision, parameter
abstol_inacc
- RELTOL_INACC
the relative tolerance on the duality gap if reduced precision, parameter
reltol_inacc
- MAXIT
the maximum number of iterations for ecos, parameter
maxit
- MI_MAX_ITERS
the maximum number of branch and bound iterations (mixed integer problems only), parameter
mi_max_iters
- MI_INT_TOL
the integer tolerence (mixed integer problems only), parameter
mi_int_tol
- MI_ABS_EPS
the absolute tolerance between upper and lower bounds (mixed integer problems only), parameter
mi_abs_eps
- MI_REL_EPS
the relative tolerance,
(U-L)/L
, between upper and lower bounds (mixed integer problems only), parametermi_rel_eps
- VERBOSE
verbosity level, parameter
verbose