Interface SelectionFilter<Solution_,T>

Type Parameters:
Solution_ - the solution type, the class with the PlanningSolution annotation
T - the selection type. On problems using multiple planning variables on a single entity without specifying single variable name, this needs to be Object as variables of both types will be tested.
All Known Implementing Classes:
MovableChainedTrailingValueFilter, PinEntityFilter
Functional Interface:
This is a functional interface and can therefore be used as the assignment target for a lambda expression or method reference.

@FunctionalInterface public interface SelectionFilter<Solution_,T>
Decides on accepting or discarding a selection, which is either a PlanningEntity, a planning value, a Move or a Selector). For example, a pinned PlanningEntity is rejected and therefore never used in a Move.

A filtered selection is considered as not selected, it does not count as an unaccepted selection.

Implementations are expected to be stateless. The solver may choose to reuse instances.

  • Method Details

    • compose

      static <Solution_, T> SelectionFilter<Solution_,T> compose(SelectionFilter<Solution_,T>... filterArray)
      Creates a SelectionFilter which applies all the provided filters one after another. Once one filter in the sequence returns false, no subsequent filers are evaluated.
      Type Parameters:
      Solution_ - the solution type, the class with the PlanningSolution annotation
      T - the selection type
      Parameters:
      filterArray - filters to apply, never null
      Returns:
      never null
    • compose

      static <Solution_, T> SelectionFilter<Solution_,T> compose(List<SelectionFilter<Solution_,T>> filterList)
    • accept

      boolean accept(ScoreDirector<Solution_> scoreDirector, T selection)
      Parameters:
      scoreDirector - never null, the ScoreDirector which has the ScoreDirector.getWorkingSolution() to which the selection belongs or applies to
      selection - never null, a PlanningEntity, a planningValue, a Move or a Selector
      Returns:
      true if the selection is accepted (for example it is movable), false if the selection will be discarded (for example it is pinned)