linp {limSolve} | R Documentation |
Solves a linear programming problem,
min(sum {Cost_i.x_i})
subject to
Ex=f
Gx>=h
x_i>=0
(optional)
This function provides a wrapper around lp
(see note)
from package lpSolve, written to be consistent with the functions
lsei
, and ldei
.
It allows for the x's to be negative (not standard in lp).
linp(E=NULL, F=NULL, G=NULL, H=NULL, Cost, ispos = TRUE, int.vec=NULL, verbose=TRUE, ...)
E |
numeric matrix containing the coefficients of the equality
constraints Ex=F; if the columns of E have a names attribute,
they will be used to label the output.
|
F |
numeric vector containing the right-hand side of the equality constraints. |
G |
numeric matrix containing the coefficients of the inequality
constraints Gx>=H; if the columns of G have a names attribute,
and the columns of E do not, they will be used to label the output.
|
H |
numeric vector containing the right-hand side of the inequality constraints. |
Cost |
numeric vector containing the coefficients of the cost function;
if Cost has a names attribute, and neither the columns of E
nor G have a name, they will be used to label the output.
|
ispos |
logical, when TRUE then the unknowns (x) must be
positive (this is consistent with the original definition of a
linear programming problem).
|
int.vec |
when not NULL , a numeric vector giving the indices
of variables that are required to be an integer. The length of this
vector will therefore be the number of integer variables.
|
verbose |
logical to print error messages. |
... |
extra arguments passed to R-function lp .
|
a list containing:
X |
vector containing the solution of the linear programming problem. |
residualNorm |
scalar, the sum of absolute values of residuals of equalities and violated inequalities. Should be very small or zero for a feasible linear programming problem. |
solutionNorm |
scalar, the value of the minimised Cost function,
i.e. the value of sum {Cost_i.x_i}.
|
IsError |
logical, TRUE if an error occurred.
|
type |
the string "linp", such that how the solution was obtained can be traced. |
If the requirement of nonnegativity are relaxed, then strictly speaking the problem is not a linear programming problem.
The function lp
may fail and terminate R for very small problems that
are repeated frequently...
Also note that sometimes multiple solutions exist for the same problem.
Karline Soetaert <k.soetaert@nioo.knaw.nl>
Michel Berkelaar and others (2007). lpSolve: Interface to Lpsolve v. 5.5 to solve linear or integer programs. R package version 5.5.8.
lp
the original function from package lpSolve
Blending
, a linear programming problem.
#-------------------------------------------- # Linear programming problem 1, not feasible #-------------------------------------------- # maximise x1 + 3*x2 # subject to #-x1 -x2 < -3 #-x1 + x2 <-1 # x1 + 2*x2 < 2 # xi>0 G <- matrix(nrow=3,data=c(-1,-1,1, -1,1,2)) H <- c(3,-1,2) Cost <- c(-1,-3) (L<-linp(E=NULL,F=NULL,Cost=Cost,G=G,H=H)) L$residualNorm #-------------------------------------------- # Linear programming problem 2, feasible #-------------------------------------------- # minimise x12 + 8*x13 + 9*x14 + 2*x23 + 7*x24 + 3*x34 # subject to: #-x12 + x23 + x24 = 0 # - x13 - x23 + x34 = 0 # x12 + x13 + x14 > 1 # x14 + x24 + x34 < 1 # xi>0 A <- matrix(nrow=2,byrow=TRUE,data=c(-1,0,0,1,1,0, 0,-1,0,-1,0,1)) B <- c(0,0) G <- matrix(nrow=2,byrow=TRUE,data=c(1,1,1,0,0,0, 0,0,-1,0,-1,-1)) H <- c(1,-1) Cost <- c(1,8,9,2,7,3) (L<-linp(E=A,F=B,Cost=Cost,G=G,H=H)) L$residualNorm #--------------------------------------------- # Linear programming problem 3, no positivity #--------------------------------------------- # minimise x1 + 2x2 -x3 +4 x4 # subject to: # 3x1 + 2x2 + x3 + x4 = 2 # x1 + x2 + x3 + x4 = 2 E <- matrix(ncol=4, byrow=TRUE, data=c(3,2,1,4,1,1,1,1)) F <- c(2,2) G <-matrix(ncol=4,byrow=TRUE, data=c(2,1,1,1,-1,3,2,1,-1,0,1,0)) H <- c(-1, 2, 1) Cost <- c(1,2,-1,4) linp(E=E,F=F,G=G,H=H,Cost,ispos=FALSE)