IBM ILOG Scheduler User's Manual > Advanced Concepts > Advanced Features and Concepts > Recommendations for Capacity Enforcement

The capacity enforcement levels provide an easy way for you to explore the trade-off between the effort spent in each search state and the overall CPU time to solve the problem. In easy problems it is often better to spend little time at each search state and depend on the non-deterministic search to find a solution. In contrast, on harder problems, more effort at each search state in enforcing the capacity constraints often leads to significant overall savings in terms of CPU time in solving the problem.

In using any of the Concert Technology resource classes (for example, IloUnaryResource, IloDiscreteResource, etc.) the following guidelines will help to focus your exploration of the trade-off:

There is a special case with unary resources (instances of the class IloUnaryResource) when the minimum capacity on the resource is always zero and the maximum capacity changes at only a few time points across the horizon. In such a case, you might try to introduce "fake activities" during time intervals where the maximum capacity must be zero, rather than using the setCapacityMax function. In some cases, such a representation will provide better performance.

If you use the extracted Scheduler resource classes (for example, IlcUnaryResource, IlcDiscreteResource, etc.), then use the following tables for general recommendations about how to enforce capacity constraints. Unlike with Concert Technology, these recommendations depend on the class of resource. We give recommendations only for discrete resources, unary resources, discrete energy resources, reservoirs, and continuous reservoirs.

Table 11.1 provides recommendations for cases where minimal capacity constraints apply.

Table 11.1 Propagating Resources--Minimal Capacity Constraints Defined
Resource class  
Recommendations 
1. Use a timetable. 
2. Use setCapacityMin and setCapacityMax to define capacity constraints. 
3. Close the resource. 
4. Try to add a disjunctive constraint (redundant in general). 
5. Try to use setEdgeFinder (maybe introduce "fake" activities instead of using setCapacityMax). 
1. Use a timetable. 
2. Use setCapacityMin and setCapacityMax to define capacity constraints. 
3. Close the resource. 
4. Try to add the disjunctive constraint (redundant in general but necessary for taking transition times into account). 
5. Try to use setEdgeFinder (maybe use "fake" activities). 
1. Use a timetable. 
2. Use setEnergyMin and setEnergyMax to define energy constraints. 
3. Close the resource. 
1. Use a timetable. 
2. Use setLevelMin and setLevelMax to define level constraints. 
3. Close the resource. 
4. Try to use the balance constraint if there are precedence constraints. 
1. Use a timetable. 
2. Use setLevelMin and setLevelMax to define level constraints. 
3. Close the resource. 

Table 11.2 provides recommendations in cases where no minimal capacity constraints apply. For instances of the class IlcUnaryResource, the recommendations depend on whether the maximal resource capacity varies over time.

Table 11.2 Propagating Resources--No Minimal Capacity Constraints Defined 
Resource class  
Max. capacity
variations  
Recommendations  
Yes/No 
1. Use a timetable. 
2. Use setCapacityMax to define capacity constraints.  
3. Do not close the resource. 
4. Try to add the disjunctive constraint (redundant in general). 
5. Try to use setEdgeFinder (maybe introduce "fake" activities instead of using setCapacityMax). 
Yes (many) 
1. Use a timetable. 
2. Use setCapacityMax to define capacity constraints. 
3. Do not close the resource. 
4. Try to add the disjunctive constraint (redundant in general but necessary for taking transition times into account). 
Yes (few) 
1. Use a disjunctive constraint. 
2. Introduce "fake" activities. 
3. Close the resource. 
Yes/No 
1. Use a timetable. 
2. Use setEnergyMax to define energy constraints. 
3. Do not close the resource. 
Yes/No 
1. Use a timetable. 
2. Use setLevelMax to define capacity constraints. 
3. Close the resource. 
4. Try to use the balance constraint if there are precedence constraints. 
Yes/No 
1. Use a timetable. 
2. Use setLevelMax to define energy constraints. 
3. Do not close the resource.