如何制定"变量免费标志"在线性编程?

时间:2017-04-26 06:51:22

标签: r variables linear-programming

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

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

u1 = u1a - u1b ; u2 = u2a - u2b

我的解码此模型的代码如下所示:

 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,其中一个结果是负重。

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

1 个答案:

答案 0 :(得分:1)

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

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

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