anchor.diff:  }
   ----
   
  +Each `ConstraintMatchTotal` is one constraint (so  one score rule) and has a part of the overall score.
  +The sum of `ConstraintMatchTotal.getScoreTotal()` equals the overall score.
  +
   [NOTE]
   ====
   <<droolsScoreCalculation,Drools score calculation>> supports constraint matches automatically,
  -but <<incrementalJavaScoreCalculation,incremental Java score calculation>> requires requires implementing an extra interface (see that section).
  +but <<incrementalJavaScoreCalculation,incremental Java score calculation>> requires
  +<<constraintMatchAwareIncrementalScoreCalculator,implementing an extra interface>>.
  +====
  +
  +
  +[[indictmentHeatMap]]
  +=== Indictment Heat Map: Visualize the Hot Planning Entities
  +
  +To show a heat map in the UI that highlights the planning entities and problem facts have an impact on the ``Score``,
  +get the `Indictment` map from the ``ScoreDirector``:
  +
  +[source,java,options="nowrap"]
  +----
  +Map<Object, Indictment> indictmentMap = guiScoreDirector.getIndictmentMap();
  +for (CloudProcess process = cloudBalance.getProcessList()) {
  +    Indictment indictment = indictmentMap.get(process);
  +    if (indictment == null) {
  +        continue;
  +    }
  +    // The score impact of that planning entity
  +    Score scoreTotal = indictment.getScoreTotal();
  +
  +    for (ConstraintMatch constraintMatch : indictment.getConstraintMatchSet()) {
  +        String constraintName = constraintMatch.getConstraintName();
  +        Score score = constraintMatch.getScore();
  +        ...
  +    }
  +}
  +----
  +
  +Each `Indictment` is the sum of all constraints where that justification object is involved with.
  +The sum of `Indictment.getScoreTotal()` differs from the overall score,
  +because multiple ``Indictment``s can share the same `ConstraintMatch`.
  +
  +[NOTE]
  +====
  +<<droolsScoreCalculation,Drools score calculation>> supports indictments and constraint matches automatically,
  +but <<incrementalJavaScoreCalculation,incremental Java score calculation>> requires
  +<<constraintMatchAwareIncrementalScoreCalculator,implementing an extra interface>>.
   ====
   
   
  
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"]
  