Skip to content

tpaviot/ProcessScheduler

Repository files navigation

ProcessScheduler

Codacy Badge codecov Azure Build Status Binder PyPI version DOI

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.

Updates

  • 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

Key Features

  • 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

Installation

Basic Installation

pip install ProcessScheduler==2.0.0

Full Installation (with optional dependencies)

pip install ProcessScheduler[full]==2.0.0
# Or install optional dependencies separately:
pip install matplotlib plotly kaleido ipywidgets isodate ipympl psutil XlsxWriter

Documentation & Examples

Quick Start

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()

png

Code quality

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

License/Author

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]).