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

## Class ReinitializeVariableValueSelector

- java.lang.Object
- - org.optaplanner.core.impl.heuristic.selector.AbstractSelector
  - - org.optaplanner.core.impl.heuristic.selector.value.AbstractValueSelector
    - - org.optaplanner.core.impl.heuristic.selector.value.decorator.ReinitializeVariableValueSelector

- All Implemented Interfaces:
    `EventListener`, `Selector`, `ValueSelector`, `PhaseLifecycleListener`, `SolverLifecycleListener`

      public class ReinitializeVariableValueSelector
      extends AbstractValueSelector

  Prevents reassigning of already initialized variables during Construction Heuristics and Exhaustive Search.

  Returns no values for an entity's variable if the variable is already initialized.

  Does not implement `EntityIndependentValueSelector` because if used like that, it shouldn't be added during configuration in the first place.

- - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `protected ValueSelector` | `childValueSelector` |
    `protected SelectionFilter` | `reinitializeVariableEntityFilter` |
    `protected ScoreDirector` | `scoreDirector` |

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

      `logger, phaseLifecycleSupport, workingRandom`

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `ReinitializeVariableValueSelector​(ValueSelector childValueSelector)` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `Iterator<Object>` | `endingIterator​(Object entity)` | If `Selector.isNeverEnding()` is true, then `ValueSelector.iterator(Object)` will never end.
    `long` | `getSize​(Object entity)` | Similar to `IterableSelector.getSize()`, but requires an entity.
    `GenuineVariableDescriptor` | `getVariableDescriptor()` |
    `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<Object>` | `iterator​(Object entity)` | Similar to `Iterable.iterator()`, but requires an entity.
    `void` | `phaseEnded​(AbstractPhaseScope phaseScope)` |
    `void` | `phaseStarted​(AbstractPhaseScope phaseScope)` |
    `String` | `toString()` |

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

      `getCacheType, 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 org.optaplanner.core.impl.phase.event.PhaseLifecycleListener

      `stepEnded, stepStarted`

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

      `getCacheType`

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

      `solvingEnded, solvingStarted`

- - ### Field Detail

    - #### childValueSelector

          protected final ValueSelector childValueSelector

    - #### reinitializeVariableEntityFilter

          protected final SelectionFilter reinitializeVariableEntityFilter

    - #### scoreDirector

          protected ScoreDirector scoreDirector

  - ### Constructor Detail

    - #### ReinitializeVariableValueSelector

          public ReinitializeVariableValueSelector​(ValueSelector childValueSelector)

  - ### Method Detail

    - #### phaseStarted

          public void phaseStarted​(AbstractPhaseScope phaseScope)

      Specified by:
        `phaseStarted` in interface `PhaseLifecycleListener`
      Overrides:
        `phaseStarted` in class `AbstractSelector`

    - #### phaseEnded

          public void phaseEnded​(AbstractPhaseScope phaseScope)

      Specified by:
        `phaseEnded` in interface `PhaseLifecycleListener`
      Overrides:
        `phaseEnded` in class `AbstractSelector`

    - #### getVariableDescriptor

          public GenuineVariableDescriptor getVariableDescriptor()

      Returns:
        never null

    - #### isCountable

          public boolean isCountable()

      Description copied from interface: `Selector`
      If false, then `Selector.isNeverEnding()` is true.
      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).
      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​(Object entity)

      Description copied from interface: `ValueSelector`
      Similar to `IterableSelector.getSize()`, but requires an entity.
      Parameters:
        `entity` - never null
      Returns:
        the approximate number of elements generated by this `Selector`, always `>= 0`

    - #### iterator

          public Iterator<Object> iterator​(Object entity)

      Description copied from interface: `ValueSelector`
      Similar to `Iterable.iterator()`, but requires an entity.
      Parameters:
        `entity` - never null
      Returns:
        never null

    - #### endingIterator

          public Iterator<Object> endingIterator​(Object entity)

      Description copied from interface: `ValueSelector`
      If `Selector.isNeverEnding()` is true, then `ValueSelector.iterator(Object)` will never end. This returns an ending `Iterator`, that tries to match `ValueSelector.iterator(Object)` as much as possible, but return each distinct element only once and therefore it might not respect the configuration of this `ValueSelector` entirely.
      Parameters:
        `entity` - never null
      Returns:
        never null
      See Also:
        `ValueSelector.iterator(Object)`

    - #### toString

          public String toString()

      Overrides:
        `toString` in class `Object`