我对函数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个决策变量。
答案 0 :(得分:0)
在我回顾了有界变量的单纯形法之后,我终于理解了它是如何发生的。这两个链接很有帮助。 Example; Video
回到这个问题,结构就像
lpSolveAPI(lp_solve的R接口)会在添加适当的松弛变量后将约束结构重写为以下格式。前三列是松弛变量。因此,get.basis()
的返回值为-7,-2,-3,是第7列,第2列,第3列,表示变量4,松弛变量2和3.
对于具有有界变量的这种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(基本)