| Did you know ... | Search Documentation: | 
|  | Predicate cumulative/2 | 
:- use_module(library(clpfd)). cumulative(+Tasks, 
+Options)
cumulative(+Tasks, 
+Options)task(S_i, D_i, E_i, C_i, T_i). S_i denotes 
the start time, D_i the positive duration, E_i the end time, C_i the 
non-negative resource consumption, and T_i the task identifier. Each of 
these arguments must be a finite domain variable with bounded domain, or 
an integer. The constraint holds iff at each time slot during the start 
and end of each task, the total resource consumption of all tasks 
running at that time does not exceed the global resource limit. Options 
is a list of options. Currently, the only supported option is:
For example, given the following predicate that relates three tasks of durations 2 and 3 to a list containing their starting times:
tasks_starts(Tasks, [S1,S2,S3]) :-
        Tasks = [task(S1,3,_,1,_),
                 task(S2,2,_,1,_),
                 task(S3,2,_,1,_)].
We can use cumulative/2 as follows, and obtain a schedule:
?- tasks_starts(Tasks, Starts), Starts ins 0..10, cumulative(Tasks, [limit(2)]), label(Starts). Tasks = [task(0, 3, 3, 1, _G36), task(0, 2, 2, 1, _G45), ...], Starts = [0, 0, 2] .