public interface Move
PlanningVariable
s of 1 or more PlanningEntity
s
in the working Solution
.
Usually the move holds a direct reference to each PlanningEntity
of the Solution
which it will change when doMove(ScoreDirector)
is called.
On that change it should also notify the ScoreDirector
accordingly.
A Move should implement Object.equals(Object)
and Object.hashCode()
.
An implementation must extend AbstractMove
to ensure backwards compatibility in future versions.
AbstractMove
Modifier and Type | Method and Description |
---|---|
Move |
createUndoMove(ScoreDirector 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.
|
void |
doMove(ScoreDirector scoreDirector)
Does the move (which indirectly affects the
ScoreDirector.getWorkingSolution() ). |
Collection<? extends Object> |
getPlanningEntities()
Returns all planning entities that are being changed by this move.
|
Collection<? extends Object> |
getPlanningValues()
Returns all planning values that entities are being assigned to by this move.
|
String |
getSimpleMoveTypeDescription()
Describes the move type for statistical purposes.
|
boolean |
isMoveDoable(ScoreDirector scoreDirector)
Called before a move is evaluated to decide whether the move can be done and evaluated.
|
boolean isMoveDoable(ScoreDirector scoreDirector)
Solution
.It is recommended to keep this method implementation simple: do not use it in an attempt to satisfy normal hard and soft constraints.
Although you could also filter out non-doable moves in for example the MoveSelector
or MoveListFactory
, this is not needed as the Solver
will do it for you.
scoreDirector
- the ScoreDirector
not yet modified by the move.Move createUndoMove(ScoreDirector scoreDirector)
scoreDirector
- the ScoreDirector
not yet modified by the move.void doMove(ScoreDirector scoreDirector)
ScoreDirector.getWorkingSolution()
).
When the workingSolution
is modified, the ScoreDirector
must be correctly notified
(through ScoreDirector.beforeVariableChanged(Object, String)
,
ScoreDirector.afterProblemFactChanged(Object)
, etc),
otherwise later calculated Score
s will be corrupted.
This method must end with calling ScoreDirector.triggerVariableListeners()
to ensure all shadow variables are updated.
scoreDirector
- never null, the ScoreDirector
that needs to get notified of the changes.String getSimpleMoveTypeDescription()
The format is not formalized. Never parse the String
returned by this method.
Collection<? extends Object> getPlanningEntities()
AcceptorType.ENTITY_TABU
.
Duplicates entries in the returned Collection
are best avoided.
The returned Collection
is recommended to be in a stable order.
For example: use List
or LinkedHashSet
, but not HashSet
.
Collection<? extends Object> getPlanningValues()
AcceptorType.VALUE_TABU
.
Duplicates entries in the returned Collection
are best avoided.
The returned Collection
is recommended to be in a stable order.
For example: use List
or LinkedHashSet
, but not HashSet
.
Copyright © 2006–2016 JBoss by Red Hat. All rights reserved.