Линейные программы с использованием R

Как мы можем решить линейную программу, используя R? Я хочу решить следующий пример:

min -a -2b +4c

Constraints
a + b + s1 = 5
a + 3c -s2 = 10
2b - 3c = 20

a >= 0, b >= 0, c >= 0, s1 >= 0, s2 >= 0

Уравнения могут не иметь полного смысла. Мне просто нужно знать синтаксис написания этих уравнений в R. Я мог бы написать что-то вроде этого для приведенных выше уравнений.

require(lpSolve)

R.obj <- c(-1,-2,4)

R.con <- matrix(c(1,1,1,1,3,-1,2,-3),nrow=3,byrow=TRUE)

R.dir <- c("=","=","=")

R.rhs <- c(5,10,20)

lp("min",R.obj,R.con,R.dir,R.rhs)

Будет ли это правильно? В документации матрица всегда M*M, а если матрица M*N где N != M?


person kartik    schedule 10.03.2014    source источник
comment
Если вы просто хотите изучить синтаксис, хорошей отправной точкой может стать документация пакета: cran.r-project.org/web/packages/lpSolve/lpSolve.pdf   -  person NPE    schedule 11.03.2014
comment
Я не понимаю, как создавать ограничения, когда я добавляю слабые, избыточные переменные.   -  person kartik    schedule 11.03.2014


Ответы (1)


Ваша матрица ограничений имеет 3 строки и 5 столбцов, но при построении матрицы ограничений вы указали только 8 ненулевых значений. Кроме того, у вас есть 5 переменных, поэтому R.obj нужно 5 значений:

require(lpSolve)
R.obj <- c(-1, -2, 4, 0, 0)
R.con <- matrix(c(1, 1, 0, 1, 0, 2, 0, 3, -3, 1, 0, 0, 0, -1, 0), nrow=3)
R.dir <- c("=", "=", "=")
R.rhs <- c(5, 10, 20)
lp("min", R.obj, R.con, R.dir, R.rhs)
# Error: no feasible solution found

Немного математики показывает, что этот LP действительно неосуществим. Этот LP эквивалентен -a - b >= -5, a + 3c >= 10, b = 10 + 1.5c. Вы можете подставить последнее уравнение в первое, чтобы получить -a - 1.5c >= 5 и a + 3c >= 10, а сложение дает c >= 10. Согласно вашему третьему уравнению, b >= 25, это означает, что первое уравнение никогда не может быть выполнено из-за неотрицательности a и s1.

person josliber♦    schedule 10.03.2014
comment
Можете ли вы сказать мне, что означает статус ошибки: 3 в R? - person kartik; 11.03.2014
comment
@kartik извините, где вы видите этот статус ошибки? - person josliber♦; 11.03.2014