anchor.diff:  Assert its correctness by using <<invalidScoreDetection,an ``EasyScoreCalculator`` to do the assertions triggered by the ``environmentMode``>>.
   ====
   
  +
  +[[constraintMatchAwareIncrementalScoreCalculator]]
   ==== `ConstraintMatchAwareIncrementalScoreCalculator`
   
   Optionally, also implement the `ConstraintMatchAwareIncrementalScoreCalculator` interface to:
  
positive.code: guiScoreDirector.dispose();
  ----
  
  Then use it when you need to calculate the `Score` of a ``Solution``:
  
  [source,java,options="nowrap"]
  ----
  guiScoreDirector.setWorkingSolution(cloudBalance);
  Score score = guiScoreDirector.calculateScore();
  
  ----
  
  [IMPORTANT]
  ====
  Don't forget to call `ScoreDirector.dispose()` when the `ScoreDirector` becomes useless,
  especially with <<droolsScoreCalculation,Drools score calculation>>, to avoid a memory leak.
  ====
  
  To explain in the GUI which planning entities and problem facts are causing which part of the ``Score``,
  get the `ConstraintMatch` objects from the ``ScoreDirector``:
  
  [source,java,options="nowrap"]
  ----
  for (ConstraintMatchTotal constraintMatchTotal : guiScoreDirector.getConstraintMatchTotals()) {
      String constraintName = constraintMatchTotal.getConstraintName();
      Score scoreTotal = constraintMatchTotal.getScoreTotal();
      for (ConstraintMatch constraintMatch : constraintMatchTotal.getConstraintMatchSet()) {
          List<Object> justificationList = constraintMatch.getJustificationList();
          Score score = constraintMatch.getScore();
  
negative.code: [[explainingTheScore]]
  == Explaining the Score: Using Score Calculation Outside the `Solver`
  
  If other parts of your application, for example your webUI, need to calculate the score of a solution,
  reuse the `ScoreDirectorFactory` of the `Solver` to build a separate `ScoreDirector` for that webUI:
  
  [source,java,options="nowrap"]
  