我们试图解决下一个线性优化问题:
我们有:
搜索结果是具有下一个条件的3×30二进制值Xij的矩阵:
约束:
目标:优化:
唧唧我们可以解决R?
中的问题我尝试使用lpsolve
包。收到的值不正确。
对于R中的约束数量,线性编程解决方案是否有限制?
在实际情况下,我们的案例超过25000(j指数为1÷30000)
提前谢谢你,
Boriana
答案 0 :(得分:0)
决定将此任务减少为线性编程任务。这种决策方式构造一个矩阵,其具有用于Bi约束的3×3×j维度和用于Xij约束的一个矩阵j×3 * j维度。应该将两个矩阵垂直组合作为任务的约束 - 接收的矩阵是3 + j×3 * j维。对象矢量由Pij构造,但是作为矢量90×1构成.rhs约束是Bi(1×3)和矢量1(1×j)之间的组合 - 矢量是1×3 + j。 它与lp或Rglpk_solve_LP一起使用。 我用几种组合检查了这个。它适用于j = 5000,但它不适用于j = 10000。我们应该将它用于30000个案例。矩阵变得太大了。是否有可能以另一种方式解决这个问题? 线性编程程序有哪些限制?它们只来自计算机的RAM和矩阵的大小吗?
答案 1 :(得分:0)
# read file
pd30 = read.csv("b3ovd30.csv") # read csv file
# objective function
P <- t(pd30)
c <- as.vector(t(P))
# linear constraints
S <- matrix(rep(1),1, ncol(P))
S0 <- matrix(rep(0),1, ncol(P))
#constraint that sum across row <= B[i]
A1 <- rbind ( cbind(S,S0,S0),cbind(S0,S,S0),cbind(S0,S0,S) )
rm(S0)
A0 <- matrix(rep(0),nrow(P),1)
Ad <- diag(1, ncol(P), ncol(P))
# constraint that sum of rows is 1
A2 <- cbind(Ad, Ad, Ad)
# both constraints
A <- rbind (A1, A2)
rm(A0)
rm(Ad)
rm(A1)
rm(A2)
# RHS of constraint for A1
b1 <- matrix(c(8,19,30), ncol=1)
# RHS of constraint for A2
b2 <- t(S)
# both RHS
b <- rbind (b1, b2)
rm(b1)
rm(b2)
#specify symbols for constraints:
LEG1 <- matrix(rep("<="), nrow(P),1)
LEG2 <- matrix(rep("=="), ncol(P),1)
LEG <- rbind (LEG1, LEG2)
rm(LEG1)
rm(LEG2)
types <- matrix(rep("B"), nrow(P)*ncol(P),1)
# Run
install.packages("Rglpk")
library(Rglpk)
result <- Rglpk_solve_LP(c, A, LEG, b, types , max = TRUE)
print(result$status)
print(result$solution)
solution3 <- matrix(result$solution, ncol=3, byrow = F)