code: protected boolean isImprovement(Move<? super SolutionType> move){
          return move != null
                  && validate(move).passed()
                  && (!getCurrentSolutionValidation().passed()
                      || computeDelta(evaluate(move), getCurrentSolutionEvaluation()) > 0);
      }
docs: <p>
  Checks whether applying the given move to the current solution yields a valid improvement.
  An improvement is made if and only if (1) the given move is not <code>null</code>,
  (2) the move is valid, and (3) the obtained neighbour has a better evaluation than the
  current solution or the current solution is invalid.
  </p>
  <p>
  Note that computed values are cached to prevent multiple evaluations or validations of the same move.
  </p>
  
  @param move move to be applied to the current solution
  @return <code>true</code> if applying this move yields a valid improvement