# Framework overview ## Design The scheduler is designed stateless. Meaning no information of past solutions or problems are saved. This brings the advantage, that a scheduler running as a mirco service can be accessed by several clients, stopped, restarted and have its settings changed without affecting running experiments using it. ## Algorithm plugin By design, the scheduler provides to different scheduling algorithms. There is a [solver_interface](../../src/labscheduler/solver_interface.py) defined in python and every module placed in [this folder](../../src/labscheduler/solvers) is automatically included. ### Choosing an algorithm At any point in time the schedulers algorithm can be switched, e.g. via a SiLA command. You can also request a list of available algorithms, request the basic information on any available [# TODO: release Insert exemplary ipython in-out correspondences] ### Shipped algorithms Currently, there are the following scheduling algorithms implemented: - [Simple Solver](../solvers/simple.md) (More an academic example than actually usable) - [Basic Priority Dispatching Heuristic](../solvers/basic_pd_heuristics.md) - [Advanced Priority Dispatching Heuristic](../solvers/specialized_pd_heuristics.md) (recommended for quick solutions) - [MIP Optimizer](../solvers/mip_solver.md) - [CPOptimizer](../solvers/cp_solver.md) (recommended for best solutions) A Graph Neural Network-Priority Dispatching Heuristic is currently under construction.