Skip to main content

pymhlib - a toolbox for metaheuristics and hybrid optimization methods

Project description

pymhlib - A Toolbox for Metaheuristics and Hybrid Optimization Methods

BuildStatus codecov.io

This project is still in early development, any feedback is much appreciated!

pymhlib is a collection of modules supporting the efficient implementation of metaheuristics and certain hybrid optimization approaches for solving primarily combinatorial optimization problems in Python 3.7+.

This Python mhlib version emerged from the C++ mhlib to which it has certain similarities but also many differences.

Note that there also exists a more recent efficient Julia-implementation of this libraries, following a similar design concept: Julia MHLib.jl

The main purpose of the library is to support rapid prototyping and teaching. While ultimately efficient implementations of such algorithms in compiled languages like Julia or C++ will in general be much faster, an advantage of the Python implementation lies in the possibly quicker development cycle.

pymhlib is developed primarily by the Algorithms and Complexity Group of TU Wien, Vienna, Austria, since 2019.

Contributors:

Installation

Major versions of pymhlib can be installed from PyPI via

python3 -m pip install -U pymhlib

and development versions are available at https://github.com/ac-tuwien/pymhlib.

Major Components

  • solution.py: An abstract base class Solutionthat represents a candidate solution to an optimization problem and derived classes VectorSolution, BinaryVectorSolution, and SetSolution for solutions which are represented bei general fixed-length vectors, boolean vectors or sets of arbitrary elements.
  • binvec_solution.py: A more specific solution class BinaryVectorSolution for problems in which solutions are represented by fixed-length binary vectors.
  • subsetvec_solution.py: A more specific solution class SubsetVectorSolution for problems in which solutions are subsets of a larger set. The set is realized by an efficient numpy array which is split into two parts, the one with the included elements in sorted order and the one with the remaining elements.
  • permutation_solution.py: A more specific solution class PermutationSolution for problems in which solutions are permutations of a set of elements.
  • scheduler.py: A an abstract framework for single metaheuristics that rely on iteratively applying certain methods to a current solution. Modules like gvns.py and alns.py extend this abstract class towards more specific metaheuristics.
  • gvns.py: A framework for local search, iterated local search, (general) variable neighborhood search, GRASP, etc.
  • alns.py: A framework for adaptive large neighborhood search (ALNS).
  • par_alns.py: A multi-process implementation of the ALNS where destroy+repair operations are parallelized.
  • population.py A population class for population-based metaheuristics.
  • pbig.py: A population based iterated greedy (PBIG) algorithm.
  • ssga.py: A steady-state genetic algorithm (SSGA).
  • sa.py: A simulated annealing (SA) algorithm with geometric cooling.
  • decision_diag.py: A generic class for (relaxed) decision diagrams for combinatorial optimization.
  • log.py: Provides two logger objects, one for writing out general log information, which is typically written into a *.out file, and one for iteration-wise information, which is typically written into a *.log file. The latter is buffered in order to work also efficiently, e.g., on network drives and massive detailed log information. A class LogLevel is provided for indented writing of log information according to a current level, which might be used for hierarchically embedded components of a larger optimization framework, such as a local search that is embedded in a population-based approach.
  • settings.py: Allows for defining module-specific parameters directly in each module in an independent distributed way, while values for these parameters can be provided as program arguments or in configuration files. Most pymhlib modules rely on this mechanism for their external parameters.

Modules/scripts for analyzing results of many runs:

  • multi_run_summary.py: Collects essential information from multiple pymhlib algorithm runs found in the respective out and log files and returns a corresponding pandas DataFrame if used as a module or as a plain ASCII table when used as independent script. The module can be easily configured to extract also arbitrary application-specific data.

  • aggregate_results.py: Calculate grouped basic statistics for one or two dataframes/TSV files obtained e.g. from multi-run-summary.py. In particular, two test series with different algorithms or different settings can be statistically compared, including Wilcoxon signed rank tests. The module can be used as standalone script as well as module called, e.g., from a jupyter notebook.

Demos

For demonstration purposes, simple metaheuristic approaches are provided in the demo subdirectory for the following well-known combinatorial optimization problems. They can be started by

python3 -m pymhlib.demos.<problem> ...

