anchor.diff:  import org.acme.optaplanner.domain.TimeTable;
   import org.acme.optaplanner.domain.Timeslot;
   import org.optaplanner.core.api.score.ScoreManager;
  +import org.optaplanner.core.api.score.buildin.hardsoft.HardSoftScore;
   import org.optaplanner.core.api.solver.SolverManager;
   import org.optaplanner.core.api.solver.SolverStatus;
   
  
positive.code: 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.valuerange.ValueRangeProvider;
  import org.optaplanner.core.api.score.buildin.hardsoft.HardSoftScore;
  
  
negative.code:                         // ... in the same timeslot ...
                          Joiners.equal(Lesson::getTimeslot),
                          // ... in the same room ...
                          Joiners.equal(Lesson::getRoom))
                  // then penalize each pair with a hard weight.
                  .penalize("Room conflict", HardSoftScore.ONE_HARD);
      }
  