Tooling for sampling and solving instances of the 0-1 Knapsack Problem
Project description
PyKP
PyKP is a free and open-source library for sampling and solving instances of the knapsack problem. It provides tools to define knapsack instances, solve them eficiently, and analyse computational complexity metrics. You can also use pykp to randomly sample knapsack problem instances based on specified distributions.
Features
- Define knapsack problem instances with custom items, weights, and values.
- Solve knapsack instances using branch-and-bound and other methods.
- Compute optimal and feasible solutions for different knapsack configurations.
- Analyse computational complexity metrics.
- Generate synthetic knapsack instances with custom weight, density, and solution value ranges.
Installation
PyKP support Python version 3.12 and higher. To install PyKP, run
pip install pykp
Usage
Defining and Solving a Knapsack Problem
To start, define a knapsack problem with a set of items and solve it using the Knapsack class.
import numpy as np
from pykp import Knapsack
from pykp import Item
# Define items for the knapsack
items = np.array([
Item(value=10, weight=5),
Item(value=15, weight=10),
Item(value=7, weight=3)
])
# Initialise a Knapsack instance
capacity = 15
knapsack = Knapsack(items=items, capacity=capacity)
knapsack.solve()
# Display the optimal solution
print("Optimal Solution Value:", knapsack.optimal_nodes[0].value)
Generating Knapsack Instances with Sampler
The Sampler class allows you to generate knapsack instances based on specific ranges for item densities (value/weight ratio) and optimal solution values.
from pykp import Sampler
# Initialise a Sampler instance with desired ranges
sampler = Sampler(
num_items=5,
normalised_capacity=0.6,
density_range=(0.5, 1.5),
solution_value_range=(100, 200)
)
# Generate a sampled knapsack instance
sampled_knapsack = sampler.sample()
print("Sampled Knapsack Capacity:", sampled_knapsack.capacity)
Analysing Knapsack Solutions
The package provides methods to analyse the optimal solutions and other feasible arrangements.
# Display a summary of the knapsack solutions
print(sampled_knapsack.summary())
License
This project is licensed under the MIT License.
Contributing
Contributions are welcome. Please fork the repository and submit a pull request.
Contact
For questions or feedback, please reach out at hrs.andrabi@gmail.com.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pykp-1.0.0.tar.gz.
File metadata
- Download URL: pykp-1.0.0.tar.gz
- Upload date:
- Size: 12.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aec30efa5db6c9d8437f389640744038118c046b5f09d24dff5e3f74b5759949
|
|
| MD5 |
2a807666b0acf4cc4197ae57d78e269e
|
|
| BLAKE2b-256 |
5bf213ac17f691fb56a22c102009bd9816706ef60c1565f9f2abf16928dccecc
|
File details
Details for the file pykp-1.0.0-py3-none-any.whl.
File metadata
- Download URL: pykp-1.0.0-py3-none-any.whl
- Upload date:
- Size: 11.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d5eac7d3ddfc6ecb3070aa026bdf2083e6a4616496eba2a768a60db3c4550245
|
|
| MD5 |
14807d962972eba59191573a20361206
|
|
| BLAKE2b-256 |
6efdf79799c7b8f996abfa071736e6451d15d9a943022cfad1c54f81902e82b3
|