lpSolveAPI中的get.basis()

时间:2015-05-15 05:56:49

标签: r linear-programming

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

catalogrule_product
catalogrule_product_price 

然后基本变量是

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.basis(lprec)
[1] -7 -2 -3

从解决方案来看,似乎变量1和变量4是基础。 因此,矢量(-7,-2,-3)是如何产生的?

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

1 个答案:

答案 0 :(得分:0)

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

回到这个问题,结构就像 enter image description here

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

enter image description here

对于具有有界变量的这种LP,变量在下限或上限可以是非基本的。 get.basis(lp, nonbasic=TRUE)的返回值为-1,-4,-5,-6。减号意味着这些变量处于下限。它表示松弛变量1 = 0,变量4 = 28.6,变量5 = 0,变量6 = 0。

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