lp {lpSolve} | R Documentation |
Interface to lp_solve linear/integer programming system
lp (direction = "min", objective.in, const.mat, const.dir, const.rhs, transpose.constraints = TRUE, int.vec, presolve=0, compute.sens=0)
direction |
Character string giving direction of optimization: "min" (default) or "max." |
objective.in |
Numeric vector of coefficients of objective function |
const.mat |
Matrix of numeric constraint coefficients, one row per constraint, one column per variable (unless transpose.constraints = FALSE; see below). |
const.dir |
Vector of character strings giving the direction of the constraint: each value should be one of "<," "<=," "=," "==," ">," or ">=." |
const.rhs |
Vector of numeric values for the right-hand sides of the constraints. |
transpose.constraints |
By default each constraint occupies a row of const.mat, and that matrix needs to be transposed before being passed to the optimizing code. For very large constraint matrices it may be wiser to construct the constraints in a matrix column-by-column. In that case set transpose.constraints to FALSE. |
int.vec |
Numeric vector giving the indices of variables that are required to be integer. The length of this vector will therefore be the number of integer variables. |
presolve |
Numeric: presolve? Default 0 (no); any non-zero value means "yes." Currently ignored. |
compute.sens |
Numeric: compute sensitivity? Default 0 (no); any non-zero value means "yes." |
This function calls the lp_solve 5.5 solver. That system has many options not supported here. The current version is maintained at ftp://ftp.es.ele.tue.nl/pub/lp_solve
An lp object. See lp.object
for details.
Sam Buttrey, buttrey@nps.edu
# # Set up problem: maximize # x1 + 9 x2 + x3 subject to # x1 + 2 x2 + 3 x3 <= 9 # 3 x1 + 2 x2 + 2 x3 <= 15 # f.obj <- c(1, 9, 3) f.con <- matrix (c(1, 2, 3, 3, 2, 2), nrow=2, byrow=TRUE) f.dir <- c("<=", "<=") f.rhs <- c(9, 15) # # Now run. # lp ("max", f.obj, f.con, f.dir, f.rhs) ## Not run: Success: the objective function is 40.5 lp ("max", f.obj, f.con, f.dir, f.rhs)$solution ## Not run: [1] 0.0 4.5 0.0 # # Get sensitivities # lp ("max", f.obj, f.con, f.dir, f.rhs, compute.sens=TRUE)$sens.coef.from ## Not run: [1] -1e+30 2e+00 -1e+30 lp ("max", f.obj, f.con, f.dir, f.rhs, compute.sens=TRUE)$sens.coef.to ## Not run: [1] 4.50e+00 1.00e+30 1.35e+01 # # Right now the dual values for the constraints and the variables are # combined, constraints coming first. So in this example... # lp ("max", f.obj, f.con, f.dir, f.rhs, compute.sens=TRUE)$duals ## Not run: [1] 4.5 0.0 -3.5 0.0 -10.5 # # ...the duals of the constraints are 4.5 and 0, and of the variables, # -3.5, 0.0, -10.5. Here are the lower and upper limits on these: # lp ("max", f.obj, f.con, f.dir, f.rhs, compute.sens=TRUE)$duals.from ## Not run: [1] 0e+00 -1e+30 -1e+30 -1e+30 -6e+00 lp ("max", f.obj, f.con, f.dir, f.rhs, compute.sens=TRUE)$duals.to ## Not run: [1] 1.5e+01 1.0e+30 3.0e+00 1.0e+30 3.0e+00 # # Run again, this time requiring that all three variables be integer # lp ("max", f.obj, f.con, f.dir, f.rhs, int.vec=1:3) ## Not run: Success: the objective function is 37 lp ("max", f.obj, f.con, f.dir, f.rhs, int.vec=1:3)$solution ## Not run: [1] 1 4 0 # # You can get sensitivities in the integer case, but they're harder to # interpret. # lp ("max", f.obj, f.con, f.dir, f.rhs, int.vec=1:3, compute.sens=TRUE)$duals ## Not run: [1] 1 0 0 7 0