R lpSolveAPI中的get.basis()

R lpSolveAPI中的get.basis(),r,linear-programming,R,Linear Programming,我对函数get.basis()的返回感到困惑。比如说, lprec <- make.lp(0, 4) set.objfn(lprec, c(1, 3, 6.24, 0.1)) add.constraint(lprec, c(0, 78.26, 0, 2.9), ">=", 92.3) add.constraint(lprec, c(0.24, 0, 11.31, 0), "<=", 14.8) add.constraint(lprec, c(12.68, 0, 0.08, 0.

我对函数get.basis()的返回感到困惑。比如说,

lprec <- make.lp(0, 4)
set.objfn(lprec, c(1, 3, 6.24, 0.1))
add.constraint(lprec, c(0, 78.26, 0, 2.9), ">=", 92.3)
add.constraint(lprec, c(0.24, 0, 11.31, 0), "<=", 14.8)
add.constraint(lprec, c(12.68, 0, 0.08, 0.9), ">=", 4)
set.bounds(lprec, lower = c(28.6, 18), columns = c(1, 4))
set.bounds(lprec, upper = 48.98, columns = 4)
RowNames <- c("THISROW", "THATROW", "LASTROW")
ColNames <- c("COLONE", "COLTWO", "COLTHREE", "COLFOUR")
dimnames(lprec) <- list(RowNames, ColNames)
solve(lprec)
然而,解决办法是

> get.variables(lprec)
[1] 28.60000  0.00000  0.00000 31.82759
从解决方案来看,变量1和变量4似乎是基础那么向量(-7,-2,-3)是如何产生的呢?


我猜它来自3个约束和4个决策变量。

在我回顾了有界变量的单纯形法之后,我终于了解了它是如何发生的。这两个链接很有帮助

回到这个问题上来,结构是这样的

lpSolveAPI(lp_solve的R接口)将在添加适当的松弛变量后将约束结构重写为以下格式。前三列用于slack变量。因此,返回的
get.basis()
,即-7、-2、-3,是表示变量4、松弛变量2和3的第7、2、3列

对于这类变量有界的线性规划问题,一个变量在下界或上界都可以是非基本的。
get.basis(lp,nonbasic=TRUE)
的返回值为-1,-4,-5,-6。负数表示这些变量处于其下限。它表示松弛变量1=0、变量4=28.6、变量5=0、变量6=0

因此,最优解为28.6(非基本)、0(非基本)、0(非基本)、31.82(基本)

> get.variables(lprec)
[1] 28.60000  0.00000  0.00000 31.82759