R 中的长向量线性规划?

Long Vector Linear Programming in R?

您好,提前致谢。刚刚结束 我获得了更多的 RAM,现在有足够的内存来容纳我 运行 线性规划求解器所需的所有矩阵。现在的问题是 none R 中的线性规划包似乎支持长向量(即大矩阵)。

我尝试了包 RsymphonyRglpklpSolve 中的函数 Rsymphony_solve_LPRglpk_solve_LPlp。所有人都报告了与以下类似的错误:

Error in rbind(const.mat, const.dir.num, const.rhs) : 
  long vectors not supported yet: bind.c:1544

下面还有我的代码,以防万一……约束矩阵 mat 是我使用包 bigmemory 创建的大矩阵(7062 行 x 364520 列)。当我 运行 这行时,矩阵被拉入内存,然后在一段时间后显示错误。

Rsymph <- Rsymphony_solve_LP(obj,mat[1:nrow(mat),1:ncol(mat)],dir,rhs,types=types,max=max, write_lp=T)

我猜这三个函数中的每一个都存在硬编码错误?目前 R 中是否有支持长向量的线性规划求解器甚至 Python?我应该联系软件包维护者还是自己编辑代码?谢谢!

lpSolveAPI可以解决长向量线性规划问题。你必须先开始我声明一个线性规划对象,然后添加约束:

library(lpSolveAPI)

#Generate Linear Programming Object
lprec <- make.lp(nrow = 0 # Number of Constraints
                 , ncol = ncol(mat) # Number of Decision Variables
)

#Set Objective Function to Minimize
set.objfn(lprec, obj)

#Add Constraints
#Note Direction and RHS is included along with Constraint Value
for(i in 1:nrow(mat) ){
  add.constraint(lprec,mat[i,], dir[i], rhs[i])
  print(i)
}

#Set Decision Variable Type
set.type(lprec, c(1:ncol(mat)), type = c("binary"))

#Solve Model
solve(lprec)

#Obtain Solutions
get.total.iter(lprec)
get.objective(lprec)
get.variables(lprec)

这个包有很好的介绍here