Stay organized with collections Save and categorize content based on your preferences.

C++ Reference: class OverloadChecker

This documentation is automatically generated.

Overload Checker

This propagator implements the overload checker filtering rule presented in Vilim Petr, "Max Energy Filtering Algorithm for Discrete Cumulative Constraint", CPAIOR 2009, http://vilim.eu/petr/cpaior2009.pdf.

This propagator only increases the minimum of the capacity variable or fails if the minimum capacity cannot be increased. It has a time complexity of O(n log n).

The propagator relies on a Theta-tree to maintain the energy and envelope of several set of tasks.

The energy of a task can be seen as its surface and is the product of its minimum demand and minimum duration. The energy of a set of tasks is the sum of the energy of its tasks.

The envelope of a task is the sum of the task energy and the total amount of energy available before the minimum starting time of the task, i.e., the product of its minimum start time by the maximum capacity of the resource.

An overload, meaning that there is no solution, occurs when a set of tasks requires more energy than what is available between its starting and ending times.

Be aware that overload checker is not enough to ensure that the cumulative constraint holds. This propagator should thus always be used with a timetabling propagator at least.
Method
OverloadChecker

Arguments: const std::vector<IntervalVariable>& interval_vars, const std::vector<IntegerVariable>& demand_vars, IntegerVariable capacity, Trail* trail, IntegerTrail* integer_trail, IntervalsRepository* intervals_repository

Propagate

Return type: bool

RegisterWith

Return type: void

Arguments: GenericLiteralWatcher* watcher