Package: qmkpy
QMKPy: A Python Testbed for the Quadratic Multiple Knapsack ProblemThis software package primarily aims at research in the areas of operations
research and optimization.
It serves as a testbed that provides a way of quickly implementing and testing
new algorithms to solve the quadratic multiple knapsack problem (QMKP) and
compare it with existing solutions.The goal is to encourage researchers and developers to share their algorithms
and make them publicly available.Problem DescriptionThe QMKP is defined as the following combinatorial optimization problem$$
\begin{alignat}{3}
\max\quad & \sum_{u\in\mathcal{K}}\Bigg(\sum_{i\in\mathcal{A}(u)} p_{i} &+&\sum_{\substack{j\in\mathcal{A}(u), \ j\neq i}} p_{ij}\Bigg)\
\mathrm{s.t.}\quad & \sum_{i\in\mathcal{A}(u)} w_{i} \leq c_u & \quad & \forall u\in\mathcal{K} \
& \sum_{u=1}^{K} a_{iu} \leq 1  & & \forall i \in {1, 2, \dots, N}
\end{alignat}
$$This describes an assignment problem where one wants to assign $N\in\mathbb{N}$
items to $K\in\mathbb{N}$ knapsacks, which are described by the index set
$\mathcal{K}={1, 2, \dots, K}$.
Item $i$ has the weight $w_i\in\mathbb{R_+}$ and knapsack $u$ has the weight
capacity $c_u\mathbb{R_+}$.
If item $i$ is assigned to a knapsack, it yields the (non-negative) profit
$p_i\in\mathbb{R_+}$.
If item $j$ (with $j\neq i$ ) is assignedto the sameknapsack, we get the
additional joint profit $p_{ij}\in\mathbb{R_+}$.The set of items which are assigned to knapsack $u$ is denoted by
$\mathcal{A}(u)$ and $a_{iu}\in{0, 1}$ is an indicator whether item $i$ is
assigned to knapsack $u$.The objective of the above problem is to maximize the total profit such that
each item is assigned to at most one knapsack and such that the weight capacity
constraints of the knapsacks are not violated.Remark:The profits $p$ are also referred to as "values" in the literature.FeaturesQuick and simple creation of QMKP instancesSaving/loading of problem instances for a simple creation and use of
reference datasetsEasy implementation of novel algorithms to solve the QMKPHigh reproducibility and direct comparison between different algorithmsThe benefit of enabling a simple and direct way of implementing novel
algorithms is highlighted by an example in the provided Jupyter notebook inexamples/Custom
Algorithm.ipynb.InstallationThe package can easily be installed via pip.
Either from the PyPIpip3installqmkpyor from the GitHub repositorygitclonehttps://github.com/klb2/qmkpy.gitcdqmkpy
gitcheckoutdev# optional for the latest development versionpip3install-rrequirements.txt
pip3install.
pip3installpytest# optional if you want to run the unit testsUsageIn order to test the installation and get an idea of how to use the QMKPy
package, you can take a look at theexamples/directory.
It contains some standalone scripts that can be executed and perform some
simple tasks.More detailed descriptions of the implemented algorithms and a documentation of
the API can be found in thedocumentation.A collection of reference datasets can be found athttps://github.com/klb2/qmkpy-datasets.ContributingPlease seeCONTRIBUTING.mdfor guidelines on how to contribute to this project.
In particular, novel algorithms are always welcome. Please check out thedocumentationfor a brief overview on how to implement new algorithms for the QMKPy
framework.