Overview | Group | Tree | Graph | Index | Concepts |
Description |
Model Limitations |
Scheduler Engine Limitations |
Due to the limited size of data representation, IBM® ILOG Scheduler® requires several conditions on its input to avoid overflow or erroneous computations. Some of these conditions are model limitations and are checked when entering the search; they are listed in the following section, Model Limitations . Some other conditions can not be checked systematically during the search, for computational efficiency reasons. They are listed in the section Scheduler Engine Limitations.
Not all scheduling model instances (class
IloModel
) can be handled by IBM ILOG Scheduler. In particular, only integer dates are considered by the engine.
Attempts to extract a model that contains time and date data that are not
IloIntVar
instances will raise the following exception:
integer variable expected during extraction
.
This limitation applies to:
Moreover, if necessary, every computation instance of such variables will be clamped to
the default range specified in the corresponding IloSchedulerEnv
. See the description of the method IloSchedulerEnv::setIntMaxAtExtraction
for more information.
Other data, expected to be in integer form, is rounded if it has been modeled using an
instance of
IloNumVar
or with an
IloNum
data type. If applicable, the bounds of
IloNumVar
variable instances will be rounded toward minus infinity
(floor
rounding) or toward plus infinity
(ceiling
rounding, as in
ceil()
) depending on the semantics of the data.
Some numeric data is required to be in integer form
(must-be-integer), as no rounding is meaningful. Otherwise, an
IloIntegerExpectedException
exception will be raised.
IBM ILOG Scheduler objects concerned by rounding policies and integer requirements are listed in the following table.
Scheduler Rounding Policies and Integer Requirements
Object | Floor Rounding | Ceiling Rounding | Must-be-integer |
---|---|---|---|
IloSchedulerEnv | horizon | origin | |
IloActivityBreakParam | duration max normal breaks, start break overlap max, end break overlap max | duration min normal breaks, minimal execution duration, start break overlap min, end beak overlap min | disjunctive break type, start break overlap type, end break overlap type |
IloActivityBasicParam | duration max | external variable value | |
IloPrecedenceConstraint | delay value for types
IloStartsAfterStart IloStartsAfterEnd IloEndsAfterStart IloEndsAfterEnd | delay value for types
IloStartsAtStart IloStartsAtEnd IloEndsAtStart IloEndsAtEnd | |
IloTimeBoundConstraint | time bound value for types
IloStartsBefore, IloEndsBefore | time bound value for types
IloStartsAfter ,
IloEndsAfter | time bound value for types
IloStartsAt ,
IloEndsAt |
IloResource capacity enforcement intervals
| capacity max | capacity min | date min/max |
IloReservoir | capacity | initial level | |
IloContinuousReservoir | capacity | ||
IloDiscreteResource | capacity | ||
IloDiscreteEnergy | capacity | ||
Resource Constraint, Alternative Resource Constraint | capacity | ||
IloGranularFunction | granularity, segments | ||
IloTransitionParam | setup and teardown values, transition values | ||
IloTransitionTime | setup and teardown values, transition values | ||
IloTransitionCost | setup or teardown cost max | setup and teardown values, transition values | |
IloIntervalList | interval start, end, type |
Several built-in constants are available in IBM ILOG Scheduler Engine in
order to validate the range of the input data:
IlcIntMin
,
IlcIntMax
,
IlcFloatMin
and
IlcFloatMax
.
The first two apply to integer data (dates, capacities, and so forth), whereas the latter
correspond to floating-point data (num-to-num and granular functions, reservoir capacity,
texture measurement, and so forth). Their actual value depends on the architecture, either 32-bit
or 64-bit. Note that Concert Technology also has the corresponding
IloIntMax
, IloIntMin
limiting constants defined, which are smaller in range than
IlcIntMin
, IlcIntMax
on 64-bit architecture. On 32-bit architecture, these constraints are equal.
During the search, computations are subject to overflows resulting from invalid input. No systematic check is performed during critical parts of computations, as it would result in a dramatic performance slow down. It is thus necessary to validate the potentially out-of-range input before entering the search. Potential overflows are described below, grouped by functionality class.
General Schedule
In IBM ILOG Scheduler, start and end dates are represented by integer. It is required that the maximum start time plus the maximum duration, or processing time, does not exceed the
IlcIntMax
value. Similarly, the minimum end date minus the maximum duration should not be less than
IlcIntMin
.
Note that the default upper bound of the start, end and duration variables of a model activity (IloActivity
) are equal to
IloIntMax
/2.
If transition times are involved (either by tables or through transition time objects) between a sequence
of two resource constraints, there are restrictions on the permissible transition time values. The
minimum end time of the preceding activity plus the transition time should not exceed
IlcIntMax
. Similarly,
the maximum start time of the second activity minus the transition time should be greater than
IlcIntMin
.
The same kind of limitations apply with the optional delay available with the precedence constraint.
Depending on the type of the precedence constraint
(IloEndsAfterEnd
,
IloStartsAtStart
, and so forth),
two variables (the preceding and following) are constrained with a delay. To avoid overflows and
underflows, the sum of preceding variable and the delay should always remain within the
range [IlcIntMin
, IlcIntMax
]. Similarly,
the difference between the following variable and the delay should be within the same range.
Edge Finder Constraint
The edge finder constraint may be applied on discrete and unary resources, depending on the capacity enforcement level. See the table in Interpretation of Capacity Enforcement Levels for details on when the edge finder is applied.
The edge finder constraint performs propagation based on the grouping of resource constraints as a whole.
As a consequence, the sum of all the minimum processing times of activities pertaining to a unary
resource constraints should not exceed
IlcIntMax
. Similarly, for
discrete resource constraints the sum of all minimum processing times multiplied by the minimum
capacity should not be greater than
IlcIntMax
.
Balance Constraint
This constraint is available on a discrete resource with a capacity enforcement of
IloExtended
, or on a reservoir with capacity enforcement level higher than
IloHigh
.
On a discrete resource, the balance constraint may overflow if the sum of the maximal capacity required
by all resource constraints exceeds
IlcIntMax
.
On a reservoir, the balance constraint may overflow if the sum of the maximal capacity of all the
producing resource constraints exceeds
IlcIntMax
, or if the sum of
the maximal capacity of all the consuming resource constraints exceeds
IlcIntMax
. The balance constraint also overflows if the maximal capacity of the reservoir exceeds
IlcIntMax/2
.
Moreover, during extra propagation of the precedence graph (available on a discrete resource with
precedence enforcement level higher than
IloHigh
),
overflow can occur if the sum of the minimal energy (minimal duration * minimal capacity)
over all resource constraints on the resource exceeds
IlcIntMax
.
Capacity Resource and Associated Timetable Constraint
In a capacity resource, the maximum capacity should be less than
IlcIntMax
/2, either by construction or
when using a member function to set the capacity level (IlcDiscreteEnergy::setEnergyMax
, IlcReservoir::setLevelMax
, IlcDiscreteResource::setCapacityMax
).
The same limitation applies on the timetable constructed from a IlcCapResource
.
This includes, for instance, the fourth argument of IlcCapResource::makeTimetableConstraint
.
Energy Resource and Associated Timetable Constraint
In a discrete energy resource, the maximum energy should be less than
IlcIntMax
/2, either by construction or when using IlcDiscreteEnergy::setEnergyMax
. In
Scheduler Engine, the same limitation applies on the timetable constructed from an IlcDiscreteEnergy
.
This includes, for instance, the fourth argument of IlcCapResource::makeTimetableConstraint
.
Functional and Integral Constraint
During propagation of an integral constraint, the values of the integral of a granular function
(class IloGranularFunction
) are internally represented with
IlcNum
variables. It is required that the integral between the minimum start time and the maximum end time
do not overflow
IlcFloatMax
.
Practical Advice
Whenever unexpected results occur during the search, it might be profitable to use the trace mechanism
(instance of IlcSchedulerTrace
)
and carefully examine the range of input data and internal state of variables to detect
whether an overflow occurred.
See Also
IloSchedulerEnv, IloEnforcementLevel,
IloGranularFunction,
IloResource. Also
IloIntervalList
in the extensions section of the
IBM ILOG Concert Technology Reference Manual.