Metadata-Version: 2.4
Name: scikit-decide
Version: 1.1.1
Summary: The AI framework for Reinforcement Learning, Automated Planning and Scheduling
Keywords: reinforcement learning,planning,scheduling
Author-Email: Airbus AI Research <scikit-decide@airbus.com>
License-Expression: MIT
License-File: LICENSE
Classifier: Intended Audience :: Science/Research
Classifier: Intended Audience :: Developers
Classifier: Development Status :: 4 - Beta
Classifier: Topic :: Software Development
Classifier: Topic :: Scientific/Engineering
Classifier: Natural Language :: English
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: POSIX
Classifier: Operating System :: Unix
Classifier: Operating System :: MacOS
Classifier: Programming Language :: C++
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Software Development
Classifier: Topic :: Scientific/Engineering
Project-URL: documentation, https://airbus.github.io/scikit-decide/
Project-URL: repository, https://github.com/airbus/scikit-decide
Requires-Python: >=3.10
Requires-Dist: pynng>=0.6.2
Requires-Dist: pathos>=0.2.7
Requires-Dist: discrete-optimization>=0.9.0
Requires-Dist: wrapt>=2.2.1
Provides-Extra: shared
Requires-Dist: gymnasium<1,>=0.28.1; extra == "shared"
Requires-Dist: numpy>=2.0; (sys_platform != "darwin" or platform_machine != "x86_64") and extra == "shared"
Requires-Dist: numpy<2,>=1.20.1; sys_platform == "darwin" and platform_machine == "x86_64" and extra == "shared"
Requires-Dist: scipy>=1.9.2; extra == "shared"
Requires-Dist: unified-planning<1.3,>=1.1; extra == "shared"
Provides-Extra: domains
Requires-Dist: scikit-decide[shared]; extra == "domains"
Requires-Dist: matplotlib>=3.3.4; extra == "domains"
Requires-Dist: openap>=1.5; extra == "domains"
Requires-Dist: pygeodesy>=23.6.12; extra == "domains"
Requires-Dist: cartopy>=0.22.0; extra == "domains"
Requires-Dist: pygrib>=2.1.6; sys_platform == "linux" and extra == "domains"
Requires-Dist: pygrib>=2.1.6; sys_platform == "darwin" and platform_machine != "x86_64" and extra == "domains"
Requires-Dist: pygrib==2.1.5; sys_platform == "darwin" and platform_machine == "x86_64" and extra == "domains"
Requires-Dist: setuptools<82.0.0; sys_platform == "darwin" and platform_machine == "x86_64" and extra == "domains"
Requires-Dist: pyRDDLGym!=2.7,>=2.3; python_version < "3.13" and extra == "domains"
Requires-Dist: pyRDDLGym-rl>=0.2; python_version < "3.13" and extra == "domains"
Requires-Dist: numpy<2.4; python_version < "3.13" and extra == "domains"
Requires-Dist: rddlrepository>=2.1; extra == "domains"
Requires-Dist: plado>=0.1.3; extra == "domains"
Requires-Dist: pytz>=2025.2; extra == "domains"
Provides-Extra: solvers
Requires-Dist: scikit-decide[shared]; extra == "solvers"
Requires-Dist: joblib>=1.0.1; extra == "solvers"
Requires-Dist: ray[rllib]<2.38,>=2.9.0; extra == "solvers"
Requires-Dist: stable-baselines3>=2; extra == "solvers"
Requires-Dist: sb3_contrib>=2.3; extra == "solvers"
Requires-Dist: up-tamer>=1.1.2; python_version < "3.12" and platform_machine == "x86_64" and extra == "solvers"
Requires-Dist: up-fast-downward>=0.4.1; extra == "solvers"
Requires-Dist: up-enhsp<0.0.28,>=0.0.25; extra == "solvers"
Requires-Dist: up-pyperplan>=1.1.0; extra == "solvers"
Requires-Dist: pyRDDLGym-jax>=2.5; python_version < "3.13" and extra == "solvers"
Requires-Dist: jax>=0.4; (sys_platform == "linux" or sys_platform == "darwin") and extra == "solvers"
Requires-Dist: jax<0.6,>=0.4; sys_platform == "win32" and extra == "solvers"
Requires-Dist: pyRDDLGym-gurobi>=0.2; python_version < "3.13" and extra == "solvers"
Requires-Dist: torch-geometric>=2.5; extra == "solvers"
Requires-Dist: torch>=2.3; (sys_platform != "darwin" or platform_machine != "x86_64") and extra == "solvers"
Requires-Dist: torch>=2.2; sys_platform == "darwin" and platform_machine == "x86_64" and extra == "solvers"
Requires-Dist: torch!=2.10,!=2.11.0,!=2.12.0,!=2.12.1,!=2.9.0,!=2.9.1; sys_platform == "win32" and extra == "solvers"
Requires-Dist: flax>=0.10.6; (sys_platform == "linux" or sys_platform == "win32") and python_version >= "3.12" and extra == "solvers"
Requires-Dist: openevolve>=0.2.11; extra == "solvers"
Provides-Extra: pddl
Requires-Dist: z3-solver; extra == "pddl"
Provides-Extra: all
Requires-Dist: scikit-decide[domains,pddl,solvers]; extra == "all"
Description-Content-Type: text/markdown


                    _  __    _  __              __             _      __
       _____ _____ (_)/ /__ (_)/ /_        ____/ /___   _____ (_)____/ /___
      / ___// ___// // //_// // __/______ / __  // _ \ / ___// // __  // _ \
     (__  )/ /__ / // ,<  / // /_ /_____// /_/ //  __// /__ / // /_/ //  __/
    /____/ \___//_//_/|_|/_/ \__/        \__,_/ \___/ \___//_/ \__,_/ \___/

