Class IterableFromEntityPropertyValueSelector<Solution_>
java.lang.Object
ai.timefold.solver.core.impl.heuristic.selector.AbstractSelector<Solution_>
ai.timefold.solver.core.impl.heuristic.selector.AbstractDemandEnabledSelector<Solution_>
ai.timefold.solver.core.impl.heuristic.selector.value.decorator.IterableFromEntityPropertyValueSelector<Solution_>
- Type Parameters:
Solution_- the solution type
- All Implemented Interfaces:
IterableSelector<Solution_,,Object> Selector<Solution_>,IterableValueSelector<Solution_>,ValueSelector<Solution_>,PhaseLifecycleListener<Solution_>,SolverLifecycleListener<Solution_>,Iterable<Object>,EventListener
public final class IterableFromEntityPropertyValueSelector<Solution_>
extends AbstractDemandEnabledSelector<Solution_>
implements IterableValueSelector<Solution_>
The value range for list variables requires the selector to be entity-independent,
as it needs to fetch the entire list of values.
Fetching the list of values is not a problem when the value range is located within the solution class,
serving as a single source of truth.
In cases where it is entity-dependent,
the list of entities must be read to generate the corresponding list of values.
This selector adapts FromEntityPropertyValueSelector to behave like an entity-independent selector
and meets the requirement to retrieve the complete list of values.
-
Field Summary
Fields inherited from class ai.timefold.solver.core.impl.heuristic.selector.AbstractSelector
logger, phaseLifecycleSupport, workingRandom -
Constructor Summary
ConstructorsConstructorDescriptionIterableFromEntityPropertyValueSelector(FromEntityPropertyValueSelector<Solution_> childValueSelector, boolean randomSelection) IterableFromEntityPropertyValueSelector(FromEntityPropertyValueSelector<Solution_> childValueSelector, SelectionCacheType minimumCacheType, boolean randomSelection) -
Method Summary
Modifier and TypeMethodDescriptionendingIterator(Object entity) IfSelector.isNeverEnding()is true, thenValueSelector.iterator(Object)will never end.booleanUnless this selector itself caches, this returnsSelectionCacheType.JUST_IN_TIME, even if a selector child caches.Returns the selection sorter applied to the node.longgetSize()A random JITSelectorwithSelector.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 inSelectionProbabilityWeightFactory.longSimilar toIterableSelector.getSize(), but requires an entity.inthashCode()booleanIf false, thenSelector.isNeverEnding()is true.booleanIs true ifSelector.isCountable()is false or if this selector is in random order (for most cases).iterator()Similar toIterable.iterator(), but requires an entity.voidphaseEnded(AbstractPhaseScope<Solution_> phaseScope) voidphaseStarted(AbstractPhaseScope<Solution_> phaseScope) voidsolvingEnded(SolverScope<Solution_> solverScope) voidsolvingStarted(SolverScope<Solution_> solverScope) Methods inherited from class ai.timefold.solver.core.impl.heuristic.selector.AbstractSelector
stepEnded, stepStartedMethods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface ai.timefold.solver.core.impl.heuristic.selector.IterableSelector
spliteratorMethods inherited from interface ai.timefold.solver.core.impl.phase.event.PhaseLifecycleListener
stepEnded, stepStartedMethods inherited from interface ai.timefold.solver.core.impl.solver.event.SolverLifecycleListener
solvingError
-
Constructor Details
-
IterableFromEntityPropertyValueSelector
public IterableFromEntityPropertyValueSelector(FromEntityPropertyValueSelector<Solution_> childValueSelector, boolean randomSelection) -
IterableFromEntityPropertyValueSelector
public IterableFromEntityPropertyValueSelector(FromEntityPropertyValueSelector<Solution_> childValueSelector, SelectionCacheType minimumCacheType, boolean randomSelection)
-
-
Method Details
-
solvingStarted
- Specified by:
solvingStartedin interfaceSolverLifecycleListener<Solution_>- Overrides:
solvingStartedin classAbstractSelector<Solution_>
-
solvingEnded
- Specified by:
solvingEndedin interfaceSolverLifecycleListener<Solution_>- Overrides:
solvingEndedin classAbstractSelector<Solution_>
-
phaseStarted
- Specified by:
phaseStartedin interfacePhaseLifecycleListener<Solution_>- Overrides:
phaseStartedin classAbstractSelector<Solution_>
-
phaseEnded
- Specified by:
phaseEndedin interfacePhaseLifecycleListener<Solution_>- Overrides:
phaseEndedin classAbstractSelector<Solution_>
-
getChildValueSelector
-
getSelectionSorter
Description copied from interface:ValueSelectorReturns the selection sorter applied to the node. By default, it returns null and must be overridden by the child class if necessary.- Specified by:
getSelectionSorterin interfaceValueSelector<Solution_>- Returns:
- the selection sorter.
-
getCacheType
Description copied from interface:SelectorUnless this selector itself caches, this returnsSelectionCacheType.JUST_IN_TIME, even if a selector child caches.- Specified by:
getCacheTypein interfaceSelector<Solution_>- Overrides:
getCacheTypein classAbstractSelector<Solution_>- Returns:
- never null
-
getVariableDescriptor
- Specified by:
getVariableDescriptorin interfaceValueSelector<Solution_>- Returns:
- never null
-
getSize
Description copied from interface:ValueSelectorSimilar toIterableSelector.getSize(), but requires an entity.- Specified by:
getSizein interfaceValueSelector<Solution_>- Parameters:
entity- never null- Returns:
- the approximate number of elements generated by this
Selector, always>= 0
-
iterator
Description copied from interface:ValueSelectorSimilar toIterable.iterator(), but requires an entity.- Specified by:
iteratorin interfaceValueSelector<Solution_>- Parameters:
entity- never null- Returns:
- never null
-
endingIterator
Description copied from interface:ValueSelectorIfSelector.isNeverEnding()is true, thenValueSelector.iterator(Object)will never end. This returns an endingIterator, that tries to matchValueSelector.iterator(Object)as much as possible, but return each distinct element only once and therefore it might not respect the configuration of thisValueSelectorentirely.- Specified by:
endingIteratorin interfaceValueSelector<Solution_>- Parameters:
entity- never null- Returns:
- never null
- See Also:
-
isCountable
public boolean isCountable()Description copied from interface:SelectorIf false, thenSelector.isNeverEnding()is true.- Specified by:
isCountablein interfaceSelector<Solution_>- Returns:
- true if all the
ValueRanges 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:SelectorIs true ifSelector.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:
isNeverEndingin interfaceSelector<Solution_>- Returns:
- true if the
Iterator.hasNext()of theIteratorcreated byIterable.iterator()never returns false (except when it's empty).
-
getSize
public long getSize()Description copied from interface:IterableSelectorA random JITSelectorwithSelector.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 inSelectionProbabilityWeightFactory.- Specified by:
getSizein interfaceIterableSelector<Solution_,Object> - Returns:
- the approximate number of elements generated by this
Selector, always>= 0
-
iterator
-
equals
- Specified by:
equalsin classAbstractDemandEnabledSelector<Solution_>
-
hashCode
public int hashCode()- Specified by:
hashCodein classAbstractDemandEnabledSelector<Solution_>
-