Overview | Package | Class | Use | Tree | Deprecated | Index | Help
| OptaPlanner distribution 6.2.0.Final
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## org.optaplanner.core.impl.heuristic.move
Interface Move

All Known Implementing Classes:
  AbstractMove, BedChangeMove, BedDesignationSwapMove, ChainedChangeMove, ChainedSwapMove, ChangeMove, CheapTimePillarSlideMove, CloudComputerChangeMove, CloudProcessSwapMove, CompositeMove, EmployeeChangeMove, EmployeeMultipleChangeMove, MatchChainRotationsMove, NoChangeMove, PillarChangeMove, PillarSwapMove, RowChangeMove, ShiftAssignmentSwapMove, SubChainChangeMove, SubChainReversingChangeMove, SubChainReversingSwapMove, SubChainSwapMove, SwapMove, TailChainSwapMove

    public interface Move

A Move represents a change of 1 or more planning variables of 1 or more planning entities in the working `Solution`.

Usually the move holds a direct reference to each planning entity 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.

See Also:
  `AbstractMove`

Method Summary
`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 and updates the `Solution` and its `ScoreDirector` accordingly.
`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.

Method Detail

### isMoveDoable

    boolean isMoveDoable(ScoreDirector scoreDirector)

  Called before a move is evaluated to decide whether the move can be done and evaluated. A Move is not doable if:
  - Either doing it would change nothing in the `Solution`.
  - Either it's simply not possible to do (for example due to build-in hard constraints).

  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.

  Parameters:
    `scoreDirector` - the `ScoreDirector` not yet modified by the move.
  Returns:
    true if the move achieves a change in the solution and the move is possible to do on the solution.

### createUndoMove

    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.

  Parameters:
    `scoreDirector` - the `ScoreDirector` not yet modified by the move.
  Returns:
    an undoMove which does the exact opposite of this move.

### doMove

    void doMove(ScoreDirector scoreDirector)

  Does the Move and updates the `Solution` and its `ScoreDirector` accordingly. When the `Solution` is modified, the `ScoreDirector` should be correctly notified, otherwise later calculated `Score`s can be corrupted.

  Parameters:
    `scoreDirector` - never null, the `ScoreDirector` that needs to get notified of the changes.

### getSimpleMoveTypeDescription

    String getSimpleMoveTypeDescription()

  Describes the move type for statistical purposes. For example "ChangeMove(Process.computer)". The format is not formalized. Never parse the `String` returned by this method.

  Returns:
    never null

### getPlanningEntities

    Collection<? extends Object> getPlanningEntities()

  Returns all planning entities that are being changed by this move. Required for `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`.

  Returns:
    never null

### getPlanningValues

    Collection<? extends Object> getPlanningValues()

  Returns all planning values that entities are being assigned to by this move. Required for `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`.

  Returns:
    never null

Overview | Package | Class | Use | Tree | Deprecated | Index | Help
| OptaPlanner distribution 6.2.0.Final
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

Copyright © 2006-2015 JBoss by Red Hat. All Rights Reserved.