1

我们如何使用 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呢?

4

1 回答 1

3

您的约束矩阵有 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 >= 5a + 3c >= 10,并添加 yield c >= 10。通过您的第三个等式 ,b >= 25这意味着由于 和 的非负性,第一个等式永远不会a成立s1

于 2014-03-10T21:01:29.473 回答