## Uses of Class
org.cpsolver.exam.model.ExamPlacement

- Packages that use ExamPlacement
  Package | Description
  --- | ---
  org.cpsolver.exam | Examination Timetabling Solver.
  org.cpsolver.exam.criteria | Examination Timetabling: Criteria.
  org.cpsolver.exam.criteria.additional | Examination Timetabling: Additional (Experimental) Criteria.
  org.cpsolver.exam.heuristics | Examination Timetabling: Solution Heuristics.
  org.cpsolver.exam.model | Examination Timetabling: Model.
  org.cpsolver.exam.neighbours | Examination Timetabling: Various Neighbourhoods.
  org.cpsolver.exam.reports | Examination Timetabling: Reports.
  org.cpsolver.exam.split | This package contains an an experimental criterion that allows an exam to be split into two if it decreases the number of student conflicts.

- - ### Uses of ExamPlacement in org.cpsolver.exam

    Method parameters in org.cpsolver.exam with type arguments of type ExamPlacement
    Modifier and Type | Method and Description
    --- | ---
    `static void` | Test.`createReports(ExamModel model, Assignment<Exam,ExamPlacement> assignment, File outDir, String outName)` Generate exam reports

    Constructor parameters in org.cpsolver.exam with type arguments of type ExamPlacement
    Constructor and Description
    `ShutdownHook(Solver<Exam,ExamPlacement> solver)`

  - ### Uses of ExamPlacement in org.cpsolver.exam.criteria

    Methods in org.cpsolver.exam.criteria with parameters of type ExamPlacement
    Modifier and Type | Method and Description
    --- | ---
    `void` | ExamRotationPenalty.RotationContext.`assigned(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value)`
    `void` | RoomSplitDistancePenalty.RoomSplitContext.`assigned(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value)`
    `void` | RoomSplitPenalty.RoomSplitContext.`assigned(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value)`
    `double` | DistributionPenalty.`getPeriodValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value)` Period related distribution penalty, i.e., sum weights of violated distribution constraints
    `double` | ExamCriterion.`getPeriodValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value)` Return impact of this criterion on period assignment (if this criterion is based on period assignment).
    `double` | DistributionPenalty.`getRoomValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value)` Room related distribution penalty, i.e., sum weights of violated distribution constraints
    `double` | ExamCriterion.`getRoomValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value)` Return impact of this criterion on room assignment (if this criterion is based on room assignment).
    `double` | DistributionPenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | ExamRotationPenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | InstructorBackToBackConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | InstructorDirectConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | InstructorDistanceBackToBackConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | InstructorMoreThan2ADayConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | InstructorNotAvailableConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | LargeExamsPenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | PeriodIndexPenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | PeriodPenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | PeriodSizePenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | PerturbationPenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | RoomPenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | RoomPerturbationPenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | RoomSizePenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | RoomSplitDistancePenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | RoomSplitPenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | StudentBackToBackConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | StudentDirectConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | StudentDistanceBackToBackConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | StudentMoreThan2ADayConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | StudentNotAvailableConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `void` | ExamRotationPenalty.RotationContext.`unassigned(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value)`
    `void` | RoomSplitDistancePenalty.RoomSplitContext.`unassigned(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value)`
    `void` | RoomSplitPenalty.RoomSplitContext.`unassigned(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value)`

    Method parameters in org.cpsolver.exam.criteria with type arguments of type ExamPlacement
    Modifier and Type | Method and Description
    --- | ---
    `void` | ExamRotationPenalty.RotationContext.`assigned(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value)`
    `void` | RoomSplitDistancePenalty.RoomSplitContext.`assigned(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value)`
    `void` | RoomSplitPenalty.RoomSplitContext.`assigned(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value)`
    `double` | ExamRotationPenalty.`averagePeriod(Assignment<Exam,ExamPlacement> assignment)`
    `protected double[]` | DistributionPenalty.`computeBounds(Assignment<Exam,ExamPlacement> assignment)`
    `AbstractCriterion.ValueContext` | ExamRotationPenalty.`createAssignmentContext(Assignment<Exam,ExamPlacement> assignment)`
    `AbstractCriterion.ValueContext` | RoomSplitDistancePenalty.`createAssignmentContext(Assignment<Exam,ExamPlacement> assignment)`
    `AbstractCriterion.ValueContext` | RoomSplitPenalty.`createAssignmentContext(Assignment<Exam,ExamPlacement> assignment)`
    `double[]` | ExamCriterion.`getBounds(Assignment<Exam,ExamPlacement> assignment, Collection<Exam> exams)`
    `double[]` | LargeExamsPenalty.`getBounds(Assignment<Exam,ExamPlacement> assignment, Collection<Exam> variables)`
    `double[]` | PeriodPenalty.`getBounds(Assignment<Exam,ExamPlacement> assignment, Collection<Exam> variables)`
    `double[]` | PeriodSizePenalty.`getBounds(Assignment<Exam,ExamPlacement> assignment, Collection<Exam> variables)`
    `double[]` | RoomPenalty.`getBounds(Assignment<Exam,ExamPlacement> assignment, Collection<Exam> variables)`
    `void` | ExamCriterion.`getInfo(Assignment<Exam,ExamPlacement> assignment, Map<String,String> info)`
    `void` | ExamRotationPenalty.`getInfo(Assignment<Exam,ExamPlacement> assignment, Map<String,String> info)`
    `void` | InstructorDirectConflicts.`getInfo(Assignment<Exam,ExamPlacement> assignment, Map<String,String> info)`
    `void` | InstructorNotAvailableConflicts.`getInfo(Assignment<Exam,ExamPlacement> assignment, Map<String,String> info)`
    `void` | PeriodIndexPenalty.`getInfo(Assignment<Exam,ExamPlacement> assignment, Map<String,String> info)`
    `void` | PeriodSizePenalty.`getInfo(Assignment<Exam,ExamPlacement> assignment, Map<String,String> info)`
    `void` | RoomSizePenalty.`getInfo(Assignment<Exam,ExamPlacement> assignment, Map<String,String> info)`
    `void` | RoomSplitDistancePenalty.`getInfo(Assignment<Exam,ExamPlacement> assignment, Map<String,String> info)`
    `void` | RoomSplitPenalty.`getInfo(Assignment<Exam,ExamPlacement> assignment, Map<String,String> info)`
    `void` | StudentBackToBackConflicts.`getInfo(Assignment<Exam,ExamPlacement> assignment, Map<String,String> info)`
    `void` | StudentDirectConflicts.`getInfo(Assignment<Exam,ExamPlacement> assignment, Map<String,String> info)`
    `void` | StudentDistanceBackToBackConflicts.`getInfo(Assignment<Exam,ExamPlacement> assignment, Map<String,String> info)`
    `void` | StudentMoreThan2ADayConflicts.`getInfo(Assignment<Exam,ExamPlacement> assignment, Map<String,String> info)`
    `void` | StudentNotAvailableConflicts.`getInfo(Assignment<Exam,ExamPlacement> assignment, Map<String,String> info)`
    `double` | DistributionPenalty.`getPeriodValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value)` Period related distribution penalty, i.e., sum weights of violated distribution constraints
    `double` | ExamCriterion.`getPeriodValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value)` Return impact of this criterion on period assignment (if this criterion is based on period assignment).
    `double` | DistributionPenalty.`getRoomValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value)` Room related distribution penalty, i.e., sum weights of violated distribution constraints
    `double` | ExamCriterion.`getRoomValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value)` Return impact of this criterion on room assignment (if this criterion is based on room assignment).
    `double` | DistributionPenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, Collection<Exam> variables)`
    `double` | InstructorDirectConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, Collection<Exam> variables)`
    `double` | InstructorMoreThan2ADayConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, Collection<Exam> variables)`
    `double` | InstructorNotAvailableConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, Collection<Exam> exams)`
    `double` | StudentBackToBackConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, Collection<Exam> variables)`
    `double` | StudentDirectConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, Collection<Exam> variables)`
    `double` | StudentMoreThan2ADayConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, Collection<Exam> variables)`
    `double` | StudentNotAvailableConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, Collection<Exam> exams)`
    `double` | DistributionPenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | DistributionPenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | ExamRotationPenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | ExamRotationPenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | InstructorBackToBackConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | InstructorBackToBackConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | InstructorDirectConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | InstructorDirectConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | InstructorDistanceBackToBackConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | InstructorDistanceBackToBackConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | InstructorMoreThan2ADayConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | InstructorMoreThan2ADayConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | InstructorNotAvailableConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | InstructorNotAvailableConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | LargeExamsPenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | LargeExamsPenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | PeriodIndexPenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | PeriodIndexPenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | PeriodPenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | PeriodPenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | PeriodSizePenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | PeriodSizePenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | PerturbationPenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | PerturbationPenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | RoomPenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | RoomPenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | RoomPerturbationPenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | RoomPerturbationPenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | RoomSizePenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | RoomSizePenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | RoomSplitDistancePenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | RoomSplitDistancePenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | RoomSplitPenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | RoomSplitPenalty.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | StudentBackToBackConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | StudentBackToBackConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | StudentDirectConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | StudentDirectConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | StudentDistanceBackToBackConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | StudentDistanceBackToBackConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | StudentMoreThan2ADayConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | StudentMoreThan2ADayConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | StudentNotAvailableConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | StudentNotAvailableConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `void` | DistributionPenalty.`inc(Assignment<Exam,ExamPlacement> assignment, double value, ExamDistributionConstraint dc)`
    `boolean` | PeriodPenalty.`init(Solver<Exam,ExamPlacement> solver)`
    `boolean` | RoomPenalty.`init(Solver<Exam,ExamPlacement> solver)`
    `int` | ExamRotationPenalty.`nrAssignedExamsWithAvgPeriod(Assignment<Exam,ExamPlacement> assignment)`
    `int` | RoomSplitDistancePenalty.`nrRoomSplits(Assignment<Exam,ExamPlacement> assignment)`
    `void` | DistributionPenalty.`setModel(Model<Exam,ExamPlacement> model)`
    `void` | RoomSizePenalty.`setModel(Model<Exam,ExamPlacement> model)`
    `String` | DistributionPenalty.`toString(Assignment<Exam,ExamPlacement> assignment)`
    `String` | ExamRotationPenalty.`toString(Assignment<Exam,ExamPlacement> assignment)`
    `String` | InstructorBackToBackConflicts.`toString(Assignment<Exam,ExamPlacement> assignment)`
    `String` | InstructorDirectConflicts.`toString(Assignment<Exam,ExamPlacement> assignment)`
    `String` | InstructorDistanceBackToBackConflicts.`toString(Assignment<Exam,ExamPlacement> assignment)`
    `String` | InstructorMoreThan2ADayConflicts.`toString(Assignment<Exam,ExamPlacement> assignment)`
    `String` | InstructorNotAvailableConflicts.`toString(Assignment<Exam,ExamPlacement> assignment)`
    `String` | LargeExamsPenalty.`toString(Assignment<Exam,ExamPlacement> assignment)`
    `String` | PeriodIndexPenalty.`toString(Assignment<Exam,ExamPlacement> assignment)`
    `String` | PeriodPenalty.`toString(Assignment<Exam,ExamPlacement> assignment)`
    `String` | PeriodSizePenalty.`toString(Assignment<Exam,ExamPlacement> assignment)`
    `String` | PerturbationPenalty.`toString(Assignment<Exam,ExamPlacement> assignment)`
    `String` | RoomPenalty.`toString(Assignment<Exam,ExamPlacement> assignment)`
    `String` | RoomPerturbationPenalty.`toString(Assignment<Exam,ExamPlacement> assignment)`
    `String` | RoomSizePenalty.`toString(Assignment<Exam,ExamPlacement> assignment)`
    `String` | RoomSplitDistancePenalty.`toString(Assignment<Exam,ExamPlacement> assignment)`
    `String` | RoomSplitPenalty.`toString(Assignment<Exam,ExamPlacement> assignment)`
    `String` | StudentBackToBackConflicts.`toString(Assignment<Exam,ExamPlacement> assignment)`
    `String` | StudentDirectConflicts.`toString(Assignment<Exam,ExamPlacement> assignment)`
    `String` | StudentDistanceBackToBackConflicts.`toString(Assignment<Exam,ExamPlacement> assignment)`
    `String` | StudentMoreThan2ADayConflicts.`toString(Assignment<Exam,ExamPlacement> assignment)`
    `String` | StudentNotAvailableConflicts.`toString(Assignment<Exam,ExamPlacement> assignment)`
    `void` | ExamRotationPenalty.RotationContext.`unassigned(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value)`
    `void` | RoomSplitDistancePenalty.RoomSplitContext.`unassigned(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value)`
    `void` | RoomSplitPenalty.RoomSplitContext.`unassigned(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value)`

    Constructor parameters in org.cpsolver.exam.criteria with type arguments of type ExamPlacement
    Constructor and Description
    `RoomSplitContext(Assignment<Exam,ExamPlacement> assignment)`
    `RoomSplitContext(Assignment<Exam,ExamPlacement> assignment)`
    `RotationContext(Assignment<Exam,ExamPlacement> assignment)`

  - ### Uses of ExamPlacement in org.cpsolver.exam.criteria.additional

    Methods in org.cpsolver.exam.criteria.additional with parameters of type ExamPlacement
    Modifier and Type | Method and Description
    --- | ---
    `double` | DistributionViolation.`getPeriodValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value)`
    `double` | DistributionViolation.`getRoomValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value)`
    `double` | DistanceToStronglyPreferredRoom.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | DistributionViolation.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | PeriodViolation.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | RoomViolation.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | StudentMoreThan1ADayConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`

    Method parameters in org.cpsolver.exam.criteria.additional with type arguments of type ExamPlacement
    Modifier and Type | Method and Description
    --- | ---
    `protected double[]` | DistributionViolation.`computeBounds(Assignment<Exam,ExamPlacement> assignment)`
    `double[]` | DistanceToStronglyPreferredRoom.`getBounds(Assignment<Exam,ExamPlacement> assignment)`
    `double[]` | PeriodViolation.`getBounds(Assignment<Exam,ExamPlacement> assignment, Collection<Exam> variables)`
    `double[]` | RoomViolation.`getBounds(Assignment<Exam,ExamPlacement> assignment, Collection<Exam> variables)`
    `void` | DistanceToStronglyPreferredRoom.`getInfo(Assignment<Exam,ExamPlacement> assignment, Map<String,String> info)`
    `void` | StudentMoreThan1ADayConflicts.`getInfo(Assignment<Exam,ExamPlacement> assignment, Map<String,String> info)`
    `double` | DistributionViolation.`getPeriodValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value)`
    `double` | DistributionViolation.`getRoomValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value)`
    `double` | DistributionViolation.`getValue(Assignment<Exam,ExamPlacement> assignment, Collection<Exam> variables)`
    `double` | StudentMoreThan1ADayConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, Collection<Exam> variables)`
    `double` | DistanceToStronglyPreferredRoom.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | DistanceToStronglyPreferredRoom.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | DistributionViolation.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | DistributionViolation.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | PeriodViolation.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | PeriodViolation.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | RoomViolation.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | RoomViolation.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | StudentMoreThan1ADayConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | StudentMoreThan1ADayConflicts.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)`
    `String` | DistanceToStronglyPreferredRoom.`toString(Assignment<Exam,ExamPlacement> assignment)`
    `String` | DistributionViolation.`toString(Assignment<Exam,ExamPlacement> assignment)`
    `String` | PeriodViolation.`toString(Assignment<Exam,ExamPlacement> assignment)`
    `String` | RoomViolation.`toString(Assignment<Exam,ExamPlacement> assignment)`
    `String` | StudentMoreThan1ADayConflicts.`toString(Assignment<Exam,ExamPlacement> assignment)`

  - ### Uses of ExamPlacement in org.cpsolver.exam.heuristics

    Methods in org.cpsolver.exam.heuristics that return ExamPlacement
    Modifier and Type | Method and Description
    --- | ---
    `ExamPlacement` | ExamTabuSearch.`selectValue(Solution<Exam,ExamPlacement> solution, Exam exam)` Value selection

    Methods in org.cpsolver.exam.heuristics that return types with arguments of type ExamPlacement
    Modifier and Type | Method and Description
    --- | ---
    `Neighbour<Exam,ExamPlacement>` | ExamConstruction.`checkLocalOptimality(Assignment<Exam,ExamPlacement> assignment, ExamModel model)` Find a new assignment of one of the assigned exams that improves the time cost `getTimeCost(Assignment)` and for which there is a set of available rooms `Exam.findBestAvailableRooms(Assignment, ExamPeriodPlacement)`.
    `Neighbour<Exam,ExamPlacement>` | ExamGreatDeluge.`genMove(Solution<Exam,ExamPlacement> solution)` Deprecated. Generate neighbour -- select neighbourhood randomly, select neighbour
    `Neighbour<Exam,ExamPlacement>` | ExamSimulatedAnnealing.`genMove(Solution<Exam,ExamPlacement> solution)` Deprecated. Generate neighbour -- select neighbourhood randomly, select neighbour
    `Neighbour<Exam,ExamPlacement>` | ExamColoringConstruction.`selectNeighbour(Solution<Exam,ExamPlacement> solution)`
    `Neighbour<Exam,ExamPlacement>` | ExamConstruction.`selectNeighbour(Solution<Exam,ExamPlacement> solution)` Select a neighbour.
    `Neighbour<Exam,ExamPlacement>` | ExamGreatDeluge.`selectNeighbour(Solution<Exam,ExamPlacement> solution)` Deprecated. A neighbour is generated randomly untill an acceptable one is found.
    `Neighbour<Exam,ExamPlacement>` | ExamHillClimbing.`selectNeighbour(Solution<Exam,ExamPlacement> solution)` Deprecated. Select one of the given neighbourhoods randomly, select neighbour, return it if its value is below or equal to zero (continue with the next selection otherwise).
    `Neighbour<Exam,ExamPlacement>` | ExamNeighbourSelection.`selectNeighbour(Solution<Exam,ExamPlacement> solution)` Neighbour selection.
    `Neighbour<Exam,ExamPlacement>` | ExamSimulatedAnnealing.`selectNeighbour(Solution<Exam,ExamPlacement> solution)` Deprecated. Select neighbour -- generate a move `ExamSimulatedAnnealing.genMove(Solution)` until an acceptable neighbour is found `ExamSimulatedAnnealing.accept(Solution, Neighbour)`, keep increasing iteration `ExamSimulatedAnnealing.Context.incIter(Solution)`.
    `Neighbour<Exam,ExamPlacement>` | ExamTabuSearch.`selectNeighbour(Solution<Exam,ExamPlacement> solution)` Neighbor selection

    Method parameters in org.cpsolver.exam.heuristics with type arguments of type ExamPlacement
    Modifier and Type | Method and Description
    --- | ---
    `boolean` | ExamGreatDeluge.`accept(Assignment<Exam,ExamPlacement> assignment, LazyNeighbour<Exam,ExamPlacement> neighbour, double value)` Deprecated. Accept lazy neighbour
    `boolean` | ExamGreatDeluge.`accept(Assignment<Exam,ExamPlacement> assignment, LazyNeighbour<Exam,ExamPlacement> neighbour, double value)` Deprecated. Accept lazy neighbour
    `boolean` | ExamHillClimbing.`accept(Assignment<Exam,ExamPlacement> assignment, LazyNeighbour<Exam,ExamPlacement> neighbour, double value)` Deprecated. Accept lazy neighbour
    `boolean` | ExamHillClimbing.`accept(Assignment<Exam,ExamPlacement> assignment, LazyNeighbour<Exam,ExamPlacement> neighbour, double value)` Deprecated. Accept lazy neighbour
    `boolean` | ExamSimulatedAnnealing.`accept(Assignment<Exam,ExamPlacement> assignment, LazyNeighbour<Exam,ExamPlacement> neighbour, double value)` Deprecated. Accept lazy neighbour
    `boolean` | ExamSimulatedAnnealing.`accept(Assignment<Exam,ExamPlacement> assignment, LazyNeighbour<Exam,ExamPlacement> neighbour, double value)` Deprecated. Accept lazy neighbour
    `protected boolean` | ExamGreatDeluge.`accept(Solution<Exam,ExamPlacement> solution, Neighbour<Exam,ExamPlacement> neighbour)` Deprecated. Accept neighbour
    `protected boolean` | ExamGreatDeluge.`accept(Solution<Exam,ExamPlacement> solution, Neighbour<Exam,ExamPlacement> neighbour)` Deprecated. Accept neighbour
    `protected boolean` | ExamSimulatedAnnealing.`accept(Solution<Exam,ExamPlacement> solution, Neighbour<Exam,ExamPlacement> neighbour)` Deprecated. True if the given neighboir is to be be accepted
    `protected boolean` | ExamSimulatedAnnealing.`accept(Solution<Exam,ExamPlacement> solution, Neighbour<Exam,ExamPlacement> neighbour)` Deprecated. True if the given neighboir is to be be accepted
    `void` | ExamGreatDeluge.`bestCleared(Solution<Exam,ExamPlacement> solution)` Deprecated.
    `void` | ExamHillClimbing.`bestCleared(Solution<Exam,ExamPlacement> solution)` Deprecated.
    `void` | ExamSimulatedAnnealing.`bestCleared(Solution<Exam,ExamPlacement> solution)` Deprecated.
    `void` | ExamGreatDeluge.`bestRestored(Solution<Exam,ExamPlacement> solution)` Deprecated.
    `void` | ExamHillClimbing.`bestRestored(Solution<Exam,ExamPlacement> solution)` Deprecated.
    `void` | ExamSimulatedAnnealing.`bestRestored(Solution<Exam,ExamPlacement> solution)` Deprecated.
    `protected void` | ExamGreatDeluge.Context.`bestSaved(Model<Exam,ExamPlacement> model)`
    `protected void` | ExamHillClimbing.Context.`bestSaved(Model<Exam,ExamPlacement> model)`
    `void` | ExamGreatDeluge.`bestSaved(Solution<Exam,ExamPlacement> solution)` Deprecated. Update last improving iteration count
    `void` | ExamHillClimbing.`bestSaved(Solution<Exam,ExamPlacement> solution)` Deprecated. Memorize the iteration when the last best solution was found.
    `void` | ExamSimulatedAnnealing.`bestSaved(Solution<Exam,ExamPlacement> solution)` Deprecated.
    `protected void` | ExamSimulatedAnnealing.Context.`bestSaved(Solution<Exam,ExamPlacement> solution)` Memorize the iteration when the last best solution was found.
    `boolean` | ExamNeighbourSelection.`canContinue(Solution<Exam,ExamPlacement> currentSolution)` Termination condition (i.e., has final phase finished)
    `Neighbour<Exam,ExamPlacement>` | ExamConstruction.`checkLocalOptimality(Assignment<Exam,ExamPlacement> assignment, ExamModel model)` Find a new assignment of one of the assigned exams that improves the time cost `getTimeCost(Assignment)` and for which there is a set of available rooms `Exam.findBestAvailableRooms(Assignment, ExamPeriodPlacement)`.
    `protected void` | ExamSimulatedAnnealing.Context.`cool(Solution<Exam,ExamPlacement> solution)` Cool temperature
    `ExamConstruction.Context` | ExamConstruction.`createAssignmentContext(Assignment<Exam,ExamPlacement> assignment)`
    `ExamGreatDeluge.Context` | ExamGreatDeluge.`createAssignmentContext(Assignment<Exam,ExamPlacement> assignment)` Deprecated.
    `ExamHillClimbing.Context` | ExamHillClimbing.`createAssignmentContext(Assignment<Exam,ExamPlacement> assignment)` Deprecated.
    `ExamNeighbourSelection.Context` | ExamNeighbourSelection.`createAssignmentContext(Assignment<Exam,ExamPlacement> assignment)`
    `ExamSimulatedAnnealing.Context` | ExamSimulatedAnnealing.`createAssignmentContext(Assignment<Exam,ExamPlacement> assignment)` Deprecated.
    `ExamTabuSearch.TabuList` | ExamTabuSearch.`createAssignmentContext(Assignment<Exam,ExamPlacement> assignment)`
    `Set<ExamRoomPlacement>` | ExamColoringConstruction.`findRooms(Assignment<Exam,ExamPlacement> assignment, Exam exam, ExamPeriodPlacement period)`
    `Neighbour<Exam,ExamPlacement>` | ExamGreatDeluge.`genMove(Solution<Exam,ExamPlacement> solution)` Deprecated. Generate neighbour -- select neighbourhood randomly, select neighbour
    `Neighbour<Exam,ExamPlacement>` | ExamSimulatedAnnealing.`genMove(Solution<Exam,ExamPlacement> solution)` Deprecated. Generate neighbour -- select neighbourhood randomly, select neighbour
    `void` | ExamGreatDeluge.`getInfo(Solution<Exam,ExamPlacement> solution, Map<String,String> info)` Deprecated.
    `void` | ExamHillClimbing.`getInfo(Solution<Exam,ExamPlacement> solution, Map<String,String> info)` Deprecated.
    `void` | ExamSimulatedAnnealing.`getInfo(Solution<Exam,ExamPlacement> solution, Map<String,String> info)` Deprecated.
    `void` | ExamGreatDeluge.`getInfo(Solution<Exam,ExamPlacement> solution, Map<String,String> info, Collection<Exam> variables)` Deprecated.
    `void` | ExamHillClimbing.`getInfo(Solution<Exam,ExamPlacement> solution, Map<String,String> info, Collection<Exam> variables)` Deprecated.
    `void` | ExamSimulatedAnnealing.`getInfo(Solution<Exam,ExamPlacement> solution, Map<String,String> info, Collection<Exam> variables)` Deprecated.
    `protected void` | ExamGreatDeluge.`incIter(Solution<Exam,ExamPlacement> solution)` Deprecated. Increment iteration count, update bound
    `protected void` | ExamGreatDeluge.Context.`incIter(Solution<Exam,ExamPlacement> solution)`
    `protected boolean` | ExamHillClimbing.Context.`incIter(Solution<Exam,ExamPlacement> solution)`
    `protected void` | ExamSimulatedAnnealing.Context.`incIter(Solution<Exam,ExamPlacement> solution)` Increment iteration counter, cool/reheat/restoreBest if necessary
    `protected void` | ExamGreatDeluge.`info(Solution<Exam,ExamPlacement> solution)` Deprecated. Print some information
    `protected void` | ExamGreatDeluge.Context.`info(Solution<Exam,ExamPlacement> solution)`
    `void` | ExamColoringConstruction.`init(Solver<Exam,ExamPlacement> solver)`
    `void` | ExamConstruction.`init(Solver<Exam,ExamPlacement> solver)` Initialization
    `void` | ExamGreatDeluge.`init(Solver<Exam,ExamPlacement> solver)` Deprecated. Initialization
    `void` | ExamHillClimbing.`init(Solver<Exam,ExamPlacement> solver)` Deprecated. Initialization
    `void` | ExamNeighbourSelection.`init(Solver<Exam,ExamPlacement> solver)` Initialization
    `void` | ExamSimulatedAnnealing.`init(Solver<Exam,ExamPlacement> solver)` Deprecated. Initialization
    `void` | ExamTabuSearch.`init(Solver<Exam,ExamPlacement> solver)` Initialization
    `void` | ExamUnassignedVariableSelection.`init(Solver<Exam,ExamPlacement> solver)` Initialization
    `protected void` | ExamSimulatedAnnealing.Context.`reheat(Solution<Exam,ExamPlacement> solution)` Reheat temperature
    `Neighbour<Exam,ExamPlacement>` | ExamColoringConstruction.`selectNeighbour(Solution<Exam,ExamPlacement> solution)`
    `Neighbour<Exam,ExamPlacement>` | ExamConstruction.`selectNeighbour(Solution<Exam,ExamPlacement> solution)` Select a neighbour.
    `Neighbour<Exam,ExamPlacement>` | ExamGreatDeluge.`selectNeighbour(Solution<Exam,ExamPlacement> solution)` Deprecated. A neighbour is generated randomly untill an acceptable one is found.
    `Neighbour<Exam,ExamPlacement>` | ExamHillClimbing.`selectNeighbour(Solution<Exam,ExamPlacement> solution)` Deprecated. Select one of the given neighbourhoods randomly, select neighbour, return it if its value is below or equal to zero (continue with the next selection otherwise).
    `Neighbour<Exam,ExamPlacement>` | ExamNeighbourSelection.`selectNeighbour(Solution<Exam,ExamPlacement> solution)` Neighbour selection.
    `Neighbour<Exam,ExamPlacement>` | ExamSimulatedAnnealing.`selectNeighbour(Solution<Exam,ExamPlacement> solution)` Deprecated. Select neighbour -- generate a move `ExamSimulatedAnnealing.genMove(Solution)` until an acceptable neighbour is found `ExamSimulatedAnnealing.accept(Solution, Neighbour)`, keep increasing iteration `ExamSimulatedAnnealing.Context.incIter(Solution)`.
    `Neighbour<Exam,ExamPlacement>` | ExamTabuSearch.`selectNeighbour(Solution<Exam,ExamPlacement> solution)` Neighbor selection
    `ExamPlacement` | ExamTabuSearch.`selectValue(Solution<Exam,ExamPlacement> solution, Exam exam)` Value selection
    `Exam` | ExamUnassignedVariableSelection.`selectVariable(Solution<Exam,ExamPlacement> solution)` Variable selection
    `void` | ExamGreatDeluge.`solutionUpdated(Solution<Exam,ExamPlacement> solution)` Deprecated.
    `void` | ExamHillClimbing.`solutionUpdated(Solution<Exam,ExamPlacement> solution)` Deprecated.
    `void` | ExamSimulatedAnnealing.`solutionUpdated(Solution<Exam,ExamPlacement> solution)` Deprecated.

  - ### Uses of ExamPlacement in org.cpsolver.exam.model

    Methods in org.cpsolver.exam.model that return types with arguments of type ExamPlacement
    Modifier and Type | Method and Description
    --- | ---
    `List<ExamPlacement>` | ExamRoom.`getPlacements(Assignment<Exam,ExamPlacement> assignment, ExamPeriod period)` Exams placed at the given period
    `List<ExamPlacement>` | ExamRoom.ExamRoomContext.`getPlacements(int period)`
    `List<ExamPlacement>` | Exam.`values(Assignment<Exam,ExamPlacement> assignment)` Values (assignment of a period and a set of rooms)

    Methods in org.cpsolver.exam.model with parameters of type ExamPlacement
    Modifier and Type | Method and Description
    --- | ---
    `void` | ExamContext.`assigned(Assignment<Exam,ExamPlacement> assignment, ExamPlacement placement)`
    `void` | ExamDistributionConstraint.Context.`assigned(Assignment<Exam,ExamPlacement> assignment, ExamPlacement placement)`
    `void` | ExamRoom.ExamRoomContext.`assigned(Assignment<Exam,ExamPlacement> assignment, ExamPlacement placement)`
    `void` | ExamRoom.`assigned(Assignment<Exam,ExamPlacement> assignment, long iteration, ExamPlacement p)` An exam was assigned, update room assignment table
    `boolean` | ExamDistributionConstraint.`check(ExamPlacement first, ExamPlacement second)` Deprecated. use `ExamDistributionConstraint.DistributionType.isSatisfied(ExamPlacement, ExamPlacement)`
    `void` | ExamDistributionConstraint.`computeConflicts(Assignment<Exam,ExamPlacement> assignment, ExamPlacement givenPlacement, Set<ExamPlacement> conflicts)` Compute conflicts -- there is a conflict if the other variable is assigned and `ExamDistributionConstraint.check(ExamPlacement, ExamPlacement)` is false
    `void` | ExamInstructor.`computeConflicts(Assignment<Exam,ExamPlacement> assignment, ExamPlacement p, Set<ExamPlacement> conflicts)` Compute conflicts between the given assignment of an exam and all the current assignments (of this instructor).
    `void` | ExamRoom.`computeConflicts(Assignment<Exam,ExamPlacement> assignment, ExamPlacement p, Set<ExamPlacement> conflicts)` Compute conflicts between the given assignment of an exam and all the current assignments (of this room)
    `void` | ExamStudent.`computeConflicts(Assignment<Exam,ExamPlacement> assignment, ExamPlacement p, Set<ExamPlacement> conflicts)` Compute conflicts between the given assignment of an exam and all the current assignments (of this student).
    `void` | ExamRoomSharing.`computeConflicts(ExamPlacement exam, Collection<ExamPlacement> other, ExamRoom room, Set<ExamPlacement> conflicts)` Compute conflicting placement for the case when a given examination needs to be placed in the same room at the same period as the other examinations
    `int` | ExamDistributionConstraint.`countViolations(Assignment<Exam,ExamPlacement> assignment, ExamPlacement p)` Return number of violated pairs for a soft constraint and the given placement
    `double` | ExamPlacement.`getDistanceInMeters(ExamPlacement other)` Distance between two placements, i.e., maximal distance between a room of this placement and a room of the given placement.
    `boolean` | ExamDistributionConstraint.`inConflict(Assignment<Exam,ExamPlacement> assignment, ExamPlacement givenPlacement)` Check for conflict -- there is a conflict if the other variable is assigned and `ExamDistributionConstraint.check(ExamPlacement, ExamPlacement)` is false
    `boolean` | ExamInstructor.`inConflict(Assignment<Exam,ExamPlacement> assignment, ExamPlacement p)` Check whether there is a conflict between the given assignment of an exam and all the current assignments (of this instructor).
    `boolean` | ExamRoom.`inConflict(Assignment<Exam,ExamPlacement> assignment, ExamPlacement p)` Checks whether there is a conflict between the given assignment of an exam and all the current assignments (of this room)
    `boolean` | ExamStudent.`inConflict(Assignment<Exam,ExamPlacement> assignment, ExamPlacement p)` Check whether there is a conflict between the given assignment of an exam and all the current assignments (of this student).
    `boolean` | ExamRoomSharing.`inConflict(ExamPlacement exam, Collection<ExamPlacement> other, ExamRoom room)` True if given examination can not be placed in the same room at the same period as the other examinations
    `boolean` | ExamDistributionConstraint.`isConsistent(ExamPlacement first, ExamPlacement second)` Consistency check -- `ExamDistributionConstraint.check(ExamPlacement, ExamPlacement)` is called
    `boolean` | ExamInstructor.`isConsistent(ExamPlacement p1, ExamPlacement p2)` True if the given exams can conflict (see `ExamInstructor.isAllowDirectConflicts()`), or if they are placed at different periods.
    `boolean` | ExamRoom.`isConsistent(ExamPlacement p1, ExamPlacement p2)` False if the given two assignments are using this room at the same period
    `boolean` | ExamStudent.`isConsistent(ExamPlacement p1, ExamPlacement p2)` True if the given exams can conflict (see `ExamStudent.canConflict(Exam, Exam)`), or if they are placed at different periods.
    `boolean` | ExamDistributionConstraint.`isSatisfied(Assignment<Exam,ExamPlacement> assignment, ExamPlacement p)` Return true if this is hard constraint or this is a soft constraint without any violation
    `boolean` | ExamDistributionConstraint.DistributionType.`isSatisfied(ExamPlacement first, ExamPlacement second)`
    `boolean` | ExamDistributionConstraint.PairCheck.`isSatisfied(ExamPlacement first, ExamPlacement second)`
    `boolean` | ExamDistributionConstraint.DistributionType.`isSatisfied(ExamPlacement first, ExamRoomPlacement second)`
    `boolean` | ExamDistributionConstraint.RoomCheck.`isSatisfied(ExamPlacement first, ExamRoomPlacement second)`
    `void` | ExamContext.`unassigned(Assignment<Exam,ExamPlacement> assignment, ExamPlacement placement)`
    `void` | ExamDistributionConstraint.Context.`unassigned(Assignment<Exam,ExamPlacement> assignment, ExamPlacement placement)`
    `void` | ExamRoom.ExamRoomContext.`unassigned(Assignment<Exam,ExamPlacement> assignment, ExamPlacement placement)`
    `void` | ExamRoom.`unassigned(Assignment<Exam,ExamPlacement> assignment, long iteration, ExamPlacement p)` An exam was unassigned, update room assignment table
    `void` | Exam.`variableAssigned(Assignment<Exam,ExamPlacement> assignment, long iteration, ExamPlacement placement)`

    Method parameters in org.cpsolver.exam.model with type arguments of type ExamPlacement
    Modifier and Type | Method and Description
    --- | ---
    `void` | Exam.`addContstraint(Constraint<Exam,ExamPlacement> constraint)` Adds a constraint.
    `void` | Exam.`allowAllStudentConflicts(Assignment<Exam,ExamPlacement> assignment, ExamPeriod period)` Allow all direct student conflict for the given period (see `ExamStudent.canConflict(Exam, Exam)`).
    `void` | ExamContext.`assigned(Assignment<Exam,ExamPlacement> assignment, ExamPlacement placement)`
    `void` | ExamDistributionConstraint.Context.`assigned(Assignment<Exam,ExamPlacement> assignment, ExamPlacement placement)`
    `void` | ExamRoom.ExamRoomContext.`assigned(Assignment<Exam,ExamPlacement> assignment, ExamPlacement placement)`
    `void` | ExamRoom.`assigned(Assignment<Exam,ExamPlacement> assignment, long iteration, ExamPlacement p)` An exam was assigned, update room assignment table
    `boolean` | Exam.`checkDistributionConstraints(Assignment<Exam,ExamPlacement> assignment, ExamPeriodPlacement period)` Check all distribution constraint that this exam is involved in
    `boolean` | Exam.`checkDistributionConstraints(Assignment<Exam,ExamPlacement> assignment, ExamRoomPlacement room)` Check all distribution constraint that this exam is involved in
    `int` | ExamRoom.`compareTo(Constraint<Exam,ExamPlacement> o)` Compare two rooms (by unique id)
    `int` | ExamStudent.`compareTo(Constraint<Exam,ExamPlacement> o)` Compare two students (by student ids)
    `void` | ExamRoom.`computeConflicts(Assignment<Exam,ExamPlacement> assignment, Exam exam, ExamPeriod period, Set<ExamPlacement> conflicts)` Compute conflicts if the given exam is assigned in this room and the given period
    `void` | ExamRoom.`computeConflicts(Assignment<Exam,ExamPlacement> assignment, Exam exam, ExamPeriod period, Set<ExamPlacement> conflicts)` Compute conflicts if the given exam is assigned in this room and the given period
    `void` | ExamDistributionConstraint.`computeConflicts(Assignment<Exam,ExamPlacement> assignment, ExamPlacement givenPlacement, Set<ExamPlacement> conflicts)` Compute conflicts -- there is a conflict if the other variable is assigned and `ExamDistributionConstraint.check(ExamPlacement, ExamPlacement)` is false
    `void` | ExamDistributionConstraint.`computeConflicts(Assignment<Exam,ExamPlacement> assignment, ExamPlacement givenPlacement, Set<ExamPlacement> conflicts)` Compute conflicts -- there is a conflict if the other variable is assigned and `ExamDistributionConstraint.check(ExamPlacement, ExamPlacement)` is false
    `void` | ExamInstructor.`computeConflicts(Assignment<Exam,ExamPlacement> assignment, ExamPlacement p, Set<ExamPlacement> conflicts)` Compute conflicts between the given assignment of an exam and all the current assignments (of this instructor).
    `void` | ExamInstructor.`computeConflicts(Assignment<Exam,ExamPlacement> assignment, ExamPlacement p, Set<ExamPlacement> conflicts)` Compute conflicts between the given assignment of an exam and all the current assignments (of this instructor).
    `void` | ExamRoom.`computeConflicts(Assignment<Exam,ExamPlacement> assignment, ExamPlacement p, Set<ExamPlacement> conflicts)` Compute conflicts between the given assignment of an exam and all the current assignments (of this room)
    `void` | ExamRoom.`computeConflicts(Assignment<Exam,ExamPlacement> assignment, ExamPlacement p, Set<ExamPlacement> conflicts)` Compute conflicts between the given assignment of an exam and all the current assignments (of this room)
    `void` | ExamStudent.`computeConflicts(Assignment<Exam,ExamPlacement> assignment, ExamPlacement p, Set<ExamPlacement> conflicts)` Compute conflicts between the given assignment of an exam and all the current assignments (of this student).
    `void` | ExamStudent.`computeConflicts(Assignment<Exam,ExamPlacement> assignment, ExamPlacement p, Set<ExamPlacement> conflicts)` Compute conflicts between the given assignment of an exam and all the current assignments (of this student).
    `void` | ExamRoomSharing.`computeConflicts(Exam exam, Collection<ExamPlacement> other, ExamRoom room, Set<ExamPlacement> conflicts)` Compute conflicting placement for the case when a given examination needs to be placed in the same room at the same period as the other examinations
    `void` | ExamRoomSharing.`computeConflicts(Exam exam, Collection<ExamPlacement> other, ExamRoom room, Set<ExamPlacement> conflicts)` Compute conflicting placement for the case when a given examination needs to be placed in the same room at the same period as the other examinations
    `void` | ExamRoomSharing.`computeConflicts(ExamPlacement exam, Collection<ExamPlacement> other, ExamRoom room, Set<ExamPlacement> conflicts)` Compute conflicting placement for the case when a given examination needs to be placed in the same room at the same period as the other examinations
    `void` | ExamRoomSharing.`computeConflicts(ExamPlacement exam, Collection<ExamPlacement> other, ExamRoom room, Set<ExamPlacement> conflicts)` Compute conflicting placement for the case when a given examination needs to be placed in the same room at the same period as the other examinations
    `int` | Exam.`countInstructorConflicts(Assignment<Exam,ExamPlacement> assignment, ExamPeriodPlacement period)` Number of instructor of this exam (that does not have direct conflicts allowed, see `ExamInstructor.canConflict(Exam, Exam)`) that attend some other exam in the given period.
    `int` | Exam.`countStudentConflicts(Assignment<Exam,ExamPlacement> assignment, ExamPeriodPlacement period)` Number of students of this exam (that does not have direct conflicts allowed, see `ExamStudent.canConflict(Exam, Exam)`) that attend some other exam in the given period.
    `int` | ExamDistributionConstraint.`countViolations(Assignment<Exam,ExamPlacement> assignment)` Return number of all violated pairs for a soft constraint
    `int` | ExamDistributionConstraint.`countViolations(Assignment<Exam,ExamPlacement> assignment, ExamPlacement p)` Return number of violated pairs for a soft constraint and the given placement
    `ExamDistributionConstraint.Context` | ExamDistributionConstraint.`createAssignmentContext(Assignment<Exam,ExamPlacement> assignment)`
    `ExamContext` | ExamModel.`createAssignmentContext(Assignment<Exam,ExamPlacement> assignment)`
    `ExamRoom.ExamRoomContext` | ExamRoom.`createAssignmentContext(Assignment<Exam,ExamPlacement> assignment)`
    `Set<ExamRoomPlacement>` | Exam.`findBestAvailableRooms(Assignment<Exam,ExamPlacement> assignment, ExamPeriodPlacement period)` Find best available rooms for the exam in the given period.
    `Set<ExamRoomPlacement>` | Exam.`findRoomsRandom(Assignment<Exam,ExamPlacement> assignment, ExamPeriodPlacement period)` Randomly find a set of available rooms for the exam in the given period.
    `Set<ExamRoomPlacement>` | Exam.`findRoomsRandom(Assignment<Exam,ExamPlacement> assignment, ExamPeriodPlacement period, boolean checkConflicts)` Randomly find a set of available rooms for the exam in the given period.
    `int` | Exam.`getDistributionConstraintPenalty(Assignment<Exam,ExamPlacement> assignment, ExamRoomPlacement room)` Check all soft distribution constraint that this exam is involved in
    `Set<Exam>` | ExamInstructor.`getExams(Assignment<Exam,ExamPlacement> assignment, ExamPeriod period)` Exam(s) enrolled by the instructor that are scheduled in the given period
    `Set<Exam>` | ExamStudent.`getExams(Assignment<Exam,ExamPlacement> assignment, ExamPeriod period)` Exam(s) enrolled by the student that are scheduled in the given period
    `Set<Exam>` | ExamInstructor.`getExamsADay(Assignment<Exam,ExamPlacement> assignment, ExamPeriod period)` Exam(s) enrolled by the instructor that are scheduled in the given day
    `Set<Exam>` | ExamStudent.`getExamsADay(Assignment<Exam,ExamPlacement> assignment, ExamPeriod period)` Exam(s) enrolled by the student that are scheduled in the given day
    `Set<Exam>` | ExamInstructor.`getExamsADay(Assignment<Exam,ExamPlacement> assignment, int day)` Exam(s) enrolled by the instructor that are scheduled in the given day
    `Set<Exam>` | ExamStudent.`getExamsADay(Assignment<Exam,ExamPlacement> assignment, int day)` Exam(s) enrolled by the student that are scheduled in the given day
    `Map<String,String>` | ExamModel.`getExtendedInfo(Assignment<Exam,ExamPlacement> assignment)` Extended info table
    `Map<ExamInstructor,Set<Exam>>` | ExamModel.`getInstructorsOfDay(Assignment<Exam,ExamPlacement> assignment, ExamPeriod period)`
    `Map<ExamInstructor,Set<Exam>>` | ExamModel.`getInstructorsOfDay(Assignment<Exam,ExamPlacement> assignment, int day)`
    `Map<ExamInstructor,Set<Exam>>` | ExamModel.`getInstructorsOfPeriod(Assignment<Exam,ExamPlacement> assignment, ExamPeriod period)`
    `List<ExamPlacement>` | ExamRoom.`getPlacements(Assignment<Exam,ExamPlacement> assignment, ExamPeriod period)` Exams placed at the given period
    `double` | ExamPlacement.`getRoomCost(Assignment<Exam,ExamPlacement> assignment)` Overall cost of using this set or rooms.
    `HashSet<Exam>` | Exam.`getStudentConflicts(Assignment<Exam,ExamPlacement> assignment, ExamPeriod period)` List of exams that are assigned to the given period and share one or more students with this exam (that does not have direct conflicts allowed, see `ExamStudent.canConflict(Exam, Exam)`).
    `Map<ExamStudent,Set<Exam>>` | ExamModel.`getStudentsOfDay(Assignment<Exam,ExamPlacement> assignment, ExamPeriod period)`
    `Map<ExamStudent,Set<Exam>>` | ExamModel.`getStudentsOfDay(Assignment<Exam,ExamPlacement> assignment, int day)`
    `Map<ExamStudent,Set<Exam>>` | ExamModel.`getStudentsOfPeriod(Assignment<Exam,ExamPlacement> assignment, ExamPeriod period)`
    `double` | ExamPlacement.`getTimeCost(Assignment<Exam,ExamPlacement> assignment)` Overall cost of using this period.
    `double[]` | ExamModel.`getTotalMultiValue(Assignment<Exam,ExamPlacement> assignment)` Return weighted individual objective criteria.
    `double` | ExamModel.`getTotalValue(Assignment<Exam,ExamPlacement> assignment)` Objective function.
    `boolean` | Exam.`hasStudentConflictWithPreAssigned(Assignment<Exam,ExamPlacement> assignment, ExamPeriod period)` True, if there is a student of this exam (that does not have direct conflicts allowed, see `ExamStudent.canConflict(Exam, Exam)`) that attends some other exam in the given period.
    `boolean` | ExamRoom.`inConflict(Assignment<Exam,ExamPlacement> assignment, Exam exam, ExamPeriod period)` Check for conflicts if the given exam is assigned in this room and the given period
    `boolean` | ExamDistributionConstraint.`inConflict(Assignment<Exam,ExamPlacement> assignment, ExamPlacement givenPlacement)` Check for conflict -- there is a conflict if the other variable is assigned and `ExamDistributionConstraint.check(ExamPlacement, ExamPlacement)` is false
    `boolean` | ExamInstructor.`inConflict(Assignment<Exam,ExamPlacement> assignment, ExamPlacement p)` Check whether there is a conflict between the given assignment of an exam and all the current assignments (of this instructor).
    `boolean` | ExamRoom.`inConflict(Assignment<Exam,ExamPlacement> assignment, ExamPlacement p)` Checks whether there is a conflict between the given assignment of an exam and all the current assignments (of this room)
    `boolean` | ExamStudent.`inConflict(Assignment<Exam,ExamPlacement> assignment, ExamPlacement p)` Check whether there is a conflict between the given assignment of an exam and all the current assignments (of this student).
    `boolean` | ExamRoomSharing.`inConflict(Exam exam, Collection<ExamPlacement> other, ExamRoom room)` True if given examination can not be placed in the same room at the same period as the other examinations
    `boolean` | ExamRoomSharing.`inConflict(ExamPlacement exam, Collection<ExamPlacement> other, ExamRoom room)` True if given examination can not be placed in the same room at the same period as the other examinations
    `boolean` | ExamDistributionConstraint.`isSatisfied(Assignment<Exam,ExamPlacement> assignment)` Return true if this is hard constraint or this is a soft constraint without any violation
    `boolean` | ExamDistributionConstraint.`isSatisfied(Assignment<Exam,ExamPlacement> assignment, ExamPlacement p)` Return true if this is hard constraint or this is a soft constraint without any violation
    `boolean` | ExamModel.`load(Document document, Assignment<Exam,ExamPlacement> assignment)` Load model (including its solution) from XML.
    `boolean` | ExamModel.`load(Document document, Assignment<Exam,ExamPlacement> assignment, Callback saveBest)` Load model (including its solution) from XML.
    `void` | Exam.`removeContstraint(Constraint<Exam,ExamPlacement> constraint)` Removes a constraint.
    `Document` | ExamModel.`save(Assignment<Exam,ExamPlacement> assignment)` Save model (including its solution) into XML.
    `double` | ExamPlacement.`toDouble(Assignment<Exam,ExamPlacement> assignment)` Overall cost of using this placement.
    `String` | ExamModel.`toString(Assignment<Exam,ExamPlacement> assignment)` String representation -- returns a list of values of objective criteria
    `String` | ExamPlacement.`toString(Assignment<Exam,ExamPlacement> assignment)` String representation -- returns a list of assignment costs
    `void` | ExamContext.`unassigned(Assignment<Exam,ExamPlacement> assignment, ExamPlacement placement)`
    `void` | ExamDistributionConstraint.Context.`unassigned(Assignment<Exam,ExamPlacement> assignment, ExamPlacement placement)`
    `void` | ExamRoom.ExamRoomContext.`unassigned(Assignment<Exam,ExamPlacement> assignment, ExamPlacement placement)`
    `void` | ExamRoom.`unassigned(Assignment<Exam,ExamPlacement> assignment, long iteration, ExamPlacement p)` An exam was unassigned, update room assignment table
    `protected void` | ExamDistributionConstraint.Context.`updateCriterion(Assignment<Exam,ExamPlacement> assignment)`
    `List<ExamPlacement>` | Exam.`values(Assignment<Exam,ExamPlacement> assignment)` Values (assignment of a period and a set of rooms)
    `void` | Exam.`variableAssigned(Assignment<Exam,ExamPlacement> assignment, long iteration, ExamPlacement placement)`

    Constructor parameters in org.cpsolver.exam.model with type arguments of type ExamPlacement
    Constructor and Description
    `Context(Assignment<Exam,ExamPlacement> assignment)`
    `ExamContext(ExamModel model, Assignment<Exam,ExamPlacement> assignment)`
    `ExamRoomContext(Assignment<Exam,ExamPlacement> assignment)`
    `ExamRoomSharing(Model<Exam,ExamPlacement> model, DataProperties config)`
    `PredefinedExamRoomSharing(Model<Exam,ExamPlacement> model, DataProperties config)`
    `SimpleExamRoomSharing(Model<Exam,ExamPlacement> model, DataProperties config)`

  - ### Uses of ExamPlacement in org.cpsolver.exam.neighbours

    Methods in org.cpsolver.exam.neighbours that return types with arguments of type ExamPlacement
    Modifier and Type | Method and Description
    --- | ---
    `Map<Exam,ExamPlacement>` | ExamRoomSwapNeighbour.`assignments()`
    `Neighbour<Exam,ExamPlacement>` | ExamPeriodSwapMove.`selectNeighbour(Solution<Exam,ExamPlacement> solution)` Select an exam randomly, select an available period randomly (if it is not assigned), use rooms if possible, select rooms using `Exam.findBestAvailableRooms(Assignment, ExamPeriodPlacement)` if not (exam is unassigned, a room is not available or used).
    `Neighbour<Exam,ExamPlacement>` | ExamRandomMove.`selectNeighbour(Solution<Exam,ExamPlacement> solution)` Select an exam randomly, select an available period randomly (from `Exam.getPeriodPlacements()`), select rooms using `Exam.findBestAvailableRooms(Assignment, ExamPeriodPlacement)`.
    `Neighbour<Exam,ExamPlacement>` | ExamRoomMove.`selectNeighbour(Solution<Exam,ExamPlacement> solution)` Select an exam randomly, select an available period randomly (if it is not assigned, from `Exam.getPeriodPlacements()`), select rooms using `Exam.findRoomsRandom(Assignment, ExamPeriodPlacement)`
    `Neighbour<Exam,ExamPlacement>` | ExamTimeMove.`selectNeighbour(Solution<Exam,ExamPlacement> solution)` Select an exam randomly, select an available period randomly (if it is not assigned), use rooms if possible, select rooms using `Exam.findBestAvailableRooms(Assignment, ExamPeriodPlacement)` if not (exam is unassigned, a room is not available or used).

    Method parameters in org.cpsolver.exam.neighbours with type arguments of type ExamPlacement
    Modifier and Type | Method and Description
    --- | ---
    `void` | ExamRoomSwapNeighbour.`assign(Assignment<Exam,ExamPlacement> assignment, long iteration)`
    `void` | ExamSimpleNeighbour.`assign(Assignment<Exam,ExamPlacement> assignment, long iteration)`
    `boolean` | ExamPeriodSwapMove.`checkDistributionConstraints(Assignment<Exam,ExamPlacement> assignment, Exam exam, ExamPeriodPlacement period, Map<Exam,ExamPlacement> placements)`
    `boolean` | ExamPeriodSwapMove.`checkDistributionConstraints(Assignment<Exam,ExamPlacement> assignment, Exam exam, ExamPeriodPlacement period, Map<Exam,ExamPlacement> placements)`
    `boolean` | ExamPeriodSwapMove.`checkDistributionConstraints(Assignment<Exam,ExamPlacement> assignment, Exam exam, ExamRoomPlacement room, Set<ExamPlacement> conflictsToIgnore, Map<Exam,ExamPlacement> placements)`
    `boolean` | ExamPeriodSwapMove.`checkDistributionConstraints(Assignment<Exam,ExamPlacement> assignment, Exam exam, ExamRoomPlacement room, Set<ExamPlacement> conflictsToIgnore, Map<Exam,ExamPlacement> placements)`
    `boolean` | ExamPeriodSwapMove.`checkDistributionConstraints(Assignment<Exam,ExamPlacement> assignment, Exam exam, ExamRoomPlacement room, Set<ExamPlacement> conflictsToIgnore, Map<Exam,ExamPlacement> placements)`
    `Set<ExamRoomPlacement>` | ExamPeriodSwapMove.`findBestAvailableRooms(Assignment<Exam,ExamPlacement> assignment, Exam exam, ExamPeriodPlacement period, Set<ExamPlacement> conflictsToIgnore, Map<Exam,ExamPlacement> placements)`
    `Set<ExamRoomPlacement>` | ExamPeriodSwapMove.`findBestAvailableRooms(Assignment<Exam,ExamPlacement> assignment, Exam exam, ExamPeriodPlacement period, Set<ExamPlacement> conflictsToIgnore, Map<Exam,ExamPlacement> placements)`
    `Set<ExamRoomPlacement>` | ExamPeriodSwapMove.`findBestAvailableRooms(Assignment<Exam,ExamPlacement> assignment, Exam exam, ExamPeriodPlacement period, Set<ExamPlacement> conflictsToIgnore, Map<Exam,ExamPlacement> placements)`
    `int` | ExamPeriodSwapMove.`getDistributionConstraintPenalty(Assignment<Exam,ExamPlacement> assignment, Exam exam, ExamRoomPlacement room, Set<ExamPlacement> conflictsToIgnore, Map<Exam,ExamPlacement> placements)`
    `int` | ExamPeriodSwapMove.`getDistributionConstraintPenalty(Assignment<Exam,ExamPlacement> assignment, Exam exam, ExamRoomPlacement room, Set<ExamPlacement> conflictsToIgnore, Map<Exam,ExamPlacement> placements)`
    `int` | ExamPeriodSwapMove.`getDistributionConstraintPenalty(Assignment<Exam,ExamPlacement> assignment, Exam exam, ExamRoomPlacement room, Set<ExamPlacement> conflictsToIgnore, Map<Exam,ExamPlacement> placements)`
    `void` | ExamPeriodSwapMove.`init(Solver<Exam,ExamPlacement> solver)` Initialization
    `void` | ExamRandomMove.`init(Solver<Exam,ExamPlacement> solver)` Initialization
    `void` | ExamRoomMove.`init(Solver<Exam,ExamPlacement> solver)` Initialization
    `void` | ExamTimeMove.`init(Solver<Exam,ExamPlacement> solver)` Initialization
    `Neighbour<Exam,ExamPlacement>` | ExamPeriodSwapMove.`selectNeighbour(Solution<Exam,ExamPlacement> solution)` Select an exam randomly, select an available period randomly (if it is not assigned), use rooms if possible, select rooms using `Exam.findBestAvailableRooms(Assignment, ExamPeriodPlacement)` if not (exam is unassigned, a room is not available or used).
    `Neighbour<Exam,ExamPlacement>` | ExamRandomMove.`selectNeighbour(Solution<Exam,ExamPlacement> solution)` Select an exam randomly, select an available period randomly (from `Exam.getPeriodPlacements()`), select rooms using `Exam.findBestAvailableRooms(Assignment, ExamPeriodPlacement)`.
    `Neighbour<Exam,ExamPlacement>` | ExamRoomMove.`selectNeighbour(Solution<Exam,ExamPlacement> solution)` Select an exam randomly, select an available period randomly (if it is not assigned, from `Exam.getPeriodPlacements()`), select rooms using `Exam.findRoomsRandom(Assignment, ExamPeriodPlacement)`
    `Neighbour<Exam,ExamPlacement>` | ExamTimeMove.`selectNeighbour(Solution<Exam,ExamPlacement> solution)` Select an exam randomly, select an available period randomly (if it is not assigned), use rooms if possible, select rooms using `Exam.findBestAvailableRooms(Assignment, ExamPeriodPlacement)` if not (exam is unassigned, a room is not available or used).
    `double` | ExamRoomSwapNeighbour.`value(Assignment<Exam,ExamPlacement> assignment)`
    `double` | ExamSimpleNeighbour.`value(Assignment<Exam,ExamPlacement> assignment)`

    Constructors in org.cpsolver.exam.neighbours with parameters of type ExamPlacement
    Constructor and Description
    `ExamRoomSwapNeighbour(Assignment<Exam,ExamPlacement> assignment, ExamPlacement placement, ExamRoomPlacement current, ExamRoomPlacement swap)`
    `ExamSimpleNeighbour(Assignment<Exam,ExamPlacement> assignment, ExamPlacement placement)`

    Constructor parameters in org.cpsolver.exam.neighbours with type arguments of type ExamPlacement
    Constructor and Description
    `ExamRoomSwapNeighbour(Assignment<Exam,ExamPlacement> assignment, ExamPlacement placement, ExamRoomPlacement current, ExamRoomPlacement swap)`
    `ExamSimpleNeighbour(Assignment<Exam,ExamPlacement> assignment, ExamPlacement placement)`

  - ### Uses of ExamPlacement in org.cpsolver.exam.reports

    Method parameters in org.cpsolver.exam.reports with type arguments of type ExamPlacement
    Modifier and Type | Method and Description
    --- | ---
    `CSVFile` | ExamAssignments.`report(Assignment<Exam,ExamPlacement> assignment)` generate report
    `CSVFile` | ExamCourseSectionAssignments.`report(Assignment<Exam,ExamPlacement> assignment)` generate report
    `CSVFile` | ExamInstructorConflicts.`report(Assignment<Exam,ExamPlacement> assignment)` generate report
    `CSVFile` | ExamNbrMeetingsPerDay.`report(Assignment<Exam,ExamPlacement> assignment)` generate report
    `CSVFile` | ExamPeriodUsage.`report(Assignment<Exam,ExamPlacement> assignment)` generate report
    `CSVFile` | ExamRoomSchedule.`report(Assignment<Exam,ExamPlacement> assignment)`
    `CSVFile` | ExamRoomSplit.`report(Assignment<Exam,ExamPlacement> assignment)` generate report
    `CSVFile` | ExamStudentBackToBackConflicts.`report(Assignment<Exam,ExamPlacement> assignment)` generate report
    `CSVFile` | ExamStudentConflicts.`report(Assignment<Exam,ExamPlacement> assignment)` generate report
    `CSVFile` | ExamStudentConflictsBySectionCourse.`report(Assignment<Exam,ExamPlacement> assignment)` generate report
    `CSVFile` | ExamStudentConflictsPerExam.`report(Assignment<Exam,ExamPlacement> assignment)` generate report
    `CSVFile` | ExamStudentDirectConflicts.`report(Assignment<Exam,ExamPlacement> assignment)` generate report
    `CSVFile` | ExamStudentMoreTwoADay.`report(Assignment<Exam,ExamPlacement> assignment)` generate report

  - ### Uses of ExamPlacement in org.cpsolver.exam.split

    Methods in org.cpsolver.exam.split that return ExamPlacement
    Modifier and Type | Method and Description
    --- | ---
    `ExamPlacement` | ExamSplitMoves.ExamSplitNeighbour.`placement()` Placement of the new exam.

    Methods in org.cpsolver.exam.split that return types with arguments of type ExamPlacement
    Modifier and Type | Method and Description
    --- | ---
    `Map<Exam,ExamPlacement>` | ExamSplitMoves.ExamSplitNeighbour.`assignments()`
    `Map<Exam,ExamPlacement>` | ExamSplitMoves.ExamMergeNeighbour.`assignments()`
    `Map<Exam,ExamPlacement>` | ExamSplitMoves.ExamShuffleNeighbour.`assignments()`
    `Neighbour<Exam,ExamPlacement>` | ExamSplitMoves.`selectNeighbour(Solution<Exam,ExamPlacement> solution)` Select a split (split an exam into two), a merge (merge two split exams back together) or shuffle operation (move students between two exams that has been split before).

    Methods in org.cpsolver.exam.split with parameters of type ExamPlacement
    Modifier and Type | Method and Description
    --- | ---
    `double` | ExamSplitter.`delta(Assignment<Exam,ExamPlacement> assignment, ExamStudent student, ExamPlacement oldPlacement, ExamPlacement newPlacement)` Difference in the total weighted student conflicts (including `StudentDirectConflicts`, `StudentMoreThan2ADayConflicts`, and `StudentBackToBackConflicts`) if a student is moved from an exam with one placement into an exam with another placement.
    `double` | ExamSplitter.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)` Not used
    `Exam` | ExamSplitter.`split(Assignment<Exam,ExamPlacement> assignment, Exam parent, long iteration, ExamPlacement placement)` Split an exam

    Method parameters in org.cpsolver.exam.split with type arguments of type ExamPlacement
    Modifier and Type | Method and Description
    --- | ---
    `void` | ExamSplitMoves.ExamSplitNeighbour.`assign(Assignment<Exam,ExamPlacement> assignment, long iteration)` Perform the split.
    `void` | ExamSplitMoves.ExamMergeNeighbour.`assign(Assignment<Exam,ExamPlacement> assignment, long iteration)` Perform the merge.
    `void` | ExamSplitMoves.ExamShuffleNeighbour.`assign(Assignment<Exam,ExamPlacement> assignment, long iteration)` Perform the shuffle.
    `void` | ExamSplitter.`bestRestored(Assignment<Exam,ExamPlacement> assignment)` Best solution was restored, change the splits back to what it was in the best solution
    `void` | ExamSplitter.`bestSaved(Assignment<Exam,ExamPlacement> assignment)` Best solution was saved, remember the current splits
    `ExamSplitMoves.ExamSplitNeighbour` | ExamSplitMoves.`bestSplit(Assignment<Exam,ExamPlacement> assignment, Exam exam)` Find a best split for the given exam.
    `double` | ExamSplitter.`delta(Assignment<Exam,ExamPlacement> assignment, ExamStudent student, ExamPlacement oldPlacement, ExamPlacement newPlacement)` Difference in the total weighted student conflicts (including `StudentDirectConflicts`, `StudentMoreThan2ADayConflicts`, and `StudentBackToBackConflicts`) if a student is moved from an exam with one placement into an exam with another placement.
    `Set<ExamRoomPlacement>` | ExamSplitMoves.`findBestAvailableRooms(Assignment<Exam,ExamPlacement> assignment, Exam exam, ExamPeriodPlacement period, int examSize)` Find best available rooms for a new exam (that is to be split from the given one), if is is assigned into the given examination period.
    `double[]` | ExamSplitter.`getBounds(Assignment<Exam,ExamPlacement> assignment, Collection<Exam> exams)` Not used
    `void` | ExamSplitter.`getInfo(Assignment<Exam,ExamPlacement> assignment, Map<String,String> info)` Lists the split
    `double` | ExamSplitter.`getValue(Assignment<Exam,ExamPlacement> assignment)`
    `double` | ExamSplitter.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)` Not used
    `double` | ExamSplitter.`getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)` Not used
    `void` | ExamSplitMoves.`init(Solver<Exam,ExamPlacement> solver)` Initialization
    `boolean` | ExamSplitter.`init(Solver<Exam,ExamPlacement> solver)` Initialization
    `Exam` | ExamSplitter.`merge(Assignment<Exam,ExamPlacement> assignment, Exam child, long iteration)` Merge an exam
    `Neighbour<Exam,ExamPlacement>` | ExamSplitMoves.`selectNeighbour(Solution<Exam,ExamPlacement> solution)` Select a split (split an exam into two), a merge (merge two split exams back together) or shuffle operation (move students between two exams that has been split before).
    `void` | ExamSplitter.`shuffle(Assignment<Exam,ExamPlacement> assignment, Exam exam, long iteration)` Shuffle students between the given exam and all the other exams in the split (if there are any).
    `Exam` | ExamSplitter.`split(Assignment<Exam,ExamPlacement> assignment, Exam parent, long iteration, ExamPlacement placement)` Split an exam
    `String` | ExamSplitter.`toString(Assignment<Exam,ExamPlacement> assignment)`
    `double` | ExamSplitMoves.ExamSplitNeighbour.`value(Assignment<Exam,ExamPlacement> assignment)` Value of the split.
    `double` | ExamSplitMoves.ExamMergeNeighbour.`value(Assignment<Exam,ExamPlacement> assignment)` Value of the merge.
    `double` | ExamSplitMoves.ExamShuffleNeighbour.`value(Assignment<Exam,ExamPlacement> assignment)` Value of the shuffle.

    Constructors in org.cpsolver.exam.split with parameters of type ExamPlacement
    Constructor and Description
    `ExamSplitNeighbour(Assignment<Exam,ExamPlacement> assignment, Exam exam, ExamPlacement placement)` Split an exam into two, assign the new exam into the given placement.

    Constructor parameters in org.cpsolver.exam.split with type arguments of type ExamPlacement
    Constructor and Description
    `ExamMergeNeighbour(Assignment<Exam,ExamPlacement> assignment, Exam exam)` Child exam to be removed.
    `ExamShuffleNeighbour(Assignment<Exam,ExamPlacement> assignment, Exam exam)` Exam to be shuffled.
    `ExamSplitNeighbour(Assignment<Exam,ExamPlacement> assignment, Exam exam, ExamPlacement placement)` Split an exam into two, assign the new exam into the given placement.