A cumulative constraint over tasks with
- an earliest start time
- a latest completion time
- a duration
- a resource demand
will restrict the time bounds so that concurrent tasks never go over a fixed resource capacity (C).
One algorithm to implement it is Edge Finding Filtering Algorithm for Discrete Cumulative Resources in O(kn log n). This is (the work-in progress of) an implementation of this algorithm in Coq. The files cumulative.py and cumulative_clean.py are (buggy?) prototypes I wrote before.
While it describes a different algorithm (I think?) Max Energy Filtering Algorithm for Discrete Cumulative Resources by the same author makes understanding of the other paper easier.
(The graphic above is taken from Simple and Scalable Time-Table Filtering for the Cumulative Constraint which is -not- implemented here)