Skip to main content

Temporal Planner via Encoding into Satisfiability Testing

Project description

TemPEST

TemPEST (Temporal Planner via Encoding into Satisfiability Testing) is a temporal planner that encodes temporal planning problems into SAT/SMT formulations, using modern SMT/OMT solvers to solve them efficiently.

TemPEST supports both satisficing and optimal temporal planning, with the ability to minimize makespan and action costs.

Installation

TemPEST is distributed on PyPI under the name up-tempest (the import package is still tempest). It builds on PySMT and ships with Z3 as the default SMT/OMT solver, so it works out of the box:

pip3 install up-tempest

To use a different solver (e.g. OptiMathSAT), install it via PySMT:

pysmt-install --optimsat   # or --msat, ...

Alternatively, install the latest development version from source:

pip3 install git+https://github.com/fbk-pso/tempest.git

Usage

TemPEST is fully integrated with the Unified Planning framework. You must register the planner engines with the Unified Planning environment:

from unified_planning.shortcuts import *

# Register TemPEST engines
env = get_environment()
env.factory.add_engine("tempest", "tempest.engine", "TempestEngine")
env.factory.add_engine("tempest-opt", "tempest.engine", "TempestOptimal")

# Define your temporal planning problem
problem = ...

# Solve with TemPEST
with OneshotPlanner(name="tempest", params={'incremental': False}) as planner:
    result = planner.solve(problem)
    print(result.plan)

Parameters

TemPEST has different parameters to configure its behavior. Some parameters are used by all engines, while most are specific to the optimal engines.

Common to All Engines

  • incremental (bool): Use incremental solver calls, reusing solver state across planning steps. True enables incremental solving; False makes separate, independent calls.

  • horizon (int | None): Maximum number of steps in the final plan. If None, the search continues indefinitely.

  • solver_name (str): The name of the SMT or OMT solver used by PySMT (e.g., "z3" or "optimathsat").

Specific to Optimal Engines

  • ground_abstract_step (bool): Whether the abstract step is grounded (i.e., fully instantiated on objects). This typically increases the number of actions.

  • grounder_name (str | None): The name of the grounder used from the unified_planning library. If None, the default grounder is selected.

  • sat_before_opt (bool): Try satisficing steps before attempting optimization. True makes the planner search for feasible (SAT) plans before optimizing.

  • secondary_objective (str | None): Guides the optimization beyond the main objective. Accepted values: "weighted", "lexicographic", or None.

References

TemPEST is based on the following research papers:

  • Panjkovic, S., & Micheli, A. (2024). Abstract action scheduling for optimal temporal planning via OMT. AAAI 2024

  • Panjkovic, S., & Micheli, A. (2023). Expressive optimal temporal planning via optimization modulo theory. AAAI 2023

Contributing

Contributions are welcome! See CONTRIBUTING.md for the developer setup (uv + just + ruff + mypy), the contribution workflow, and the Contributor License Agreement (CLA). All participation is subject to our Code of Conduct.

License

TemPEST 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.

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

up_tempest-0.1.0.tar.gz (36.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

up_tempest-0.1.0-py3-none-any.whl (41.2 kB view details)

Uploaded Python 3

File details

Details for the file up_tempest-0.1.0.tar.gz.

File metadata

  • Download URL: up_tempest-0.1.0.tar.gz
  • Upload date:
  • Size: 36.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for up_tempest-0.1.0.tar.gz
Algorithm Hash digest
SHA256 47a47ea0b1b874d45fec594e59a57b41a725736b49c5b918aada036d2c92eef6
MD5 e7a09712f0bbcd8a4b37a927dc9190e1
BLAKE2b-256 f55d2eb180a37c02e410ce52d840c80d9bfaa85ea67dc50d0ac6d63e31819f94

See more details on using hashes here.

Provenance

The following attestation bundles were made for up_tempest-0.1.0.tar.gz:

Publisher: build-and-release.yml on fbk-pso/tempest

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file up_tempest-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: up_tempest-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 41.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for up_tempest-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 74591928368eaabc55e446ddfa0e0a2b20710576973ab29ad0ff53c02883c88e
MD5 bf74401642bad620621730db7688796e
BLAKE2b-256 b2ec5bc6afeb5b9497450bffea34668e3eaa0399241f6a34e0c5f83be21d9e08

See more details on using hashes here.

Provenance

The following attestation bundles were made for up_tempest-0.1.0-py3-none-any.whl:

Publisher: build-and-release.yml on fbk-pso/tempest

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page