R 中的线性优化编程



我们试图解决下一个线性优化问题:

我们有:

    Pij, i=1÷
  • 3, j=1÷30, Pij 为正数
  • Bi, i=1÷3, 整数正

搜索结果是 3 x 30 的二进制值 Xij 的矩阵,具有以下条件:

约束:

  • 对于每个 j =1÷30,总和(按指数 i=1÷3(Xij=1
  • 对于每个 i =1÷3,指数之和为 (j=1÷3o(Xij≤Bi

目标: 优化:

  • 最大化(总和(按索引 i=1÷3( 总和(按索引 j=1÷30( Pij *Xij(

呵,我们可以解决R中的问题吗?

我试图用lpsolve包做。收到的值不正确。

线性规划解决方案中 R 中的约束数量是否存在限制?

在实际情况中,我们的案例超过 25000(j 指数为 1÷30000(

提前谢谢你,

博里亚纳

决定将此任务简化为线性编程任务。这种决策方式构造了一个矩阵,Bi 约束维数为 3 x 3*j,Xij 约束构造了一个矩阵 j x 3*j 维数。两个矩阵应该垂直组合作为任务的约束——接收到的矩阵是 3+j x 3*j 维数。对象向量由 Pij 构造,但作为向量 90 x 1。rhs 约束是 Bi (1 x 3( 和 1 (1 x j( 向量的组合 – 向量是 1 x 3 + j。它适用于 lp 或 Rglpk_solve_LP。我用几个组合检查了这个。它适用于 j=5000,但不适用于 j=10000。我们应该将其用于 30000 个案例。矩阵变得太大了。是否有可能用另一种方式解决这个问题?线性编程过程有哪些限制?它们是否仅由计算机的RAM和矩阵的大小提供?

# 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)

最新更新