R 中的长向量线性规划?
Long Vector Linear Programming in R?
您好,提前致谢。刚刚结束 我获得了更多的 RAM,现在有足够的内存来容纳我 运行 线性规划求解器所需的所有矩阵。现在的问题是 none 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 行 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。
您好,提前致谢。刚刚结束
我尝试了包 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 行 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。