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

## Class DefaultSubChainSelector

- java.lang.Object
- - org.optaplanner.core.impl.heuristic.selector.AbstractSelector
  - - org.optaplanner.core.impl.heuristic.selector.value.chained.DefaultSubChainSelector

- All Implemented Interfaces:
    `Iterable<SubChain>`, `EventListener`, `ListIterable<SubChain>`, `SelectionCacheLifecycleListener`, `IterableSelector<SubChain>`, `ListIterableSelector<SubChain>`, `Selector`, `SubChainSelector`, `PhaseLifecycleListener`, `SolverLifecycleListener`

      public class DefaultSubChainSelector
      extends AbstractSelector
      implements SubChainSelector, SelectionCacheLifecycleListener

  This is the common `SubChainSelector` implementation.

- - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `protected List<SubChain>` | `anchorTrailingChainList` |
    `protected static SelectionCacheType` | `CACHE_TYPE` |
    `protected SingletonInverseVariableSupply` | `inverseVariableSupply` |
    `protected int` | `maximumSubChainSize` |
    `protected int` | `minimumSubChainSize` | Unlike `DefaultPillarSelector#minimumSubPillarSize` and `DefaultPillarSelector#maximumSubPillarSize`, the sub selection here is a sequence.
    `protected boolean` | `randomSelection` |
    `protected EntityIndependentValueSelector` | `valueSelector` |

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

      `logger, phaseLifecycleSupport, workingRandom`

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `DefaultSubChainSelector​(EntityIndependentValueSelector valueSelector, boolean randomSelection, int minimumSubChainSize, int maximumSubChainSize)` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `protected long` | `calculateSubChainSelectionSize​(SubChain anchorTrailingChain)` |
    `void` | `constructCache​(DefaultSolverScope solverScope)` |
    `void` | `disposeCache​(DefaultSolverScope 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`.
    `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<SubChain>` | `iterator()` |
    `ListIterator<SubChain>` | `listIterator()` |
    `ListIterator<SubChain>` | `listIterator​(int index)` |
    `void` | `solvingEnded​(DefaultSolverScope solverScope)` |
    `void` | `solvingStarted​(DefaultSolverScope solverScope)` |
    `String` | `toString()` |

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

      `phaseEnded, phaseStarted, 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, spliterator`

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

      `phaseEnded, phaseStarted, stepEnded, stepStarted`

- - ### Field Detail

    - #### CACHE_TYPE

          protected static final SelectionCacheType CACHE_TYPE

    - #### valueSelector

          protected final EntityIndependentValueSelector valueSelector

    - #### randomSelection

          protected final boolean randomSelection

    - #### inverseVariableSupply

          protected SingletonInverseVariableSupply inverseVariableSupply

    - #### minimumSubChainSize

          protected final int minimumSubChainSize

      Unlike `DefaultPillarSelector#minimumSubPillarSize` and `DefaultPillarSelector#maximumSubPillarSize`, the sub selection here is a sequence. For example from ABCDE, it can select BCD, but not ACD.

    - #### maximumSubChainSize

          protected final int maximumSubChainSize

    - #### anchorTrailingChainList

          protected List<SubChain> anchorTrailingChainList

  - ### Constructor Detail

    - #### DefaultSubChainSelector

          public DefaultSubChainSelector​(EntityIndependentValueSelector valueSelector,
                                         boolean randomSelection,
                                         int minimumSubChainSize,
                                         int maximumSubChainSize)

  - ### Method Detail

    - #### getVariableDescriptor

          public GenuineVariableDescriptor getVariableDescriptor()

      Specified by:
        `getVariableDescriptor` in interface `SubChainSelector`
      Returns:
        never null

    - #### 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`
      Overrides:
        `getCacheType` in class `AbstractSelector`
      Returns:
        never null

    - #### solvingStarted

          public void solvingStarted​(DefaultSolverScope solverScope)

      Specified by:
        `solvingStarted` in interface `SolverLifecycleListener`
      Overrides:
        `solvingStarted` in class `AbstractSelector`

    - #### solvingEnded

          public void solvingEnded​(DefaultSolverScope solverScope)

      Specified by:
        `solvingEnded` in interface `SolverLifecycleListener`
      Overrides:
        `solvingEnded` in class `AbstractSelector`

    - #### constructCache

          public void constructCache​(DefaultSolverScope solverScope)

      Specified by:
        `constructCache` in interface `SelectionCacheLifecycleListener`

    - #### disposeCache

          public void disposeCache​(DefaultSolverScope solverScope)

      Specified by:
        `disposeCache` in interface `SelectionCacheLifecycleListener`

    - #### isCountable

          public boolean isCountable()

      Description copied from interface: `Selector`
      If false, then `Selector.isNeverEnding()` is true.
      Specified by:
        `isCountable` in interface `Selector`
      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`
      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<SubChain>`
      Returns:
        the approximate number of elements generated by this `Selector`, always `>= 0`

    - #### calculateSubChainSelectionSize

          protected long calculateSubChainSelectionSize​(SubChain anchorTrailingChain)

    - #### iterator

          public Iterator<SubChain> iterator()

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

    - #### listIterator

          public ListIterator<SubChain> listIterator()

      Specified by:
        `listIterator` in interface `ListIterable<SubChain>`
      Returns:
        never null, see `List.listIterator()`.
      See Also:
        `List.listIterator()`

    - #### listIterator

          public ListIterator<SubChain> listIterator​(int index)

      Specified by:
        `listIterator` in interface `ListIterable<SubChain>`
      Parameters:
        `index` - lower than the size of this `ListIterable`, see `List.listIterator(int)`.
      Returns:
        never null, see `List.listIterator(int)`.
      See Also:
        `List.listIterator()`

    - #### toString

          public String toString()

      Overrides:
        `toString` in class `Object`