如何在 R 中为背包问题的线性规划添加约束?

Posted

技术标签:

【中文标题】如何在 R 中为背包问题的线性规划添加约束?【英文标题】:How to add constraints to Linear Programming of the Knapsack Problem in R? 【发布时间】:2019-02-11 01:48:00 【问题描述】:

我正在研究在以下位置找到的代码:https://sites.math.washington.edu/~conroy/2015/m381-aut2015/Rexamples/knapsack.r

我想知道是否有人知道如何添加一个仅允许背包中包含一定数量物品的条件约束。我将如何修改代码以仍然优化背包的价值但只取一定数量的物品?

# import the lpsolve library
library(lpSolve)

# objective function
knapsack.obj <- c(500,300,100,210,360,180,220,140,90)

#constraints
knapsack.con <- matrix(c(30,35,10,15,35,22,29,18,11),nrow=1,byrow=TRUE)
knapsack.dir <- c("<=")
knapsack.rhs <- c(100)

#solve
# Note when we call the lp function, we set all.bin=TRUE to indicate that all variables are 0 or 1
# If we just wanted to specify integer values generally, we would set all.int=TRUE
# The default for both of these options if FALSE
knapsackSolution <- lp("max",knapsack.obj,knapsack.con,knapsack.dir,knapsack.rhs,all.bin=TRUE) 
print("Solution is:")
print(knapsackSolution$solution)
print("Objective function value at solution is:")
print(knapsackSolution$objval)

【问题讨论】:

【参考方案1】:

您可以将其添加到约束中,如下所示:

numItems <- 5
knapsack.con <- matrix(c(30,35,10,15,35,22,29,18,11, rep(1, length(knapsack.obj))), nrow=2, byrow=TRUE)
knapsack.dir <- c("<=", "==")
knapsack.rhs <- c(100, numItems)

【讨论】:

我在修改该约束矩阵时遇到了很多麻烦。这是一个巨大的帮助,谢谢!

以上是关于如何在 R 中为背包问题的线性规划添加约束?的主要内容,如果未能解决你的问题,请参考以下文章

为啥解决背包问题不被视为线性规划?

ortools如何添加非线性约束

背包问题怎样给出符号说明,目标函数和约束条件

分享经典的动态规划问题

分享经典的动态规划问题

在 R 中为数据集中的特定列循环线性回归