<br>
<p align="center">
  <a href="https://github.com/airbus/scikit-decide/actions/workflows/ci.yml?query=branch%3Amaster">
    <img src="https://img.shields.io/github/actions/workflow/status/airbus/scikit-decide/ci.yml?branch=master&logo=github&label=CI%20status" alt="actions status">
  </a>
  <a href="https://github.com/airbus/scikit-decide/tags">
    <img src="https://img.shields.io/github/tag/airbus/scikit-decide.svg?label=current%20version" alt="version">
  </a>
  <a href="https://github.com/airbus/scikit-decide/stargazers">
    <img src="https://img.shields.io/github/stars/airbus/scikit-decide.svg" alt="stars">
  </a>
  <a href="https://github.com/airbus/scikit-decide/network">
    <img src="https://img.shields.io/github/forks/airbus/scikit-decide.svg" alt="forks">
  </a>
</p>
<br>

# Scikit-decide for Python

Scikit-decide is an AI framework for Reinforcement Learning, Automated Planning and Scheduling.

This framework was initiated at [Airbus](https://www.airbus.com) AI Research and notably received contributions through the [ANITI](https://aniti.univ-toulouse.fr/en/) and [TUPLES](https://tuples.ai/) projects, and also from [ANU](https://www.anu.edu.au/).

## Main features

<!--features-list-start-->

- **Problem solving:** describe your decision-making problem once and auto-match compatible solvers.\
  _For instance planning/scheduling problems can be solved by RL solvers using GNNs._
- **Growing catalog:** enjoy a growing list of domains & solvers catalog, supported by the community.
- **Open & Extensible:** scikit-decide is open source and is able to wrap existing state-of-the-art domains/solvers.
- **Domains available:**
  - [Gym(nasium)](https://gymnasium.farama.org/) environments for reinforcement learning (RL)
  - [PDDL](https://planning.wiki/) (Planning Domain Definition Language) via [unified-planning](https://github.com/aiplan4eu/unified-planning) and [plado](https://github.com/massle/plado) libraries
    - encoding in gym(nasium) spaces compatible with RL
    - graph representations for RL (inspired by [Lifted Learning Graph](https://doi.org/10.1609/aaai.v38i18.29986)) :new:
  - [RDDL](https://users.cecs.anu.edu.au/~ssanner/IPPC_2011/RDDL.pdf) (Relational Dynamic Influence Diagram Language) using [pyrddl-gym](https://github.com/pyrddlgym-project) library.
  - Flight planning, based on [openap](https://openap.dev/) or in-house Poll-Schumann for performance model
  - Scheduling, based on rcpsp problem from [discrete-optimization](https://airbus.github.io/discrete-optimization) library
  - Toy domains like: maze, mastermind, rock-paper-scissors
- **Solvers available:**
  - RL solvers from ray.rllib and stable-baselines3
    - existing algos with action masking
    - adaptation of RL algos for graph observation, based on GNNs from [pytorch-geometric](https://pytorch-geometric.readthedocs.io/) :new:
    - autoregressive models with action masking component by component for parametric actions :new:
  - Planning solvers from [unified-planning](https://github.com/aiplan4eu/unified-planning) library
  - RDDL solvers jax and gurobi-based based on pyRDDLGym-jax and pyRDDLGym-gurobi from [pyrddl-gym project](https://github.com/pyrddlgym-project)
  - Search solvers coded in scikit-decide library:
    - A*, AO*, Improved-LAO*
    - Value Iteration (VI), Policy Iteration (PI)
    - Labeled RTDP, Learning Real-Time A*
    - LDFS (Label-correcting Depth-First Search), Iterative Deepening A*
    - SSiPP (Short-Sighted Planning), FRET (Find, Revise, Eliminate Traps)
    - iDual (LP-based SSP solver), Goal Probability and Cost Iteration (GPCI)
    - Best First Width Search, Iterated Width (IW), Rollout IW (RIW)
    - Monte Carlo Tree Search (MCTS), POMCP
    - DESPOT, SARSOP, Witness (POMDP solvers)
    - RTDP-Bel (belief-space RTDP), HSVI / GoalHSVI
    - SSPReplan, SSPDetHindsight, SSPPlanMerger (determinization approaches)
    - Multi-Agent RTDP, Multi-Agent Heuristic meta-solver (MAHD)
  - (Probabilistic) PDDL (PPDDL) solvers:
    - FF planner
    - FFReplan / PPDDLReplan (replanning with pluggable inner solvers)
    - FFDetHindsight / PPDDLDetHindsight (determinization in hindsight)
    - RFF / PPDDLPlanMerger (plan aggregation into a policy)
  - PDDL heuristics (with their probabilistic extensions):
    - Delete-Relaxation heuristics
    - FF Heuristic
  - PDDL+ parser and simulators with Probabilistic PDDL extensions
    - Lifted applicable action filtering using Clingo
    - Z3-based event synchronization in python using [z3-solver](https://pypi.org/project/z3-solver/)
  - Evolution strategy: Cartesian Genetic Programming (CGP)
  - Scheduling solvers from [discrete-optimization](https://airbus.github.io/discrete-optimization),
    - itself wrapping [ortools](https://developers.google.com/optimization), [gurobi](https://www.gurobi.com/),
    [toulbar](https://toulbar2.github.io/toulbar2/#), [minizinc](https://www.minizinc.org/),
    [deap](https://deap.readthedocs.io/) (genetic algorithm), [didppy](https://didppy.readthedocs.io/) (dynamic programming),
    - and coding local search (hill climber, simulated annealing), Large Neighborhood Search (LNS), and
    genetic programming based hyper-heuristic (GPHH)
- **Tuning solvers hyperparameters**
  - hyperparameters definition
  - automated study with optuna

<!--features-list-end-->

## Installation

Quick version:
```shell
pip install scikit-decide[all]
```
For more details, see the [online documentation](https://airbus.github.io/scikit-decide/install).

## Documentation

The latest documentation is available [online](https://airbus.github.io/scikit-decide).

## Examples

Some educational notebooks are available in `notebooks/` folder.
Links to launch them online with [binder](https://mybinder.org/) are provided in the
[Notebooks section](https://airbus.github.io/scikit-decide/notebooks) of the online documentation.

More examples can be found as Python scripts in the `examples/` folder, showing how to import or define a domain,
and how to run or solve it. Most of the examples rely on scikit-decide Hub, an extensible catalog of domains/solvers.

## Contributing

See more about how to contribute in the [online documentation](https://airbus.github.io/scikit-decide/contribute).
