Class AbstractMove<Solution_>
java.lang.Object
ai.timefold.solver.core.impl.heuristic.move.AbstractMove<Solution_>
- Type Parameters:
Solution_- the solution type, the class with thePlanningSolutionannotation
- All Implemented Interfaces:
Move<Solution_>
- Direct Known Subclasses:
ChangeMove,KOptListMove,KOptMove,ListChangeMove,ListRuinRecreateMove,ListSwapMove,PillarChangeMove,PillarSwapMove,RuinRecreateMove,SubChainChangeMove,SubChainReversingChangeMove,SubChainReversingSwapMove,SubChainSwapMove,SubListChangeMove,SubListSwapMove,SwapMove,TailChainSwapMove,TwoOptListMove
Abstract superclass for
Move, requiring implementation of undo moves.
Unless raw performance is a concern, consider using AbstractSimplifiedMove instead.- See Also:
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptioncreateUndoMove(ScoreDirector<Solution_> scoreDirector) Called before the move is done, so the move can be evaluated and then be undone without resulting into a permanent change in the solution.doMove(ScoreDirector<Solution_> scoreDirector) Does the move (which indirectly affects theScoreDirector.getWorkingSolution()).protected abstract voiddoMoveOnGenuineVariables(ScoreDirector<Solution_> scoreDirector) LikedoMoveOnly(ScoreDirector)but without theScoreDirector.triggerVariableListeners()call (becausedoMoveOnly(ScoreDirector)already does that).final voiddoMoveOnly(ScoreDirector<Solution_> scoreDirector) As defined byMove.doMove(ScoreDirector), but does not return an undo move.static <E> List<E>rebaseList(List<E> externalObjectList, ScoreDirector<?> destinationScoreDirector) static <E> Set<E>rebaseSet(Set<E> externalObjectSet, ScoreDirector<?> destinationScoreDirector) Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface ai.timefold.solver.core.impl.heuristic.move.Move
getPlanningEntities, getPlanningValues, getSimpleMoveTypeDescription, isMoveDoable, rebase
-
Constructor Details
-
AbstractMove
public AbstractMove()
-
-
Method Details
-
doMove
Description copied from interface:MoveDoes the move (which indirectly affects theScoreDirector.getWorkingSolution()). When theworking solutionis modified, theScoreDirectormust be correctly notified (throughScoreDirector.beforeVariableChanged(Object, String)andScoreDirector.afterVariableChanged(Object, String)), otherwise later calculatedScores will be corrupted.This method must end with calling
ScoreDirector.triggerVariableListeners()to ensure all shadow variables are updated.This method must return an undo move, so the move can be evaluated and then be undone without resulting into a permanent change in the solution.
- Specified by:
doMovein interfaceMove<Solution_>- Parameters:
scoreDirector- never null, theScoreDirectorthat needs to get notified of the changes- Returns:
- an undoMove which does the exact opposite of this move
-
doMoveOnly
Description copied from interface:MoveAs defined byMove.doMove(ScoreDirector), but does not return an undo move.- Specified by:
doMoveOnlyin interfaceMove<Solution_>- Parameters:
scoreDirector- never null, theScoreDirectorthat needs to get notified of the changes
-
createUndoMove
Called before the move is done, so the move can be evaluated and then be undone without resulting into a permanent change in the solution.- Parameters:
scoreDirector- theScoreDirectornot yet modified by the move.- Returns:
- an undoMove which does the exact opposite of this move.
-
doMoveOnGenuineVariables
LikedoMoveOnly(ScoreDirector)but without theScoreDirector.triggerVariableListeners()call (becausedoMoveOnly(ScoreDirector)already does that).- Parameters:
scoreDirector- never null
-
rebaseList
public static <E> List<E> rebaseList(List<E> externalObjectList, ScoreDirector<?> destinationScoreDirector) -
rebaseSet
public static <E> Set<E> rebaseSet(Set<E> externalObjectSet, ScoreDirector<?> destinationScoreDirector)
-