Skip to main content

A Python interface to the Exact integer linear programming solver

Project description

Exact

Exact solves decision and optimization problems formulated as integer linear programs. Under the hood, it converts integer variables to binary (0-1) variables and applies highly efficient propagation routines and strong pseudo-Boolean conflict analysis.

Exact is a fork of RoundingSat and improves upon its predecessor in reliability, performance and ease-of-use. The name "Exact" reflects that the answers are fully sound, as approximate and floating-point calculations only occur in heuristic parts of the algorithm. As such, Exact can soundly be used for verification and theorem proving, where its envisioned ability to emit machine-checkable certificates of optimality and unsatisfiability should prove useful.

Features

  • Native conflict analysis over binary linear constraints, constructing full-blown cutting planes proofs.
  • Highly efficient watched propagation routines.
  • Seamless use of arbitrary precision arithmetic when needed.
  • Hybrid linear (top-down) and core-guided (bottom-up) optimization.
  • Optional integration with the SoPlex LP solver.
  • Compiles on macOS.
  • Python interface with assumption solving and reuse of solver state.
  • Under development: generation of certificates of optimality and unsatisfiability that can be automatically verified by VeriPB.

Python usage

Either compile a shared library locally or use the published (PyPI package](https://pypi.org/project/exact) (Linux only for now) via the pip or poetry package managers.

The header file Exact.hpp contains the C++ methods exposed to Python via cppyy as well as their description. This is probably the place to start to learn about Exact's Python usage.

Next, python/examples contains two commented instructive examples.

  • python/examples/knapsack_classic.py showcases how to solve an integer classic knapsack problem with Exact's Python interface.
  • python/examples/knapsack_implied.py, elaborates on the first and showcases how to find the variable assignments implied by optimality, i.e., the variable assignments shared by all optimal solutions. A combination of the mechanics of assumption and solution invalidation allow to reuse the existing solver state (containing learned constraints) for optimal performance.

File-based usage

Exact takes as input a binary linear program and outputs a(n optimal) solution or reports that none exists. Either pipe the program

cat test/instances/opb/opt/stein15.opb | build/Exact

or pass the file as a parameter

build/Exact test/instances/opb/opt/stein15.opb

Use the flag --help to display a list of runtime parameters.

Exact supports five input formats (described in more detail in InputFormats.md):

  • .opb pseudo-Boolean PBO (only linear objective and constraints)
  • .cnf DIMACS Conjunctive Normal Form (CNF)
  • .wcnf Weighted Conjunctive Normal Form (WCNF)
  • .mps Mathematical Programming System (MPS) via the optional CoinUtils library
  • .lp Linear Program (LP) via the optional CoinUtils library

By default, Exact decides on the format based on the filename extension, but this can be overridden with the --format option.

Compilation

In the root directory of Exact:

cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make

For a debug build:

cd build_debug
cmake -DCMAKE_BUILD_TYPE=Debug ..
make

For more builds, similar build directories can be created.

For installing system-wide or to the CMAKE_INSTALL_PREFIX root, use make install.

Dependencies

  • C++17 (i.e., a reasonably recent C++ compiler)
  • Boost library. On a Debian/Ubuntu system, install with sudo apt install libboost-all-dev.
  • Optionally: CoinUtils library to parse MPS and LP file formats. On a Debian/Ubuntu system, install with sudo apt install coinor-libcoinutils-dev.
  • Optionally: SoPlex LP solver (see below)

SoPlex

Exact supports an integration with the LP solver SoPlex to improve its search routine. For this, first download SoPlex 5.0.2 and place the downloaded file in the root directory of Exact. Next, follow the above build process, but configure with the cmake option -Dsoplex=ON:

cd build
cmake -DCMAKE_BUILD_TYPE=Release -Dsoplex=ON ..
make

The location of the SoPlex package can be configured with the cmake option -Dsoplex_pkg=<location>.

Citations

Origin paper with a focus on cutting planes conflict analysis:
[EN18] J. Elffers, J. Nordström. Divide and Conquer: Towards Faster Pseudo-Boolean Solving. IJCAI 2018

Integration with SoPlex:
[DGN20] J. Devriendt, A. Gleixner, J. Nordström. Learn to Relax: Integrating 0-1 Integer Linear Programming with Pseudo-Boolean Conflict-Driven Search. CPAIOR 2020 / Constraints journal

Watched propagation:
[D20] J. Devriendt. Watched Propagation for 0-1 Integer Linear Constraints. CP 2020

Core-guided optimization:
[DGDNS21] J. Devriendt, S. Gocht, E. Demirović, J. Nordström, P. J. Stuckey. Cutting to the Core of Pseudo-Boolean Optimization: Combining Core-Guided Search with Cutting Planes Reasoning. AAAI 2021

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

exact-0.3.2.tar.gz (790.1 kB view details)

Uploaded Source

Built Distribution

exact-0.3.2-py3-none-any.whl (820.3 kB view details)

Uploaded Python 3

File details

Details for the file exact-0.3.2.tar.gz.

File metadata

  • Download URL: exact-0.3.2.tar.gz
  • Upload date:
  • Size: 790.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.7 CPython/3.8.10 Linux/5.4.0-81-generic

File hashes

Hashes for exact-0.3.2.tar.gz
Algorithm Hash digest
SHA256 329da75d51e6ca57daf058da9f8364b857aa0f042060f465082a60fe04242e86
MD5 950a5cf7ee8e007ffdcda11145945344
BLAKE2b-256 26c866fd2a03bf7039b04b866f8a64d310dab115f401d78a0eb4fd3b664b0755

See more details on using hashes here.

File details

Details for the file exact-0.3.2-py3-none-any.whl.

File metadata

  • Download URL: exact-0.3.2-py3-none-any.whl
  • Upload date:
  • Size: 820.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.7 CPython/3.8.10 Linux/5.4.0-81-generic

File hashes

Hashes for exact-0.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 52bb496d7eb5851613162c13c8f550fd75d44fae9c67753294c2155676b8bf9d
MD5 f98f06043187be80c752481617756584
BLAKE2b-256 b8d4e4e110929ae0f03d68b387e75e26df7f88ee5285225502c2ee6a0c698097

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