Number partitioning in Python
Project description
prtpy
Python code for multiway number partitioning and bin packing algorithms.
Supports several exact and approximate algorithms, with several input formats, optimization objectives and output formats.
Installation
Basic installation:
pip install prtpy
To run simulation experiments:
pip install prtpy[simulations]
To speed up the ILP code, you can install the GUROBI solver. See the documentation of Python-MIP for more information.
Usage
The function prtpy.partition
can be used to activate all number-partitioning algorithms. For example, to partition the values [1,2,3,4,5] into two bins using the greedy approximation algorithm, do:
import prtpy
prtpy.partition(algorithm=prtpy.partitioning.greedy, numbins=2, items=[1,2,3,4,5])
To use the exact algorithm based on ILP, and maximize the smallest sum:
prtpy.partition(algorithm=prtpy.partitioning.ilp, numbins=2, items=[1,2,3,4,5], objective=prtpy.obj.MaximizeSmallestSum)
Similarly, the function prtpy.packing
can be used to activate all bin-packing algorithms.
For more features and examples, see:
- Number-partitioning algorithms;
- Bin-packing algorithms;
- Bin-covering algorithms;
- Input formats;
- Optimization objectives;
- Output formats.
Adding new algorithms
To add a new algorithm for number partitioning, write a function that accepts the following parameters:
binner
- an item of classBinner
structure (see below).numbins
- an integer - how many bins to put the items into.items
- a list of item-names (the item values are given by the functionbinner.valueof
).- Any other parameters that are required by your algorithm.
For an example, see the implementation of existing algorithms, e.g. greedy.
To add a new algorithm for bin packing or bin covering, write a function that accepts the following parameters:
binner
- an item of classBinner
structure (see below).binsize
- the capacity of a bin (maximum sum in bin-packing; minimum sum in bin-covering).items
- a list of item-names (the item values are given by the functionbinner.valueof
).- Any other parameters that are required by your algorithm.
For an example, see the implementation of existing algorithms, e.g. first_fit.
The Binner class contains methods for handling bins in a generic way --- handling both item-names and item-values with a single interface. The main supported methods are:
bins = binner.new_bins(numbins)
--- constructs a new array of empty bins.binner.add_item_to_bin(bins, item, index)
--- updates the givenbins
array by adding the given item to the bin with the given index.binner.sums(bins)
--- extracts, from the bins array, only the array of sums.bins = binner.add_empty_bins(bins, numbins)
--- creates a newbins
array with some additional empty bins at the end.bins = binner.remove_bins(bins, numbins)
--- creates a newbins
array with some bins removed at the end.binner.valueof(item)
--- returns the value (size) of the given item.
Related libraries
- numberpartitioning by Sֳ¸ren Fuglede Jֳ¸rgensen - the code for complete_greedy and complete_karmarkar_karp was originally adapted from there.
- binpacking by Ben Maier.
Limitations
The package is tested on Python versions 3.8, 3.9 and 3.10. Other versions are not supported.
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
File details
Details for the file prtpy-0.8.3.tar.gz
.
File metadata
- Download URL: prtpy-0.8.3.tar.gz
- Upload date:
- Size: 61.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.11
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a6cec04a8fd7c1add066aef6292a992048527ec8c0e6e0780e46acd5d02ee36a |
|
MD5 | d09a9e9bee8f79a3cf62b463cab53277 |
|
BLAKE2b-256 | 3d23907d3b406c8a9b506d11008163c0de10d7c643f91311fc3cd8d71228ab2a |
File details
Details for the file prtpy-0.8.3-py3-none-any.whl
.
File metadata
- Download URL: prtpy-0.8.3-py3-none-any.whl
- Upload date:
- Size: 64.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.11
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | cb3159172589104a513bac64218ddfe773ecd58f4a25dedcc1f099cf8096700f |
|
MD5 | c45917ab1bf82ae522a890d62d90ef54 |
|
BLAKE2b-256 | c38961611b2146446a83cfe9103f91c4b6e30026ab7070dd6807dba5b65cce18 |