线性编程设置-选择组以使单个项目在约束范围内

时间:2018-11-26 02:42:29

标签: r linear-programming lpsolve

我认为自己对二进制lpSolve的问题非常精通,但是我真的很难思考如何设置新问题(并且我认为我可能需要lpSolveAPI)。

基本上我有6顿饭,包括3种水果。每个水果都有使用的最短和最大次数,但是只能选择三餐。在此示例中,我要选择6餐中的3餐,这样可以使超出或低于其各自限制条件的水果总和最小化(以下更多详细信息)。

# library(lpSolve)

# Total number of meals to choose
numCombos <- 3

# Individual fruit constraints
AppleCon <- c(1, 2)
OrangeCon <- c(0, 2)
PeachCon <- c(2, 2)
PearCon <- c(0, 1)
BananaCon <- c(1, 2)
GrapeCon <- c(1, 1)

# Meals to choose from
Combo1 <- c('Apple', 'Orange', 'Peach')
Combo2 <- c('Apple', 'Pear', 'Peach')
Combo3 <- c('Banana', 'Grape', 'Pear')
Combo4 <- c('Orange', 'Grape', 'Peach')
Combo5 <- c('Grape', 'Banana', 'Apple')
Combo6 <- c('Pear', 'Orange', 'Grape')

# Number of each
# Apple 3
# Orange 3
# Peach 3
# Pear 3
# Banana 2
# Grape 4

我要如何计算损失的示例:

  1. 说我要选择组合1、2和3。这将给我2个苹果,1个橙子,2个桃子,2个梨,1个香蕉和1个葡萄。梨的最大数量为1,因此选择组合1、2和3的总损失为1(选择的2个梨减去最大约束1)。

  2. 说我要选择组合2、4和6。这将给我1个苹果,2个梨,2个桃子,2个葡萄和2个橙子。此组合的梨太多(最多1个),葡萄(最多1个)和香蕉太少(最少1个)。因此,总损失为3。

如果可能的话,如果一种水果越来越少,我也希望损失会更大。例如。拥有2个过多的苹果比拥有1个太多的橙子和1个太多的葡萄更糟。最简单的方法是对约束求平方,但是我不知道对于“线性”编程而言是否可接受。

如果要像我所知道的那样设置一个lpSolve,我将为每个单独的水果创建2个虚拟列,其中每行将有1个虚拟列,具体取决于该水果是否在该组合中。但是,这将不起作用,因为在该示例中,实际上我没有最小化或最大化任何内容,并且如果不存在解决方案,则它不会选择最佳的解决方案。我现实生活中的问题包括80多个“水果”,600多个“餐点”,我需要从中选择200个,因此,在开始将其应用于实际问题之前,我想确保自己有一个像这样的通用示例。 / p>

0 个答案:

没有答案