【问题标题】:Long Vector Linear Programming in R?R中的长向量线性规划?
【发布时间】:2015-05-05 17:51:21
【问题描述】:

您好,提前感谢您。在this question 之后,我获得了更多的内存,现在有足够的内存来容纳我运行线性规划求解器所需的所有矩阵。现在的问题是 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 行乘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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    相关资源
    最近更新 更多