Skip to content

fbk-pso/cpse

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

96 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

CPSE is not yet available on PyPI, but you can install it directly from the source repository. The required Google OR-Tools package will be installed automatically.

pip install git+https://github.com/fbk-pso/cpse.git

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.

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 Lesser General Public License v3.0 (LGPL-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.

About

CP Scheduler Engine

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages