code: protected boolean updateBestSolution(SolutionType newSolution){
          // validate solution
          Validation validation = getProblem().validate(newSolution);
          if(validation.passed()){
              // passed validation: evaluate
              Evaluation evaluation = getProblem().evaluate(newSolution);
              // update if better
              return updateBestSolution(newSolution, evaluation, validation);
          } else {
              // invalid solution
              return false;
          }
      }
docs: <p>
  Checks whether a new best solution has been found and updates it accordingly.
  The given solution is evaluated and validated, after which the best solution
  is updated only if the solution is valid and
  </p>
  <ul>
  <li>no best solution had been set before, or</li>
  <li>the new solution has a better evaluation</li>
  </ul>
  <p>
  If the new solution is invalid or has a worse evaluation than the current best
  solution, calling this method has no effect. Note that the best solution is
  <b>retained</b> across subsequent runs of the same search.
  </p>
  
  @param newSolution newly presented solution
  @return <code>true</code> if the given solution is accepted as the new best solution