code: protected Predicate<Move<? super SolutionType>> getTabuFilter(){
          return m -> !tabuMemory.isTabu(m, getCurrentSolution())
                      || (validate(m).passed() && computeDelta(evaluate(m), getBestSolutionEvaluation()) > 0);
      }
docs: Returns the filter used to discard tabu moves, in the form of a predicate.
  As an exception, tabu moves that improve the currently known best solution
  are admitted anyway (aspiration criterion). The returned predicate is
  <code>false</code> for all tabu moves that have to be discarded, else
  it is <code>true</code>.
  
  @return filter discarding tabu moves