Skip to main content

CPSE

CPSE (Constraint Programming Scheduling Engine) is a scheduling engine that encodes scheduling problems as constraint satisfaction models and solves them using the CP-SAT solver from Google OR-Tools.

CPSE offers two scheduling engines, each supporting different problem kinds:

  • cpse: Supports scheduling problems with optional activities and scoped constraints. Partial support for fluents is provided: only increase and decrease effects on non-parametric fluents are handled, while assignment effects are not supported.

  • cpse-timepoints: Supports scheduling problems without optional activities. Offers full support for fluents, but is generally more computationally intensive.

Installation

pip install up-cpse

To try the latest unreleased build, install a wheel directly from the rolling dev pre-release:

pip install --pre <url-of-wheel-on-dev-release>

Usage

CPSE is fully integrated with the Unified Planning framework. Before using CPSE, register its engines in the Unified Planning environment:

from unified_planning.shortcuts import *

# Register CPSE engines
env = get_environment()
env.factory.add_engine("cpse", "cpse", "CPSE")
env.factory.add_engine("cpse-timepoints", "cpse", "CPSETimepoints")

# Define your scheduling problem
scheduling_problem = ...

# Solve the problem using the cpse engine
with OneshotPlanner(name="cpse") as planner:
    result = planner.solve(scheduling_problem)
    print(result.plan)

Parameters

The CPSE engines support the following configuration parameters:

Parameter Type Default Value Description
lower_bound int 0 Minimum value for all model variables if not explicitly specified in the problem.
upper_bound int INT32_MAX Maximum value for all model variables if not explicitly specified in the problem (INT32_MAX = 2^31 - 1).

These parameters can be passed as a dictionary to OneshotPlanner:

params = {
  "lower_bound": 1,
  "upper_bound": 100
}

with OneshotPlanner(name="cpse", params=params) as planner:
    result = planner.solve(scheduling_problem)
    print(result.plan)

Tip: Adjusting these bounds can help restrict variable domains or improve solver performance for specific scheduling problems.

Development

CPSE uses uv to manage the environment and just as a task runner. After cloning:

just install        # uv sync — create .venv from uv.lock

Common tasks:

just test           # run the pytest suite
just lint           # ruff lint + format checks
just format         # auto-fix lint issues and format
just typecheck      # mypy
just precommit      # run all pre-commit hooks against the whole repo
just build          # build sdist + wheel into ./dist/

Install the git hook so the checks run automatically on each commit:

uv run pre-commit install

Running just --list shows all available recipes.

References

CPSE has been used in the following research paper:

  • Elisa Tosello, Arthur Bit-Monnot, Davide Lusuardi, Alessandro Valentini and Andrea Micheli (2026). Interleaving Scheduling and Motion Planning with Incremental Learning of Symbolic Space-Time Motion Abstractions. ICAPS 2026

License

CPSE is released under the GNU General Public License v3.0 (GPL-3.0). See the LICENSE file for full details.

Contact

For questions, bug reports, or contributions, please open an issue on GitHub or contact the authors at pso-tools@fbk.eu.

Release files for up-cpse 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for up-cpse 0.1.0
File Size Uploaded
up_cpse-0.1.0.tar.gz 36.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for up-cpse 0.1.0
File Interpreter ABI Platform
up_cpse-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 74.4 kB

Release files / up_cpse-0.1.0.tar.gz

Download URL up_cpse-0.1.0.tar.gz
Size 36.3 kB
Tags Source
SHA-256 checksum
How to use checksums
9b4ef71a99243094f1e8d360e5875b0223e58b2095b747ade9346bbd5e78c5c6
BLAKE2b-256 checksum
How to use checksums
1b3a25ab9c6cdc52af23f7b806c71b2e5bfcf69eeabce9bc566f113686743bcd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 13, 2026.

Transparency log

Release files / up_cpse-0.1.0-py3-none-any.whl

Download URL up_cpse-0.1.0-py3-none-any.whl
Size 38.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c9e75ebd76fdfeaa4d8e0fe0da41f855ac1c7c58bba0f7009be0d555b85348c6
BLAKE2b-256 checksum
How to use checksums
b86cfcefdc8958a56b16614e92cefdcf3953fbdeffe6c83a23223ee7c23ba5cb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 13, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page