A python package to formulate and solve resource-constrained scheduling problems
Project description
ProcessScheduler
A python library to compute resource-constrained task schedules.
About
The computation is based on a set of constraints expressed under the form of first-order logic assertions. Problem solving is performed by the Z3Prover.
This project was inspired by the work form Tim Nonner at https://github.com/timnon/pyschedule.
Helloworld
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
c1 = ps.TaskPrecedence(task_hello, task_world, offset=0)
pb.add_constraint(c1) # explicitly add this constraint to the problem
# solve
solver = ps.SchedulingSolver(pb)
solution = solver.solve()
# displays solution, ascii or matplotlib gantt diagram
solution.render_gantt_matplotlib()
Features
- tasks: zero duration task, fixed duration task, variable duration task, work amount, optional task,
- resources: worker, welectWorkers, cost_per_period and productivity attributes,
- task constraints: precedence, start synced, end synced, start at, end at, start after, end before,
- optional task constraints: task schedule condition, tasks schedule dependencies,
- resource constraints: AllSameSelected, AllDifferentSelected,
- first-order-logic operations (not, or, xor, and, implies, if/then/else) between task or resource constraints,
- customized indicators,
- builtin objectives (makespan, flowtime, earliest, latest, resource cost) and customized.
Installation
Using pip
pip install ProcessScheduler
Development version
Create a local copy of this repository:
git clone https://github.com/tpaviot/ProcessScheduler
Then install the development version:
cd ProcessScheduler
pip install -e .
Documentation
Documentation can be found at https://processscheduler.readthedocs.io/
Jypter notebooks
There are some Jupypter notebooks. They can be executed online at myBinder.org
Code quality
ProcessScheduler uses the following tools/methods to ensure code quality:
- unittests suite,
- code coverage (coverage.py, codecov.io),
- continuous-integration at MS azure,
- static code analysis (codacy).
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 (tpaviot@gmail.com).
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Hashes for ProcessScheduler-0.2.0.linux-x86_64.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5fd4fec37a772bc8ddc9b496e1181c9e72dbab50e1cc6899a0a9897d467b78ad |
|
MD5 | 6d648319e4b6ad4ce662a058efc1a6e2 |
|
BLAKE2b-256 | f48afb53d51e2ab7bbcb34c687d626eba6d9f53f9a2c1d13910c161b3fd67b27 |