Class AbstractMove<Solution_>
- java.lang.Object
-
- org.optaplanner.core.impl.heuristic.move.AbstractMove<Solution_>
-
- Type Parameters:
Solution_
- the solution type, the class with thePlanningSolution
annotation
- All Implemented Interfaces:
Move<Solution_>
- Direct Known Subclasses:
ChangeMove
,KOptMove
,NoChangeMove
,PartitionChangeMove
,PillarChangeMove
,PillarSwapMove
,SubChainChangeMove
,SubChainReversingChangeMove
,SubChainReversingSwapMove
,SubChainSwapMove
,SwapMove
,TailChainSwapMove
public abstract class AbstractMove<Solution_> extends Object implements Move<Solution_>
Abstract superclass forMove
.- See Also:
Move
-
-
Constructor Summary
Constructors Constructor Description AbstractMove()
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected abstract AbstractMove<Solution_>
createUndoMove(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.AbstractMove<Solution_>
doMove(ScoreDirector<Solution_> scoreDirector)
Does the move (which indirectly affects theScoreDirector.getWorkingSolution()
).protected abstract void
doMoveOnGenuineVariables(ScoreDirector<Solution_> scoreDirector)
LikedoMove(ScoreDirector)
but without theScoreDirector.triggerVariableListeners()
call (becausedoMove(ScoreDirector)
already does that).static Object[]
rebaseArray(Object[] externalObjects, ScoreDirector<?> destinationScoreDirector)
static <E> List<E>
rebaseList(List<E> externalObjectList, ScoreDirector<?> destinationScoreDirector)
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.optaplanner.core.impl.heuristic.move.Move
getPlanningEntities, getPlanningValues, getSimpleMoveTypeDescription, isMoveDoable, rebase
-
-
-
-
Method Detail
-
doMove
public final AbstractMove<Solution_> doMove(ScoreDirector<Solution_> scoreDirector)
Description copied from interface:Move
Does the move (which indirectly affects theScoreDirector.getWorkingSolution()
). When theworking solution
is modified, theScoreDirector
must be correctly notified (throughScoreDirector.beforeVariableChanged(Object, String)
andScoreDirector.afterVariableChanged(Object, String)
), otherwise later calculatedScore
s 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:
doMove
in interfaceMove<Solution_>
- Parameters:
scoreDirector
- never null, theScoreDirector
that needs to get notified of the changes- Returns:
- an undoMove which does the exact opposite of this move
-
createUndoMove
protected abstract AbstractMove<Solution_> createUndoMove(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.- Parameters:
scoreDirector
- theScoreDirector
not yet modified by the move.- Returns:
- an undoMove which does the exact opposite of this move.
-
doMoveOnGenuineVariables
protected abstract void doMoveOnGenuineVariables(ScoreDirector<Solution_> scoreDirector)
LikedoMove(ScoreDirector)
but without theScoreDirector.triggerVariableListeners()
call (becausedoMove(ScoreDirector)
already does that).- Parameters:
scoreDirector
- never null
-
rebaseList
public static <E> List<E> rebaseList(List<E> externalObjectList, ScoreDirector<?> destinationScoreDirector)
-
rebaseArray
public static Object[] rebaseArray(Object[] externalObjects, ScoreDirector<?> destinationScoreDirector)
-
-