ProcessScheduler is a Python package for optimizing scheduling problems using advanced constraint satisfaction techniques. It provides an intuitive API for modeling complex scheduling scenarios while handling the underlying mathematical computations transparently.
- 2024/01/31: Release 2.0.0
- 2024/01/30: Release 2.0.0a
- 2023/12/13: Huge on-going refactoring #133
- 2023/12/12: Release 0.9.4
-
Task Management
- Define tasks with duration, priority, and work requirements
- Support for fixed, variable, and zero-duration tasks
- Optional tasks and task dependencies
-
Resource Handling
- Individual workers with productivity and cost parameters
- Resource pools with shared skills
- Resource availability and unavailability periods
-
Constraint Modeling
- Rich set of task and resource constraints
- First-order logic operations (NOT, OR, XOR, AND, IMPLIES, IF/THEN/ELSE)
- Buffer management for material consumption/production
-
Optimization & Analysis
- Multi-objective optimization (makespan, flowtime, cost)
- Custom performance indicators
- Gantt chart visualization
- Export to JSON, SMT-LIB 2.0, Excel formats
pip install ProcessScheduler==2.0.0
pip install ProcessScheduler[full]==2.0.0
# Or install optional dependencies separately:
pip install matplotlib plotly kaleido ipywidgets isodate ipympl psutil XlsxWriter
- Documentation
- Interactive Examples (via Binder)
import processscheduler as ps
# a simple problem, without horizon (solver will find it)
pb = ps.SchedulingProblem('HelloWorldProcessScheduler')
# add two tasks
task_hello = ps.FixedDurationTask('Process', duration=2)
task_world = ps.FixedDurationTask('Scheduler', duration=2)
# precedence constraint: task_world must be scheduled
# after task_hello
ps.TaskPrecedence(task_hello, task_world)
# solve
solver = ps.SchedulingSolver(pb)
solution = solver.solve()
# display solution, ascii or matplotlib gantt diagram
solution.render_gantt_matplotlib()
ProcessScheduler uses the following tools to ensure code quality:
- unittests,
- code coverage (coverage.py, codecov.io),
- continuous-integration at MS azure,
- static code analysis (codacy),
- spelling mistakes tracking (codespell),
- code formatting using the black python formatter
ProcessScheduler is distributed under the terms of the GNU General Public License v3 or (at your option) any later version. It is currently developed and maintained by Thomas Paviot ([email protected]).