具有多个约束的lpSolve背包线性规划

时间:2018-07-15 04:28:55

标签: r permutation linear-programming knapsack-problem

我一直在尝试修改Knapsack Linear Programming帖子中的示例,以解决具有多个约束的多重背包类型问题。下面提供了一个reprex。将背包限制为x个项目时,链接后的解决方案效果很好。但是,当添加以下所述的其他项目限制约束(2和3)时,我的尝试失败了。

背包必须满足以下条件:

  1. 必须选择10个项目exact.num.elt <- 10
  2. 每个项目都有一个标签Type1Type2等(包含在向量t中)和相应的重量(包含在向量w中)
  3. 背包中的每个Type的总和必须分别等于1、2或3。
  4. 我还希望能够生成可能的背包解决方案的多个背包结果,以便对背包解决方案进行比较分析

库(lpSolve)

p <- c(rnorm(50, 15, 5))
t <- rep(c("Type1", "Type2", "Type3", "Type4", "Type5"), length.out = 50) #item labels
w <- c(rnorm(50, 3500)) #the weight of each item
cap <- 32000  #sum of 'w' cannot exceed this amount
exact.num.elt <- 10 #total knapsack capacity

# max item limit by Type - set const.dir to "=" for each type
Type1 <- 2
Type2 <- 1
Type3 <- 2
Type4 <- 2
Type5 <- 3
mod <- lp(direction = "max",
          objective.in = p,
          const.mat = rbind(w, rep(1, length(p))) & rbind(t, rep(1, length(t))),
          const.dir = c("<=", "=", "=", "=", "=", "=", "="),
          const.rhs = c(cap, exact.num.elt, Type1, Type2, Type3, Type4, Type5),
          all.bin = TRUE)

运行上述reprex会产生以下错误:

  

rbind(w,rep(1,length(p)))和rbind(t,rep(1,length(t)))中的错误:     操作仅适用于数字,逻辑或复杂类型

我可以看到此错误与我对constant.mat参数进行编码的方式有关。但是,我无法弄清楚如何添加额外的Type约束而不产生一个错误或另一个错误。我还希望能够生成多个(例如10或20个)不同的解决方案,以便生成汇总统计信息。

0 个答案:

没有答案