# linprog: Linear Programming Solver In pracma: Practical Numerical Math Functions

## Description

Solves simple linear programming problems, allowing for inequality and equality constraints as well as lower and upper bounds.

## Usage

 ```1 2 3``` ```linprog(cc, A = NULL, b = NULL, Aeq = NULL, beq = NULL, lb = NULL, ub = NULL, x0 = NULL, I0 = NULL, bigM = 100, maxiter = 20, maximize = FALSE) ```

## Arguments

 `cc` defines the linear objective function. `A` matrix representing the inequality constraints `A x <= b`. `b` vector, right hand side of the inequalities. `Aeq` matrix representing the equality constraints `Aeq x <= beq`. `beq` vector, right hand side of the inequalities. `lb` lower bounds, if not `NULL` must all be greater or equal 0. `ub` upper bounds, if not `NULL` must all be greater or equal `lb`. `x0` feasible base vector, will not be used at the moment. `I0` index set of `x0`, will not be used at the moment. `bigM` big-M constant, will be used for finding a base vector. `maxiter` maximum number of iterations. `maximize` logical; shall the objective be minimized or maximized?

## Details

Solves linear programming problems of the form min cc' * x such that

A * x ≤ b

A_{eq} * x = b_{eq}

lb ≤ x ≤ ub

## Value

List with

• `x` the solution vector.

• `fval` the value at the optimal solution.

• `errno`, `mesage` the error number and message.

## Note

This is a first version that will be unstable at times. For real linear programming problems use package `lpSolve`.

## References

Vanderbei, R. J. (2001). Linear Programming: Foundations and Extensions. Princeton University Press.

Eiselt, H. A., and C.-L. Sandblom (2012). Operations Research: A Model-based Approach. Springer-Verlag, Berlin Heidelberg.

`linprog::solveLP`, `lpSolve::lp`
 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71``` ```## Examples from the book "Operations research - A Model-based Approach" #-- production planning cc <- c(5, 3.5, 4.5) Ain <- matrix(c(3, 5, 4, 6, 1, 3), 2, 3, byrow=TRUE) bin <- c(540, 480) linprog(cc, A = Ain, b = bin, maximize = TRUE) # \$x 20 0 120 # \$fval 640 #-- diet problem cc <- c(1.59, 2.19, 2.99) Ain <- matrix(c(-250, -380, -257, 250, 380, 257, 13, 31, 28), 3, 3, byrow = TRUE) bin <- c(-1800, 2200, 100) linprog(cc, A = Ain, b = bin) #-- employee scheduling cc <- c(1, 1, 1, 1, 1, 1) A <- (-1)*matrix(c(1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1), 6, 6, byrow = TRUE) b <- -c(17, 9, 19, 12, 5, 8) linprog(cc, A, b) #-- inventory models cc <- c(1, 1.1, 1.2, 1.25, 0.05, 0.15, 0.15) Aeq <- matrix(c(1, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 1, -1, 0, 0, 0, 1, 0, 0, 1, -1, 0, 0, 0, 1, 0, 0, 1), 4, 7, byrow = TRUE) beq <- c(60, 70, 130, 150) ub <- c(120, 140, 150, 140, Inf, Inf, Inf) linprog(cc, Aeq = Aeq, beq = beq, ub = ub) #-- allocation problem cc <- c(1, 1, 1, 1, 1) A <- matrix(c(-5, 0, 0, 0, 0, 0, -4.5, 0, 0, 0, 0, 0, -5.5, 0, 0, 0, 0, 0, -3.5, 0, 0, 0, 0, 0, -5.5, 5, 0, 0, 0, 0, 0, 4.5, 0, 0, 0, 0, 0, 5.5, 0, 0, 0, 0, 0, 3.5, 0, 0, 0, 0, 0, 5.5, -5, -4.5, -5.5, -3.5, -5.5, 10, 10.0, 10.0, 10.0, 10.0, 0.2, 0.2, 0.2, -1.0, 0.2), 13, 5, byrow = TRUE) b <- c(-50, -55, -60, -50, -50, rep(100, 5), -5*64, 700, 0) # linprog(cc, A = A, b = b) lb <- b[1:5] / diag(A[1:5, ]) ub <- b[6:10] / diag(A[6:10, ]) A1 <- A[11:13, ] b1 <- b[11:13] linprog(cc, A1, b1, lb = lb, ub = ub) #-- transportation problem cc <- c(1, 7, 4, 2, 3, 5) Aeq <- matrix(c(1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1), 5, 6, byrow = TRUE) beq <- c(30, 20, 15, 25, 10) linprog(cc, Aeq = Aeq, beq = beq) ```