Interface ListVariableListener<Solution_,Entity_,Element_>
- Type Parameters:
Solution_- the solution type, the class with thePlanningSolutionannotationEntity_-PlanningEntityon which the source variable is declaredElement_- the type of elements of the source list variable
- All Superinterfaces:
AbstractVariableListener<Solution_,,Entity_> AutoCloseable,Closeable
- All Known Subinterfaces:
ListVariableStateSupply<Solution_>
- All Known Implementing Classes:
ListVariableTracker
PlanningListVariable.
Changes shadow variables when a genuine source list variable changes.
Important: it must only change the shadow variable(s) for which it's configured! It should never change a genuine variable or a problem fact. It can change its shadow variable(s) on multiple entity instances (for example: an arrivalTime change affects all trailing entities too).
It is recommended to keep implementations stateless.
If state must be implemented, implementations may need to override the default methods
(AbstractVariableListener.resetWorkingSolution(ScoreDirector), AbstractVariableListener.close()).
-
Method Summary
Modifier and TypeMethodDescriptionvoidafterListVariableChanged(@NonNull ScoreDirector<Solution_> scoreDirector, @NonNull Entity_ entity, int fromIndex, int toIndex) Tells the listener that some elements within the range starting atfromIndex(inclusive) and ending attoIndex(exclusive) changed.voidafterListVariableElementUnassigned(@NonNull ScoreDirector<Solution_> scoreDirector, @NonNull Element_ element) The listener must unset all shadow variables it is responsible for when an element is unassigned from the source list variable.voidbeforeListVariableChanged(@NonNull ScoreDirector<Solution_> scoreDirector, @NonNull Entity_ entity, int fromIndex, int toIndex) Tells the listener that some elements within the range starting atfromIndex(inclusive) and ending attoIndex(exclusive) will change.Methods inherited from interface ai.timefold.solver.core.api.domain.variable.AbstractVariableListener
afterEntityAdded, afterEntityRemoved, beforeEntityAdded, beforeEntityRemoved, close, resetWorkingSolution
-
Method Details
-
afterListVariableElementUnassigned
void afterListVariableElementUnassigned(@NonNull ScoreDirector<Solution_> scoreDirector, @NonNull Element_ element) The listener must unset all shadow variables it is responsible for when an element is unassigned from the source list variable. For example, aTask'sstartTimeshadow variable must be reset tonullafter a task is unassigned fromEmployee.taskswhen the move that assigned it there is undone during Construction Heuristic phase.- Parameters:
scoreDirector- score directorelement- the unassigned element
-
beforeListVariableChanged
void beforeListVariableChanged(@NonNull ScoreDirector<Solution_> scoreDirector, @NonNull Entity_ entity, int fromIndex, int toIndex) Tells the listener that some elements within the range starting atfromIndex(inclusive) and ending attoIndex(exclusive) will change. Be aware that theafterListVariableChanged(ai.timefold.solver.core.api.score.director.ScoreDirector<Solution_>, Entity_, int, int)call after the change is done often has a differentfromIndexandtoIndexbecause the number of elements in the list variable can change.The list variable change includes:
- Changing position (index) of one or more elements.
- Removing one or more elements from the list variable.
- Adding one or more elements to the list variable.
- Any mix of the above.
The range has the following properties:
fromIndexis greater than or equal to 0;toIndexis less than or equal to the list variable size.toIndexis greater than or equal tofromIndex.- The range contains all elements that are going to be changed.
- The range may contain elements that are not going to be changed.
- The range may be empty (
fromIndexequalstoIndex) if none of the existing list variable elements are going to be changed.
- Parameters:
scoreDirector- score directorentity- entity with the changed list variablefromIndex- low endpoint (inclusive) of the changed rangetoIndex- high endpoint (exclusive) of the changed range
-
afterListVariableChanged
void afterListVariableChanged(@NonNull ScoreDirector<Solution_> scoreDirector, @NonNull Entity_ entity, int fromIndex, int toIndex) Tells the listener that some elements within the range starting atfromIndex(inclusive) and ending attoIndex(exclusive) changed.The list variable change includes:
- Changing position (index) of one or more elements.
- Removing one or more elements from the list variable.
- Adding one or more elements to the list variable.
- Any mix of the above.
The range has the following properties:
fromIndexis greater than or equal to 0;toIndexis less than or equal to the list variable size.toIndexis greater than or equal tofromIndex.- The range contains all elements that have changed.
- The range may contain elements that have not changed.
- The range may be empty (
fromIndexequalstoIndex) if none of the existing list variable elements have changed.
- Parameters:
scoreDirector- score directorentity- entity with the changed list variablefromIndex- low endpoint (inclusive) of the changed rangetoIndex- high endpoint (exclusive) of the changed range
-