where <problem> is one of the following and ... represents further parameters that can be seen by providing the option -h. It is recommended to take such a demo as template for solving your own problem.

  • maxsat: maximum satisfiability problem based on BinaryVectorSolution
  • tsp: traveling salesperson problem based on PermutationSolution
  • qap: quadratic assignment problem based on PermutationSolution
  • vertex_cover: minimum vertex cover problem based on SetSolution
  • graph_coloring: graph coloring problem based on VectorSolution
  • misp: maximum (weighted) independent set problem based on SubsetVectorSolution
  • mkp: multidimensional 0-1 knapsack problem based on SubsetVectorSolution

Shared code of these demos is found in the submodules pymhlib.demos.common and pymhlib.demos.graphs, test instance data in pymhlib.demos.data.

Moreover, julia-maxsat.py and julia-maxsat.jl demonstrate the integration with the Julia programming language. Implementing time-critical parts of an application in Julia may accelerate the code substantially. To run this demo, Julia must be set up correctly and Python's julia package must be installed. While this demo derives a whole solution class in Julia, julia-maxsat2.py is a variant where only two functions are realized in Julia.

Changelog

Major changes in releases:

Version 0.1.5

  • bug fix in settings: repeated parse_settings` now resets former settings correctly
  • bug fix in common.py/run_optimization: seed now correctly passed to add_general_arguments_and_parse_settings
  • automatic installation of required other packages fixed

Version 0.1.4

  • cleaning according to pylint warnings
  • settings.parse_args may now be called multiple times

Version 0.1.3

  • bug fix in 2-opt neighborhood search of permutation representation

Version 0.1.2

  • directory renamed to pymhlib to correspond to module name
  • bug fix in Metropolis criterion of ALNS
  • boolean arguments must now be specified in the command line as any other parameter

Version 0.1.1

  • basic functionality test tests/test_all.py for all problems and algorithms added
  • polishing, minor fixes

Version 0.1.0

  • ALNS and parallel ALNS added
  • graph coloring, TSP, and minimum vertex cover demos added
  • population based iterated greedy and steady state genetic algorithms added
  • SA with geometric cooling added
  • demos.graphs introduced
  • mhlib renamed to pymhlib
  • demo for interfacing with Julia added
  • many smaller improvements, bug fixes, improvements in documentation

Version 0.0.1

  • Initial version

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pymhlib-0.1.5.tar.gz (235.7 kB view details)

Uploaded Source

Built Distributions

pymhlib-0.1.5-py3.9.egg (306.9 kB view details)

Uploaded Source

pymhlib-0.1.5-py3-none-any.whl (223.5 kB view details)

Uploaded Python 3

File details

Details for the file pymhlib-0.1.5.tar.gz.

File metadata

  • Download URL: pymhlib-0.1.5.tar.gz
  • Upload date:
  • Size: 235.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.1

File hashes

Hashes for pymhlib-0.1.5.tar.gz
Algorithm Hash digest
SHA256 ce2443f679c3b99d824a62ba31e869039be871ade921bce55c396de9fad194ca
MD5 83c26875cb517589a17c92605c727c19
BLAKE2b-256 de69e8154c710008b1fa7d0b55a8e022d8f41b9696227477eb4c0d0eb172186e

See more details on using hashes here.

File details

Details for the file pymhlib-0.1.5-py3.9.egg.

File metadata

  • Download URL: pymhlib-0.1.5-py3.9.egg
  • Upload date:
  • Size: 306.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.1

File hashes

Hashes for pymhlib-0.1.5-py3.9.egg
Algorithm Hash digest
SHA256 611bc2174c0e9994674f382c7cde4eac519f65d58f3d5b1e94fd02be125946be
MD5 375ca9544219db49c80b4ef015dfa151
BLAKE2b-256 bb0062cc0484f0fbf8d023fb06d876090c6d6cd5d8466e5c897d0c3075ae2c2e

See more details on using hashes here.

File details

Details for the file pymhlib-0.1.5-py3-none-any.whl.

File metadata

  • Download URL: pymhlib-0.1.5-py3-none-any.whl
  • Upload date:
  • Size: 223.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.1

File hashes

Hashes for pymhlib-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 c53570218d76d6dfb5563c3eab5f7ff91f8e556d0cb8a4a1992dea8ffe557bb9
MD5 14259ce7cf8dfc1c76798aa28ed25b89
BLAKE2b-256 b4a6e8d1aef12d03b6a8e6a7e6985fc27433f54fc83835b7cf9df1629bf6f3ec

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page