Как добавить ограничения в линейное программирование задачи о ранце в R? - PullRequest
0 голосов
/ 11 февраля 2019

Я работал с кодом, найденным по адресу: 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 Ответ

0 голосов
/ 11 февраля 2019

Вы можете добавить его к ограничениям следующим образом:

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