大矩阵线性规划 - 仍然有内存问题

Linear Programming with Big Matrix - Still having memory problems

大家好,提前致谢!我在这个问题上经历了一段有趣的旅程。 我想出了如何使用 bigmemory 包创建一个文件支持的大矩阵。这个 7062 行乘 364520 列矩阵是我试图使用 Rsymphony 包解决的线性规划问题中的约束矩阵。代码如下,约束矩阵称为 mat :

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

不幸的是,当我 运行 这样做时,Rsymphony 尝试将文件支持的矩阵放入内存,但我没有足够的 RAM。我什至首先用 bigmemory 创建大矩阵的唯一原因是使用尽可能少的 RAM。有什么办法可以使用此代码或使用另一个线性编程函数来使用我可用的内存量来完成此操作?谢谢。

这是我之前的顾虑。通过 运行 mat[...],您将 big.matrix 转换为常规 matrix。该函数需要重写,以便与 big.matrix 个对象兼容。如果您查看 R_symphony_solve_LP 的源代码,您会发现以下调用:

out <- .C("R_symphony_solve",
          as.integer(nc),
          as.integer(nr),
          as.integer(mat$matbeg),
          as.integer(mat$matind),
          as.double(mat$values),
          as.double(col_lb),
          as.double(col_ub),
          as.integer(int),
          if(max) as.double(-obj) else as.double(obj),
          obj2 = double(nc),
          as.character(paste(row_sense, collapse = "")),
          as.double(rhs),
          double(),
          objval = double(1L),
          solution = double(nc),
          status = integer(1L),
          verbosity = as.integer(verbosity),
          time_limit = as.integer(time_limit),
          node_limit = as.integer(node_limit),
          gap_limit = as.double(gap_limit),
          first_feasible = as.integer(first_feasible),
          write_lp = as.integer(write_lp),
          write_mps = as.integer(write_mps))

需要重写此 C 函数以使其与 big.matrix 对象兼容。如果使用此功能对您来说至关重要,那么在 Rcpp Gallery 网站上有一些如何使用 Rcpp and RcppArmadillo 访问 big.matrix 对象的示例。很抱歉,目前没有其他简单的解决方案。您要么需要获得更多 RAM,要么开始编写更多代码。