multi_glpk_solve_LP {rDEA} | R Documentation |
Multi Problem Solver for Linear and Mixed Integer Programming Using GLPK
Description
High level R interface to the GNU Linear Programming Kit (GLPK) for solving multiple linear as well as mixed integer linear programming (MILP) problems. Solving multiple problems at the same time allows to avoid R communication overhead, critical when solving many small problems.
Usage
multi_glpk_solve_LP(obj, mat, dir, rhs, bounds = NULL, types = NULL, max = FALSE,
control = list(),
mobj_i = NULL, mobj_val = NULL,
mmat_i = NULL, mmat_val = NULL,
mrhs_i = NULL, mrhs_val = NULL,
...)
Arguments
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: |
mobj_i |
a vector of objective coefficient indices which will
get different values in each optimization problem. Defaults: |
mobj_val |
a matrix of objective coefficient values. Each column specifies for one optimization problem the values of the objective coefficients specified by in mobj_i. |
mmat_i |
a matrix of coordinates of |
mmat_val |
a matrix of values, each column specifies values for one optimization
task. Cell specified in row i in |
mrhs_i |
a vector of RHS constraint rows that will get different values
in each optimization problem.
Defaults: |
mrhs_val |
a matrix of RHS values. Element |
... |
a list of control parameters (overruling those specified in
|
Details
Package rDEA provides method for Data Envelopment Analysis (DEA), including standard input, output and cost-minimization DEA estimation and also robust DEA solvers. The latter can be with or without additional environmental variables.
Value
A list containing the optimal solutions for each problem, with the following components.
solution |
the matrix of optimal coefficients, each column is one problem |
objval |
the vector of values of the objective function at the optimum, for each problem |
status |
the vector of integers with status information about the solution
returned, for each problem. If the control parameter |
Author(s)
Jaak Simm
References
GNU Linear Programming Kit (http://www.gnu.org/software/glpk/glpk.html).
See Also
glpk and glpkAPI for C API bindings;
Rglpk_solve
in package Rglpk.
Examples
## 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
multi_glpk_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
multi_glpk_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)))
multi_glpk_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
multi_glpk_solve_LP(obj, mat, dir, rhs, max = max, control = list("verbose" =
TRUE, "canonicalize_status" = FALSE))