anchor.diff:  import org.optaplanner.core.api.domain.solution.PlanningEntityCollectionProperty;
   import org.optaplanner.core.api.domain.solution.PlanningScore;
   import org.optaplanner.core.api.domain.solution.PlanningSolution;
  -import org.optaplanner.core.api.domain.solution.drools.ProblemFactCollectionProperty;
  +import org.optaplanner.core.api.domain.solution.ProblemFactCollectionProperty;
   import org.optaplanner.core.api.domain.valuerange.ValueRangeProvider;
   import org.optaplanner.core.api.score.buildin.hardsoft.HardSoftScore;
   
  
positive.code:                         // ... in the same timeslot ...
                          Joiners.equal(Lesson::getTimeslot),
                          // ... in the same room ...
                          Joiners.equal(Lesson::getRoom),
                          // ... and the pair is unique (different id, no reverse pairs)
                          Joiners.lessThan(Lesson::getId))
                  // then penalize each pair with a hard weight.
                  .penalize("Room conflict", HardSoftScore.ONE_HARD);
      }
  
negative.code:     @Inject
      SolverManager<TimeTable, Long> solverManager;
      @Inject
      ScoreManager<TimeTable, HardSoftScore> scoreManager;
  
      // To try, open http://localhost:8080/timeTable
      @GET
  