如何用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
呢?
约束矩阵有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
的非负性,第一个方程永远不能成立。