| Rglpk_solve_LP {Rglpk} | R Documentation |
High level R interface to the GNU Linear Programming Kit (GLPK) for solving linear as well as mixed integer linear programming (MILP) problems.
Rglpk_solve_LP(obj, mat, dir, rhs, bounds = NULL, types = NULL, max = FALSE,
control = list(), ...)
obj |
a numeric vector representing the objective coefficients. |
mat |
a numeric vector or a matrix of constraint coefficients. |
dir |
a character vector with the directions of the constraints.
Each element must be one of |
rhs |
the right hand side of the constraints. |
bounds |
|
types |
a character vector indicating the types of the objective
variables. |
max |
a logical giving the direction of the optimization.
|
control |
a list of parameters to the solver. Currently the
only options are: |
... |
a list of control parameters (overruling those specified in
|
GLPK is open source. The current version can be found at http://www.gnu.org/software/glpk/glpk.html. Package Rglpk provides a high level solver function using the low level C interface of the GLPK solver. R interface packages which port all low level C routines of the GLPK API to R are also available. Consult the ‘See Also’ Section for references.
A list containing the optimal solution, with the following components.
solution |
the vector of optimal coefficients |
objval |
the value of the objective function at the optimum |
status |
an integer with status information about the solution
returned. If the control parameter |
Stefan Theussl and Kurt Hornik
GNU Linear Programming Kit (http://www.gnu.org/software/glpk/glpk.html).
GLPK Interface to R (http://cran.R-project.org/package=Rglpk).
glpk and glpkAPI for C API bindings;
lp in package lpSolve;
ROI_solve in package ROI;
Rsymphony_solve_LP in package
Rsymphony.
## Simple linear program.
## maximize: 2 x_1 + 4 x_2 + 3 x_3
## subject to: 3 x_1 + 4 x_2 + 2 x_3 <= 60
## 2 x_1 + x_2 + 2 x_3 <= 40
## x_1 + 3 x_2 + 2 x_3 <= 80
## x_1, x_2, x_3 are non-negative real numbers
obj <- c(2, 4, 3)
mat <- matrix(c(3, 2, 1, 4, 1, 3, 2, 2, 2), nrow = 3)
dir <- c("<=", "<=", "<=")
rhs <- c(60, 40, 80)
max <- TRUE
Rglpk_solve_LP(obj, mat, dir, rhs, max = max)
## Simple mixed integer linear program.
## maximize: 3 x_1 + 1 x_2 + 3 x_3
## subject to: -1 x_1 + 2 x_2 + x_3 <= 4
## 4 x_2 - 3 x_3 <= 2
## x_1 - 3 x_2 + 2 x_3 <= 3
## x_1, x_3 are non-negative integers
## x_2 is a non-negative real number
obj <- c(3, 1, 3)
mat <- matrix(c(-1, 0, 1, 2, 4, -3, 1, -3, 2), nrow = 3)
dir <- c("<=", "<=", "<=")
rhs <- c(4, 2, 3)
types <- c("I", "C", "I")
max <- TRUE
Rglpk_solve_LP(obj, mat, dir, rhs, types = types, max = max)
## Same as before but with bounds replaced by
## -Inf < x_1 <= 4
## 0 <= x_2 <= 100
## 2 <= x_3 < Inf
bounds <- list(lower = list(ind = c(1L, 3L), val = c(-Inf, 2)),
upper = list(ind = c(1L, 2L), val = c(4, 100)))
Rglpk_solve_LP(obj, mat, dir, rhs, bounds, types, max)
## Examples from the GLPK manual
## Solver output enabled
## 1.3.1
## maximize: 10 x_1 + 6 x_2 + 4 x_3
## subject to: x_1 + x_2 + x_3 <= 100
## 10 x_1 + 4 x_2 + 5 x_3 <= 600
## 2 x_1 + 2 x_2 + 6 x_3 <= 300
## x_1, x_2, x_3 are non-negative real numbers
obj <- c(10, 6, 4)
mat <- matrix(c(1, 10, 2, 1, 4, 2, 1, 5, 6), nrow = 3)
dir <- c("<=", "<=", "<=")
rhs <- c(100, 600, 300)
max <- TRUE
Rglpk_solve_LP(obj, mat, dir, rhs, max = max, control = list("verbose" =
TRUE, "canonicalize_status" = FALSE))