Package org.optaplanner.core.impl.heuristic.selector.move.decorator

## Class ProbabilityMoveSelector<Solution_>

- java.lang.Object
- - org.optaplanner.core.impl.heuristic.selector.AbstractSelector<Solution_>
  - - org.optaplanner.core.impl.heuristic.selector.move.AbstractMoveSelector<Solution_>
    - - org.optaplanner.core.impl.heuristic.selector.move.decorator.ProbabilityMoveSelector<Solution_>

- All Implemented Interfaces:
    `Iterable<Move<Solution_>>`, `EventListener`, `SelectionCacheLifecycleListener<Solution_>`, `IterableSelector<Solution_,​Move<Solution_>>`, `MoveSelector<Solution_>`, `Selector<Solution_>`, `PhaseLifecycleListener<Solution_>`, `SolverLifecycleListener<Solution_>`

      public class ProbabilityMoveSelector<Solution_>
      extends AbstractMoveSelector<Solution_>
      implements SelectionCacheLifecycleListener<Solution_>

- - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `protected NavigableMap<Double,​Move<Solution_>>` | `cachedMoveMap` |
    `protected SelectionCacheType` | `cacheType` |
    `protected MoveSelector<Solution_>` | `childMoveSelector` |
    `protected SelectionProbabilityWeightFactory<Solution_,​Move<Solution_>>` | `probabilityWeightFactory` |
    `protected double` | `probabilityWeightTotal` |

    - ### Fields inherited from class org.optaplanner.core.impl.heuristic.selector.AbstractSelector

      `logger, phaseLifecycleSupport, workingRandom`

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `ProbabilityMoveSelector​(MoveSelector<Solution_> childMoveSelector, SelectionCacheType cacheType, SelectionProbabilityWeightFactory<Solution_,​? extends Move<Solution_>> probabilityWeightFactory)` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `constructCache​(SolverScope<Solution_> solverScope)` |
    `void` | `disposeCache​(SolverScope<Solution_> solverScope)` |
    `SelectionCacheType` | `getCacheType()` | Unless this selector itself caches, this returns `SelectionCacheType.JUST_IN_TIME`, even if a selector child caches.
    `long` | `getSize()` | A random JIT `Selector` with `Selector.isNeverEnding()` true should return a size as if it would be able to return each distinct element only once, because the size can be used in `SelectionProbabilityWeightFactory`.
    `boolean` | `isCountable()` | If false, then `Selector.isNeverEnding()` is true.
    `boolean` | `isNeverEnding()` | Is true if `Selector.isCountable()` is false or if this selector is in random order (for most cases).
    `Iterator<Move<Solution_>>` | `iterator()` |
    `String` | `toString()` |

    - ### Methods inherited from class org.optaplanner.core.impl.heuristic.selector.AbstractSelector

      `phaseEnded, phaseStarted, solvingEnded, solvingStarted, stepEnded, stepStarted`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

    - ### Methods inherited from interface java.lang.Iterable

      `forEach`

    - ### Methods inherited from interface org.optaplanner.core.impl.heuristic.selector.IterableSelector

      `spliterator`

    - ### Methods inherited from interface org.optaplanner.core.impl.heuristic.selector.move.MoveSelector

      `supportsPhaseAndSolverCaching`

    - ### Methods inherited from interface org.optaplanner.core.impl.phase.event.PhaseLifecycleListener

      `phaseEnded, phaseStarted, stepEnded, stepStarted`

    - ### Methods inherited from interface org.optaplanner.core.impl.solver.event.SolverLifecycleListener

      `solvingEnded, solvingStarted`

- - ### Field Detail

    - #### childMoveSelector

          protected final MoveSelector<Solution_> childMoveSelector

    - #### cacheType

          protected final SelectionCacheType cacheType

    - #### probabilityWeightFactory

          protected final SelectionProbabilityWeightFactory<Solution_,​Move<Solution_>> probabilityWeightFactory

    - #### cachedMoveMap

          protected NavigableMap<Double,​Move<Solution_>> cachedMoveMap

    - #### probabilityWeightTotal

          protected double probabilityWeightTotal

  - ### Constructor Detail

    - #### ProbabilityMoveSelector

          public ProbabilityMoveSelector​(MoveSelector<Solution_> childMoveSelector,
                                         SelectionCacheType cacheType,
                                         SelectionProbabilityWeightFactory<Solution_,​? extends Move<Solution_>> probabilityWeightFactory)

  - ### Method Detail

    - #### getCacheType

          public SelectionCacheType getCacheType()

      Description copied from interface: `Selector`
      Unless this selector itself caches, this returns `SelectionCacheType.JUST_IN_TIME`, even if a selector child caches.
      Specified by:
        `getCacheType` in interface `Selector<Solution_>`
      Overrides:
        `getCacheType` in class `AbstractSelector<Solution_>`
      Returns:
        never null

    - #### constructCache

          public void constructCache​(SolverScope<Solution_> solverScope)

      Specified by:
        `constructCache` in interface `SelectionCacheLifecycleListener<Solution_>`

    - #### disposeCache

          public void disposeCache​(SolverScope<Solution_> solverScope)

      Specified by:
        `disposeCache` in interface `SelectionCacheLifecycleListener<Solution_>`

    - #### isCountable

          public boolean isCountable()

      Description copied from interface: `Selector`
      If false, then `Selector.isNeverEnding()` is true.
      Specified by:
        `isCountable` in interface `Selector<Solution_>`
      Returns:
        true if all the `ValueRange`s are countable (for example a double value range between 1.2 and 1.4 is not countable)

    - #### isNeverEnding

          public boolean isNeverEnding()

      Description copied from interface: `Selector`
      Is true if `Selector.isCountable()` is false or if this selector is in random order (for most cases). Is never true when this selector is in shuffled order (which is less scalable but more exact).
      Specified by:
        `isNeverEnding` in interface `Selector<Solution_>`
      Returns:
        true if the `Iterator.hasNext()` of the `Iterator` created by `Iterable.iterator()` never returns false (except when it's empty).

    - #### getSize

          public long getSize()

      Description copied from interface: `IterableSelector`
      A random JIT `Selector` with `Selector.isNeverEnding()` true should return a size as if it would be able to return each distinct element only once, because the size can be used in `SelectionProbabilityWeightFactory`.
      Specified by:
        `getSize` in interface `IterableSelector<Solution_,​Move<Solution_>>`
      Returns:
        the approximate number of elements generated by this `Selector`, always `>= 0`

    - #### iterator

          public Iterator<Move<Solution_>> iterator()

      Specified by:
        `iterator` in interface `Iterable<Solution_>`

    - #### toString

          public String toString()

      Overrides:
        `toString` in class `Object`