This package solves multiple knapsack problem by assigning items optimally to knapsacks using Mixed Integer Linear Programming (MILP) solver of choice.
We start with a list of items that we want to order with each assigned a:
Those items should be optimally packed into multiple containers of the a given size (cap). Items should be aded to containers in the way that each container is more profitable than the following one.
Package implements interface to several solvers which can be set via mknapsack.solver
option.
Currently you can choose from those options:
lpsolve
is default option.
Solve problem with CBC COIN-OR solver:
set.seed(100)
devtools::install_github("dirkschumacher/rcbc")
devtools::install_github("dirkschumacher/ROI.plugin.cbc")
devtools::install_github("madedotcom/mknapsack")
library(rcbc)
library(ROI)
library(ROI.plugin.cbc)
library(data.table)
library(mknapsack)
options(mknapsack.solver = "cbc")
items <- data.table(
volume = pmin(rlnorm(100, log(2), log(3)), 15),
profit = rgamma(100, shape = 1, scale = 100) - 25
)
items[, knapsack :=
mknapsack(
profit = profit,
volume = volume,
cap = 65
)]
#Aggregate solution to knapsacks
knapsacks <- items[order(knapsack),
.(volume = sum(volume), profit = sum(profit)),
by = knapsack]
knapsacks
# knapsack volume profit
# 1: 1 64.89659 5000.27608
# 2: 2 64.40358 1540.40302
# 3: 3 64.97235 340.92516
# 4: 4 53.33824 88.02793
# 5: NA 91.13399 -272.54349
#
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.