如何在线性规划中制定"variable free in sign"?

How to formulate "variable free in sign" in Linear programming?

我刚刚尝试在 R 脚本中制定 dea(数据开发分析)。 LP 格式如下: Snapshot of the model

虽然我不知道如何在包“Rglpk”中设置“free-in-sign variable”(我用它来解决 R 中的 LP),但我设置了两个变量来表示 u1 和 u2模型。

u1 = u1a - u1b ; u2 = u2a - u2b

我解决这个模型的 r 代码如下所示:

 f.rhs <- c(rep(0,1,2*N),1)   
 f.dir <- c(rep("<=",1,2*N),"==")  
 aux1 <- cbind(-1*X,Z,0*Y,1,-1,0,0)
 aux2 <- cbind(0*X,-1*Z,Y,0,0,1,-1)
    
 for (i in 1:N) { 
    f.obj <- c(rep(0,1,s),as.numeric(Z[i,]),as.numeric(Y[i,]),1,-1,1,-1)
    f.con <- rbind(aux1,aux2,c(as.numeric(X[i,]),as.numeric(Z[i,]),rep(0,1,m+4))) 
    results <- Rglpk_solve_LP(f.obj,f.con,f.dir,f.rhs,max=TRUE)
    }

但是我没有得到任何可接受的结果,不知道我的公式是否有问题。这个模型的结果应该在0~1之间,但是我得到了一个1.033和一个负权重的结果。

有人可以指导我如何解决这个问题吗?谢谢!

Rglpk 的文档显示有可用的绑定参数

使用它! (并且不要拆分)

  • 虽然 split-var-approach 应该可以正常工作(我没有检查你的代码)但这是一个糟糕的方法(变量数量加倍;可能的数值不稳定性至少对于基于 IPM 的求解器而言)并且更直接- 一个是首选
    • 由于 GLPK 是基于单纯形的(我认为也有一个不是最先进的 IPM,但单纯形可能是默认的)很有可能对这些边界有更直接的处理,因此,使用它(通过使用边界参数)
    • 在这种情况下将变量定义为自由意味着:将这些边界设置为 -inf、inf

直接来自文档的内容(第 6 页,共 7 页;版本 0.6-2):

## Same as before but with bounds replaced by
## -Inf < x_1 <= 4
## 0 <= x_2 <= 100
## 2 <= x_3 < Inf
bounds <- list(lower = list(ind = c(1L, 3L), val = c(-Inf, 2)),
upper = list(ind = c(1L, 2L), val = c(4, 100)))
Rglpk_solve_LP(obj, mat, dir, rhs, bounds, types, max)