大家好,并提前致谢!我对这个问题进行了一次有趣的旅程。 Here我想出了如何使用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。有什么方法可以使用这个代码或使用另一个线性编程功能完成这个与我可用的内存量?感谢。
答案 0 :(得分:3)
这是我之前的担忧。运行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和RcppArmadillo访问Rcpp Gallery网站上的big.matrix
个对象。我很遗憾地说现在没有简单的解决办法。您需要获得更多RAM或开始编写更多代码。