Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

666 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Pumpkin

Pumpkin on crates.io DRCP Format on crates.io Pumpkin on PyPI Build Status docs.rs License: MIT OR Apache-2.0

ASCII art pumpkin logo


Pumpkin is a combinatorial optimisation solver developed within the ConSol Lab at TU Delft. It is based on the (lazy clause generation) constraint programming paradigm.

Our goal is to keep the solver efficient, easy to use, and well-documented. The solver is written in pure Rust and follows Rust best practices, making it straightforward to download and compile. Beyond being a solver, Pumpkin also serves as a research vehicle for the lab — a platform for prototyping and studying new solving techniques, several of which are described in our publications.

A unique feature of Pumpkin is that it can produce certificates of infeasibility and optimality, which can be checked independently of the solver using our formally verified checker. See our CP'24 and CP'26 papers for details.

🥈🥉 Silver (fixed search) and bronze (free search) at the 2026 MiniZinc Challenge

🥉 Bronze (fixed search) at the 2025 MiniZinc Challenge


Table of Contents

Features

Pumpkin can produce certificates of infeasibility and optimality, checkable using our formally verified checker.

Pumpkin currently supports integer variables and the following (global) constraints:

We are actively developing Pumpkin and would be happy to hear from you — feel free to open an issue or start a discussion with any questions or feature requests!

Installation

To use Pumpkin as a library, use cargo to install it with:

cargo add pumpkin-solver

Pumpkin is also the command-line interface to the library. It provides support for (W)CNF and FlatZinc files. Obtaining the solver binary can also be done with cargo:

cargo install pumpkin-solver

Building from Source

To clone the project, run:

git clone https://github.com/ConSol-Lab/Pumpkin.git

Since Pumpkin is written in pure Rust, it is easy to install! After cloning, you can build the project using the most recent stable version of Rust using the following commands:

cargo build           # Creates a non-optimized build with debug info
cargo build --release # Creates an optimized build

Examples

Examples of how to use the solver are included in the documentation of the different components. For more concrete, runnable examples of solving example problems with Pumpkin, see the examples folder, which includes bibd, nqueens, and disjunctive scheduling.

MiniZinc

Pumpkin serves as a backend solver for the MiniZinc modelling language.

To use it as a backend, follow these steps:

  • Step 1: Clone the repository and build it using cargo build --release.
  • Step 2: Install MiniZinc using the appropriate executable or binary archive.
  • Step 3: Add the following to the MZN_SOLVER_PATH environment variable: <path_to_pumpkin>/minizinc (see this thread on how to do this using a shell).
  • Step 4: Check whether the installation worked using the command minizinc --help pumpkin.

This will add Pumpkin and PumpkinProof (which uses a flattening library specific for proof logging).

Components

Pumpkin consists of several different components:

The easiest way to get to know the different modules is through the documentation. This documentation can be created automatically using the command:

cargo doc --no-deps

Contributing

We encourage contributions to Pumpkin via pull requests and issues. When contributing, please ensure that you adhere to the following guidelines.

Documentation

One of the development goals of Pumpkin is to ensure that the solver is easy to use and well-documented. To this end, it is required that any external contribution is well-documented (both the structs/enums/methods and the implementation itself)!

Pre-commit Hooks

To ensure certain standards, we make use of pre-commit hooks. The hooks that we use can be registered using the following command:

cp .githooks/pre-commit .git/hooks

Formatting

To make use of these formatting rules, we require the nightly toolchain. Note that we only use the nightly toolchain for formatting. The nightly version can be installed using the following command:

rustup toolchain install --component rustfmt -- nightly

The formatting can then be run using:

cargo +nightly fmt

Team

Pumpkin is developed within the ConSol Lab at TU Delft.

  • Emir Demirović: Principal Investigator.
  • Maarten Flippo, Imko Marijnissen: Core developers, with contributions from others.

Publications Involving Pumpkin

Led by the ConSol Lab

Led by others

Citing

Please cite Pumpkin using the following citation:

@inproceedings{marijnissen_et_al:LIPIcs.CP.2026.42,
  author = {Marijnissen, Imko and Flippo, Maarten and Demirovi\'{c}, Emir},
  title = {{From Literals to Atomic Constraints: Generalising Conflict-Driven Clause Learning for Constraint Programming}},
  booktitle = {32nd International Conference on Principles and Practice of Constraint Programming (CP 2026)},
  pages = {42:1--42:21},
  series = {Leibniz International Proceedings in Informatics (LIPIcs)},
  isbn = {978-3-95977-432-1},
  issn = {1868-8969},
  year = {2026},
  volume = {379},
  editor = {Beldiceanu, Nicolas},
  publisher = {Schloss Dagstuhl -- Leibniz-Zentrum f{\"u}r Informatik},
  address = {Dagstuhl, Germany},
  url = {https://drops.dagstuhl.de/entities/document/10.4230/LIPIcs.CP.2026.42},
  urn = {urn:nbn:de:0030-drops-266744},
  doi = {10.4230/LIPIcs.CP.2026.42},
  annote = {Keywords: LCG, CP, CDCL, Lazy Literal, Conflict Analysis, Nogood Propagation},
}

If you are using the proof-logging capabilities of Pumpkin, please additionally include the following citation:

@InProceedings{flippo_et_al:LIPIcs.CP.2024.11,
  author =  {Flippo, Maarten and Sidorov, Konstantin and Marijnissen, Imko and Smits, Jeff and Demirovi\'{c}, Emir},
  title =   {{A Multi-Stage Proof Logging Framework to Certify the Correctness of CP Solvers}},
  booktitle =   {30th International Conference on Principles and Practice of Constraint Programming (CP 2024)},
  pages =   {11:1--11:20},
  series =  {Leibniz International Proceedings in Informatics (LIPIcs)},
  ISBN =    {978-3-95977-336-2},
  ISSN =    {1868-8969},
  year =    {2024},
  volume =  {307},
  editor =  {Shaw, Paul},
  publisher =   {Schloss Dagstuhl -- Leibniz-Zentrum f{\"u}r Informatik},
  address = {Dagstuhl, Germany},
  URL =     {https://drops.dagstuhl.de/entities/document/10.4230/LIPIcs.CP.2024.11},
  URN =     {urn:nbn:de:0030-drops-206969},
  doi =     {10.4230/LIPIcs.CP.2024.11},
  annote =  {Keywords: proof logging, formal verification, constraint programming}
}

License

Pumpkin is dual-licensed under either of

at your option.

About

A Lazy Clause Generation Constraint Programming solver written in Rust.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages