Package org.jacop.constraints
Class Cumulative
- java.lang.Object
-
- org.jacop.constraints.DecomposedConstraint<Constraint>
-
- org.jacop.constraints.Constraint
-
- org.jacop.constraints.Cumulative
-
- All Implemented Interfaces:
SatisfiedPresent
public class Cumulative extends Constraint implements SatisfiedPresent
Cumulative implements the cumulative/4 constraint using edge-finding algorithm and profile information on the resource use.- Version:
- 4.8
-
-
Field Summary
Fields Modifier and Type Field Description private CumulativeProfiles
cumulativeProfiles
private static boolean
debug
private static boolean
debugNarr
protected boolean
doEdgeFinding
It specifies if the edge finding algorithm should be used.private java.util.Comparator<IntDomain>
domainMaxComparator
private java.util.Comparator<IntDomain>
domainMinComparator
protected boolean
doProfile
It specifies if the profiles should be computed to propagate onto limit variable.IntVar[]
durations
It specifies/stores duration variables for each corresponding task.(package private) static java.util.concurrent.atomic.AtomicInteger
idNumber
IntVar
limit
It specifies the limit of the profile of cumulative use of resources.private Profile
maxProfile
It contains information about maximal profile contributed by tasks.private Profile
minProfile
It contains information about minimal profile contributed by regions for certain occupied by tasks.IntVar[]
resources
It specifies/stores resource variable for each corresponding task.protected boolean
setLimit
It specifies if the data from profiles should be used to propagate onto limit variable.IntVar[]
starts
It specifies/stores start variables for each corresponding task.private java.util.Comparator<Task>
taskAscEctComparator
private java.util.Comparator<Task>
taskDescLstComparator
private Task[]
Ts
-
Fields inherited from class org.jacop.constraints.Constraint
afcWeight, atomicExecution, consistencyPruningEvents, constraintScope, earlyTerminationOK, increaseWeight, numberId, scope, trace, watchedVariableGrounded
-
Fields inherited from class org.jacop.constraints.DecomposedConstraint
queueIndex
-
-
Constructor Summary
Constructors Constructor Description Cumulative(java.util.List<? extends IntVar> starts, java.util.List<? extends IntVar> durations, java.util.List<? extends IntVar> resources, IntVar limit)
It creates a cumulative constraint.Cumulative(java.util.List<? extends IntVar> starts, java.util.List<? extends IntVar> durations, java.util.List<? extends IntVar> resources, IntVar limit, boolean edgeFinding)
It creates a cumulative constraint.Cumulative(java.util.List<? extends IntVar> starts, java.util.List<? extends IntVar> durations, java.util.List<? extends IntVar> resources, IntVar limit, boolean edgeFinding, boolean profile)
It creates a cumulative constraint.Cumulative(IntVar[] starts, IntVar[] durations, IntVar[] resources, IntVar limit)
It creates a cumulative constraint.Cumulative(IntVar[] starts, IntVar[] durations, IntVar[] resources, IntVar limit, boolean edgeFinding)
It creates a cumulative constraint.Cumulative(IntVar[] starts, IntVar[] durations, IntVar[] resources, IntVar limit, boolean doEdgeFinding, boolean doProfile)
It creates a cumulative constraint.Cumulative(IntVar[] starts, IntVar[] durations, IntVar[] resources, IntVar limit, boolean doEdgeFinding, boolean doProfile, boolean setLimit)
It creates a cumulative constraint.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description (package private) boolean
after(Task l, java.util.List<Task> S)
private boolean
before(Task l, java.util.List<Task> S)
(package private) boolean
between(Task l, java.util.List<Task> S)
void
consistency(Store store)
It is a (most probably incomplete) consistency function which removes the values from variables domains.private void
edgeFindingDown(Store store)
private void
edgeFindingUp(Store store)
private int
est(java.util.List<Task> S)
private boolean
fitTasksAfter(java.util.List<Task> s, int est0)
private boolean
fitTasksBefore(java.util.List<Task> s, int lct0)
int
getDefaultConsistencyPruningEvent()
(package private) Task[]
getTasks()
private boolean
intervalOverlap(int min1, int max1, int min2, int max2)
private int
lct(java.util.List<Task> S)
private int
maxArea(java.util.List<Task> Ts)
private long
minOverlap(Task t, int est, int lct)
private void
notFirst(Store store, Task s, java.util.List<Task> S)
private void
notLast(Store store, Task s, java.util.List<Task> S)
private void
profileCheckInterval(Store store, IntVar Start, IntVar Duration, Interval i, IntVar Resources, int mustUseMin, int mustUseMax)
private void
profileCheckTasks(Store store)
private void
removeFromS_Est(java.util.List<Task> s)
private void
removeFromS_Lct(java.util.List<Task> s)
boolean
satisfied()
It checks if the constraint is satisfied.java.lang.String
toString()
It produces a string representation of a constraint state.private void
updateTasksRes(Store store)
-
Methods inherited from class org.jacop.constraints.Constraint
afc, arguments, cleanAfterFailure, decompose, getConsistencyPruningEvent, getGuideConstraint, getGuideValue, getGuideVariable, grounded, grounded, id, impose, impose, imposeDecomposition, increaseWeight, intArrayToString, long2int, numberArgs, queueVariable, removeConstraint, requiresMonotonicity, setConsistencyPruningEvent, setConstraintScope, setScope, setScope, setScope, setScope, setScope, setWatchedVariableGrounded, supplyGuideFeedback, toInt, toInt, updateAFC, watchedVariableGrounded
-
Methods inherited from class org.jacop.constraints.DecomposedConstraint
auxiliaryVariables, checkInput, checkInput, checkInputForDuplication, checkInputForDuplicationSkipSingletons, checkInputForNullness, checkInputForNullness, checkInputForNullness, derivative, getDubletonsSkipSingletons, imposeDecomposition
-
-
-
-
Field Detail
-
idNumber
static java.util.concurrent.atomic.AtomicInteger idNumber
-
debug
private static final boolean debug
- See Also:
- Constant Field Values
-
debugNarr
private static final boolean debugNarr
- See Also:
- Constant Field Values
-
maxProfile
private Profile maxProfile
It contains information about maximal profile contributed by tasks.
-
minProfile
private Profile minProfile
It contains information about minimal profile contributed by regions for certain occupied by tasks.
-
cumulativeProfiles
private CumulativeProfiles cumulativeProfiles
-
Ts
private Task[] Ts
-
doEdgeFinding
protected boolean doEdgeFinding
It specifies if the edge finding algorithm should be used.
-
doProfile
protected boolean doProfile
It specifies if the profiles should be computed to propagate onto limit variable.
-
setLimit
protected boolean setLimit
It specifies if the data from profiles should be used to propagate onto limit variable.
-
limit
public IntVar limit
It specifies the limit of the profile of cumulative use of resources.
-
starts
public IntVar[] starts
It specifies/stores start variables for each corresponding task.
-
durations
public IntVar[] durations
It specifies/stores duration variables for each corresponding task.
-
resources
public IntVar[] resources
It specifies/stores resource variable for each corresponding task.
-
domainMaxComparator
private java.util.Comparator<IntDomain> domainMaxComparator
-
domainMinComparator
private java.util.Comparator<IntDomain> domainMinComparator
-
taskAscEctComparator
private java.util.Comparator<Task> taskAscEctComparator
-
taskDescLstComparator
private java.util.Comparator<Task> taskDescLstComparator
-
-
Constructor Detail
-
Cumulative
public Cumulative(IntVar[] starts, IntVar[] durations, IntVar[] resources, IntVar limit, boolean doEdgeFinding, boolean doProfile)
It creates a cumulative constraint.- Parameters:
starts
- variables denoting starts of the tasks.durations
- variables denoting durations of the tasks.resources
- variables denoting resource usage of the tasks.limit
- the overall limit of resources which has to be used.doEdgeFinding
- true if edge finding algorithm should be used.doProfile
- specifies if the profiles should be computed in order to reduce limit variable.
-
Cumulative
public Cumulative(IntVar[] starts, IntVar[] durations, IntVar[] resources, IntVar limit, boolean doEdgeFinding, boolean doProfile, boolean setLimit)
It creates a cumulative constraint.- Parameters:
starts
- variables denoting starts of the tasks.durations
- variables denoting durations of the tasks.resources
- variables denoting resource usage of the tasks.limit
- the overall limit of resources which has to be used.doEdgeFinding
- true if edge finding algorithm should be used.doProfile
- specifies if the profiles should be computed in order to reduce limit variable.setLimit
- specifies if limit variable will be prunded.
-
Cumulative
public Cumulative(java.util.List<? extends IntVar> starts, java.util.List<? extends IntVar> durations, java.util.List<? extends IntVar> resources, IntVar limit)
It creates a cumulative constraint.- Parameters:
starts
- variables denoting starts of the tasks.durations
- variables denoting durations of the tasks.resources
- variables denoting resource usage of the tasks.limit
- the overall limit of resources which has to be used.
-
Cumulative
public Cumulative(java.util.List<? extends IntVar> starts, java.util.List<? extends IntVar> durations, java.util.List<? extends IntVar> resources, IntVar limit, boolean edgeFinding)
It creates a cumulative constraint.- Parameters:
starts
- variables denoting starts of the tasks.durations
- variables denoting durations of the tasks.resources
- variables denoting resource usage of the tasks.limit
- the overall limit of resources which has to be used.edgeFinding
- true if edge finding algorithm should be used.
-
Cumulative
public Cumulative(java.util.List<? extends IntVar> starts, java.util.List<? extends IntVar> durations, java.util.List<? extends IntVar> resources, IntVar limit, boolean edgeFinding, boolean profile)
It creates a cumulative constraint.- Parameters:
starts
- variables denoting starts of the tasks.durations
- variables denoting durations of the tasks.resources
- variables denoting resource usage of the tasks.limit
- the overall limit of resources which has to be used.edgeFinding
- true if edge finding algorithm should be used.profile
- specifies if the profiles should be computed in order to reduce limit variable.
-
Cumulative
public Cumulative(IntVar[] starts, IntVar[] durations, IntVar[] resources, IntVar limit)
It creates a cumulative constraint.- Parameters:
starts
- variables denoting starts of the tasks.durations
- variables denoting durations of the tasks.resources
- variables denoting resource usage of the tasks.limit
- the overall limit of resources which has to be used.
-
Cumulative
public Cumulative(IntVar[] starts, IntVar[] durations, IntVar[] resources, IntVar limit, boolean edgeFinding)
It creates a cumulative constraint.- Parameters:
starts
- variables denoting starts of the tasks.durations
- variables denoting durations of the tasks.resources
- variables denoting resource usage of the tasks.limit
- the overall limit of resources which has to be used.edgeFinding
- true if edge finding algorithm should be used.
-
-
Method Detail
-
consistency
public void consistency(Store store)
Description copied from class:Constraint
It is a (most probably incomplete) consistency function which removes the values from variables domains. Only values which do not have any support in a solution space are removed.- Specified by:
consistency
in classConstraint
- Parameters:
store
- constraint store within which the constraint consistency is being checked.
-
edgeFindingDown
private void edgeFindingDown(Store store)
-
edgeFindingUp
private void edgeFindingUp(Store store)
-
est
private int est(java.util.List<Task> S)
-
fitTasksAfter
private boolean fitTasksAfter(java.util.List<Task> s, int est0)
-
fitTasksBefore
private boolean fitTasksBefore(java.util.List<Task> s, int lct0)
-
getDefaultConsistencyPruningEvent
public int getDefaultConsistencyPruningEvent()
- Specified by:
getDefaultConsistencyPruningEvent
in classConstraint
-
getTasks
Task[] getTasks()
-
intervalOverlap
private boolean intervalOverlap(int min1, int max1, int min2, int max2)
-
lct
private int lct(java.util.List<Task> S)
-
maxArea
private int maxArea(java.util.List<Task> Ts)
-
minOverlap
private long minOverlap(Task t, int est, int lct)
-
profileCheckInterval
private void profileCheckInterval(Store store, IntVar Start, IntVar Duration, Interval i, IntVar Resources, int mustUseMin, int mustUseMax)
-
profileCheckTasks
private void profileCheckTasks(Store store)
-
removeFromS_Est
private void removeFromS_Est(java.util.List<Task> s)
-
removeFromS_Lct
private void removeFromS_Lct(java.util.List<Task> s)
-
satisfied
public boolean satisfied()
Description copied from interface:SatisfiedPresent
It checks if the constraint is satisfied. It can return false even if constraint is satisfied but not all variables in its scope are grounded. It needs to return true if all variables in its scope are grounded and constraint is satisfied.Implementations of this interface for constraints that are not PrimitiveConstraint may require constraint imposition and consistency check as a requirement to work correctly.
- Specified by:
satisfied
in interfaceSatisfiedPresent
- Returns:
- true if constraint is possible to verify that it is satisfied.
-
toString
public java.lang.String toString()
Description copied from class:Constraint
It produces a string representation of a constraint state.- Overrides:
toString
in classConstraint
-
updateTasksRes
private void updateTasksRes(Store store)
-
-