logert
logert

Reputation: 11

How to solve simple linear programming problem with lpSolve

I am trying to maximize the function $a_1x_1 + \cdots +a_nx_n$ subject to the constraints $b_1x_1 + \cdots + b_nx_n \leq c$ and $x_i \geq 0$ for all $i$. For the toy example below, I've chosen $a_i = b_i$, so the problem is to maximize $0x_1 + 25x_2 + 50x_3 + 75x_4 + 100x_5$ given $0x_1 + 25x_2 + 50x_3 + 75x_4 + 100x_5 \leq 100$. Trivially, the maximum value of the objective function should be 100, but when I run the code below I get a solution of 2.5e+31. What's going on?

library(lpSolve)

a <- seq.int(0, 100, 25)
b <- seq.int(0, 100, 25)
c <- 100


optimal_val <- lp(direction = "max", 
                  objective.in = a,
                  const.mat = b, 
                  const.dir = "<=", 
                  const.rhs = c, 
                  all.int = TRUE)

optimal_val

Upvotes: 1

Views: 106

Answers (1)

Erwin Kalvelagen
Erwin Kalvelagen

Reputation: 16714

b is not a proper matrix. You should do, before the lp call:

b <- seq.int(0, 100, 25)
b <- matrix(b,nrow=1)

That will give you an explicit 1 x 5 matrix:

> b
     [,1] [,2] [,3] [,4] [,5]
[1,]    0   25   50   75  100

Now you will see:

> optimal_val
Success: the objective function is 100 

Background: by default R will consider a vector as a column matrix:

> matrix(c(1,2,3))
     [,1]
[1,]    1
[2,]    2
[3,]    3

Upvotes: 2

Related Questions