Class UpcomingSelectionIterator<S>

java.lang.Object
ai.timefold.solver.core.impl.heuristic.selector.common.iterator.SelectionIterator<S>
ai.timefold.solver.core.impl.heuristic.selector.common.iterator.UpcomingSelectionIterator<S>
Type Parameters:
S - Selection type, for example a Move class, an entity class or a value class.
All Implemented Interfaces:
Iterator<S>
Direct Known Subclasses:
AbstractOriginalChangeIterator, AbstractOriginalSwapIterator, AbstractRandomChangeIterator, AbstractRandomSwapIterator, CartesianProductMoveSelector.OriginalCartesianProductMoveIterator, FilteringEntitySelector.JustInTimeFilteringEntityIterator, FilteringValueSelector.JustInTimeFilteringValueIterator, InitializedValueSelector.JustInTimeInitializedValueIterator, OriginalListChangeIterator, OriginalListSwapIterator, RandomListChangeIterator, RandomListSwapIterator, UpcomingSelectionListIterator

public abstract class UpcomingSelectionIterator<S> extends SelectionIterator<S>
IMPORTANT: The constructor of any subclass of this abstract class, should never call any of its child Selector's Iterator.hasNext() or Iterator.next() methods, because that can cause descendant Selectors to be selected too early (which breaks MimicReplayingEntitySelector).
  • Field Details

    • upcomingCreated

      protected boolean upcomingCreated
    • hasUpcomingSelection

      protected boolean hasUpcomingSelection
    • upcomingSelection

      protected S upcomingSelection
  • Constructor Details

    • UpcomingSelectionIterator

      public UpcomingSelectionIterator()
  • Method Details

    • hasNext

      public boolean hasNext()
    • next

      public S next()
    • createUpcomingSelection

      protected abstract S createUpcomingSelection()
    • noUpcomingSelection

      protected S noUpcomingSelection()
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • findUnpinnedDestination

      public static ElementPosition findUnpinnedDestination(Iterator<ElementPosition> destinationIterator, ListVariableDescriptor<?> listVariableDescriptor)
      Some destination iterators, such as nearby destination iterators, may return even elements which are pinned. This is because the nearby matrix always picks from all nearby elements, and is unaware of any pinning. This means that later we need to filter out the pinned elements, so that moves aren't generated for them.
      Parameters:
      destinationIterator - never null
      listVariableDescriptor - never null
      Returns:
      null if no unpinned destination was found, at which point the iterator is exhausted.