:- module(ic_cumulative).
:- export profile / 4.
:- export cumulative / 4.
:- comment(summary, "Cumulative scheduling constraint library for IC").
:- comment(author, "Vassilis Liatsos").
:- comment(date, "$Date: 2006/09/23 01:53:45 $").
:- comment(desc, "    This library implements the cumulative scheduling constraint for the\n    IC solver.  It provides weaker propagation than the two edge finder\n    libraries: ic_edge_finder and ic_edge_finder3.\n").
:- comment(cumulative / 4, [amode : cumulative(+, +, +, ++), args : ["StartTimes" : "Collection of start times for tasks (fd variables or integers)", "Durations" : "Collection of duration for tasks (fd variables or integers)", "Resources" : "Collection of resource uages by tasks (fd variables or integers)", "ResourceLimit" : "Maximum amount of resource available (integer)"], summary : "Cumulative constraint on specified tasks.", see_also : [profile / 4, collection_to_list / 2, _7336 : cumulative / 4], desc : html("<P>\n   A cumulative scheduling constraint. StartTimes, Durations and Resources\n   are collections (a la collection_to_list/2) of equal size N of finite\n   domain variable or integers.  ResourceLimit is an integer.  The\n   declarative meaning is:\n   If there are N tasks, each starting at a certain start time, having\n   a certain duration and consuming a certain (constant) amount of\n   resource, then the sum of resource usage of all the tasks does not\n   exceed ResourceLimit at any time.\n   The (ic/fd)_edge_finder and (ic/fd)_edge_finder3 libraries implementation\n   of this predicate can provide stronger propagations.\n</P>")]).
:- comment(profile / 4, [amode : profile(+, +, +, ?), args : ["StartTimes" : "Collection of start times for tasks (fd variables or integers)", "Durations" : "Collection of duration for tasks (fd variables or integers)", "Resources" : "Collection of resource usages by tasks (fd variables or integers)", "Profile" : "List of resource usage at the start of each task"], summary : "Cumulative constraint on specified tasks.", see_also : [cumulative / 4, collection_to_list / 2], desc : html("<P>\n   StartTimes, Durations and Resources are collections (a la\n   collection_to_list/2) of equal size N of finite domain variable or\n   integers, with the same meaning as in cumulative/4.\n   Profile is unified with a list of length N of finite domain variables or\n   integers indicating the level of resource usage at the starting point of\n   each task.\n</P>")]).
