Skip to content

PRINTEMPS v2.9.0

Latest

Choose a tag to compare

@github-actions github-actions released this 20 Jul 15:29

Important announcement

  • Removes the deprecated standalone solvers mps_solver and opb_solver. (Users should migrate to the unified printemps executable or use the new Python bindings).

New features and improvements

Python Bindings (New)

  • Introduces official Python bindings using pybind11 under python/, enabling users to import and run PRINTEMPS directly from Python. (by @msakai)
  • Bundles Printemps headers in the source distribution (sdist) for easier integration and offline installation. (by @msakai)

Algorithms

  • Improves the restart strategy for Tabu Search for diversification.
  • Implements a pullback mechanism to recover local penalty coefficients for escaping stagnation.
  • Relaxes the constraint types used in the acceptance decision of Chain moves to find better solutions.
  • Removes the automatic pruner for Tabu Search.
  • Implements a partial feasible solution enumerator to fix variables and generate efficient moves, and extract dependent binary variables.
  • Improves the computational efficiency of extracting dependent binary variables by Union-Find with parity support.
  • Introduces a new constraint type 'All Or Nothing' (defined as $\sum_{i=1}^n x_i = n y$ for binary variables $x_i$ and $y$, which forces the variables $x_i$ to be either all 1s or all 0s).
  • Implements dependent variable extraction for the 'Trinomial Exclusive NOR' and 'All Or Nothing' constraint types.
  • Updates internal distance calculations to use the L1 norm (instead of the L0 norm) to measure similarities between solutions.

Input/Output

  • No changes.

Option

  • Introduces the following new options:
    • penalty.penalty_coefficient_pullback_rate: (default: 1E-4)
    • neighborhood.is_enabled_partial_feasible_enumeration_move: (default: true)
    • preprocess.is_enabled_remove_implicit_fixed_variables: (default: true)
    • preprocess.is_enabled_partial_feasible_enumeration: (default: true)
    • preprocess.is_enabled_extract_dependent_trinomial_exclusive_nor: (default: true)
    • preprocess.is_enabled_extract_dependent_all_or_nothing: (default: true)
    • preprocess.is_enabled_extract_dependent_using_partial_feasible_enumeration: (default: true)
  • Changes the default values of the following options:
    • neighborhood.is_enabled_precedence_move: false to true
    • neighborhood.is_enabled_variable_bound_move: false to true
    • neighborhood.is_enabled_trinomial_exclusive_nor_move: false to true
    • neighborhood.is_enabled_soft_selection_move: false to true
    • preprocess.is_enabled_extract_dependent_exclusive_nor: false to true
    • preprocess.is_enabled_extract_dependent_balanced_integers: false to true
  • Removes the following options:
    • tabu_search.is_enabled_automatic_break

Scripts

  • No changes.

Standalone Solvers & Input/Output

  • Adds a WCNF parser and the printemps-maxsat solver for the MaxSAT Evaluation 2026 anytime track, extending standalone solver support for WCNF input files. (by @msakai)
  • Adds the -i option for specifying an initial solution and the -f option for fixing variables in pb_competition_solver. (by @msakai)
  • Allows standalone solvers to accept input files with the .opb extension directly. (by @msakai)
  • Supports larger coefficient values using int64_t in the OPB parser. (by @msakai)
  • Updates the MPS parser to accept ROWS section lines with three or more tokens, improving compatibility with instances such as ivu59 from MIPLIB2017.

Build

  • Introduces a root-level Makefile to simplify C++ compilation and test execution (e.g., supporting make, make run-test, or make CONFIG=Debug).

Bug fixes

  • Fixes a segmentation fault (SEGV) that occurred when importing OPB files containing negated variables. (by @msakai)
  • Fixes a coefficient magnitude issue in pb_competition_solver (#245) (by @msakai).
  • Fixes a bug where incorrect optimization signs were applied based on the minimization flag in certain model configurations.
  • Resolves MSVC link errors by using Threads::Threads for testing. (by @msakai)
  • Guards bound-tightening casts against double overflow. (by @msakai)