【发布时间】:2015-05-05 17:51:21
【问题描述】:
您好,提前感谢您。在this question 之后,我获得了更多的内存,现在有足够的内存来容纳我运行线性规划求解器所需的所有矩阵。现在的问题是 R 中的线性规划包似乎都不支持长向量(即大矩阵)。
我分别尝试了 Rsymphony、Rglpk 和 lpSolve 包中的函数 Rsymphony_solve_LP、Rglpk_solve_LP 和 lp。都报告了与以下类似的错误:
Error in rbind(const.mat, const.dir.num, const.rhs) :
long vectors not supported yet: bind.c:1544
下面还有我的代码以防万一...约束矩阵mat 是我使用包bigmemory 创建的大矩阵(7062 行乘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 的
set.row稀疏地指定它们。如果它不是稀疏的,那么我想你无论如何都无法解决这么大的 LP。 -
@josilber 这不是稀疏的......但你是说我可能会运气好把它变成一个稀疏矩阵?
-
我的意思是,如果约束矩阵大多不为零,那么即使您将它放入求解器,求解该大小的 LP 在计算上也将具有挑战性。如果约束矩阵大多为 0,则绝对应该使用 LP 包的机制来输入稀疏矩阵。
-
@josilber 那里有相当数量的非零值,但决策变量将是二进制类型,所以它应该是可行的......我会更多地研究使用稀疏矩阵...是否有更好的特定包或使用稀疏矩阵语法的示例,您可以指出?谢谢!
-
@josilber,我已经能够使用 7038x196280 约束矩阵来做到这一点。你可以看到原始问题here,这是一个多功能问题。我最初确实使用遗传算法尝试过这个,但我没有太多经验。我觉得这应该是可行的。
标签: python r linear-programming large-data