Class FilteringEntityByValueSelector<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.entity.decorator.FilteringEntityByValueSelector<Solution_>
Type Parameters:
Solution_ - the solution type
All Implemented Interfaces:
ListIterable<Object>, EntitySelector<Solution_>, IterableSelector<Solution_,Object>, ListIterableSelector<Solution_,Object>, Selector<Solution_>, PhaseLifecycleListener<Solution_>, SolverLifecycleListener<Solution_>, Iterable<Object>, EventListener

public final class FilteringEntityByValueSelector<Solution_> extends AbstractDemandEnabledSelector<Solution_> implements EntitySelector<Solution_>
The decorator returns a list of reachable entities for a specific value. It enables the creation of a filtering tier when using entity-provided value ranges, ensuring only valid and reachable entities are returned. An entity is considered reachable to a value if its value range includes that value.

The decorator can only be applied to list variables.

 e1 = entity_range[v1, v2, v3]
 e2 = entity_range[v1, v4]

 v1 = [e1, e2]

 v2 = [e1]

 v3 = [e1]

 v4 = [e2]
 

This node is currently used by the QueuedValuePlacer to build an initial solution. To illustrate its usage, let’s assume how moves are generated. First, a value is selected using a value selector. Then, a change move selector generates all possible moves for that value to the available entities and selects the entity and position with the best score.

Considering the previous process and the current goal of this node, we can observe that once a value is selected, only change moves to reachable entities will be generated. This ensures that entities that do not accept the currently selected value will not produce any change moves.

See Also: