## Uses of Class
net.sf.cpsolver.exam.model.ExamPlacement

- Packages that use ExamPlacement
  Package | Description
  --- | ---
  net.sf.cpsolver.exam | Examination Timetabling Solver.
  net.sf.cpsolver.exam.criteria | Examination Timetabling: Criteria.
  net.sf.cpsolver.exam.criteria.additional | Examination Timetabling: Additional (Experimental) Criteria.
  net.sf.cpsolver.exam.heuristics | Examination Timetabling: Solution Heuristics.
  net.sf.cpsolver.exam.model | Examination Timetabling: Model.
  net.sf.cpsolver.exam.neighbours | Examination Timetabling: Various Neighbourhoods.
  net.sf.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 net.sf.cpsolver.exam

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

  - ### Uses of ExamPlacement in net.sf.cpsolver.exam.criteria

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

    Method parameters in net.sf.cpsolver.exam.criteria with type arguments of type ExamPlacement
    Modifier and Type | Method and Description
    --- | ---
    `double` | DistributionPenalty.`getValue(ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | ExamRotationPenalty.`getValue(ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | InstructorBackToBackConflicts.`getValue(ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | InstructorDirectConflicts.`getValue(ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | InstructorDistanceBackToBackConflicts.`getValue(ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | InstructorMoreThan2ADayConflicts.`getValue(ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | InstructorNotAvailableConflicts.`getValue(ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | LargeExamsPenalty.`getValue(ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | PeriodIndexPenalty.`getValue(ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | PeriodPenalty.`getValue(ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | PeriodSizePenalty.`getValue(ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | PerturbationPenalty.`getValue(ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | RoomPenalty.`getValue(ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | RoomPerturbationPenalty.`getValue(ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | RoomSizePenalty.`getValue(ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | RoomSplitDistancePenalty.`getValue(ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | RoomSplitPenalty.`getValue(ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | StudentBackToBackConflicts.`getValue(ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | StudentDirectConflicts.`getValue(ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | StudentDistanceBackToBackConflicts.`getValue(ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | StudentMoreThan2ADayConflicts.`getValue(ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | StudentNotAvailableConflicts.`getValue(ExamPlacement value, Set<ExamPlacement> conflicts)`
    `boolean` | DistributionPenalty.`init(Solver<Exam,ExamPlacement> solver)`
    `boolean` | LargeExamsPenalty.`init(Solver<Exam,ExamPlacement> solver)`
    `boolean` | PeriodPenalty.`init(Solver<Exam,ExamPlacement> solver)`
    `boolean` | PerturbationPenalty.`init(Solver<Exam,ExamPlacement> solver)`
    `boolean` | RoomPenalty.`init(Solver<Exam,ExamPlacement> solver)`
    `boolean` | RoomSizePenalty.`init(Solver<Exam,ExamPlacement> solver)`
    `boolean` | StudentBackToBackConflicts.`init(Solver<Exam,ExamPlacement> solver)`
    `boolean` | StudentDistanceBackToBackConflicts.`init(Solver<Exam,ExamPlacement> solver)`

  - ### Uses of ExamPlacement in net.sf.cpsolver.exam.criteria.additional

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

    Method parameters in net.sf.cpsolver.exam.criteria.additional with type arguments of type ExamPlacement
    Modifier and Type | Method and Description
    --- | ---
    `double` | DistanceToStronglyPreferredRoom.`getValue(ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | DistributionViolation.`getValue(ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | PeriodViolation.`getValue(ExamPlacement value, Set<ExamPlacement> conflicts)`
    `double` | RoomViolation.`getValue(ExamPlacement value, Set<ExamPlacement> conflicts)`

  - ### Uses of ExamPlacement in net.sf.cpsolver.exam.heuristics

    Methods in net.sf.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 net.sf.cpsolver.exam.heuristics that return types with arguments of type ExamPlacement
    Modifier and Type | Method and Description
    --- | ---
    `Neighbour<Exam,ExamPlacement>` | ExamConstruction.`checkLocalOptimality(ExamModel model)` Find a new assignment of one of the assigned exams that improves the time cost `getTimeCost()` and for which there is a set of available rooms `Exam.findBestAvailableRooms(ExamPeriodPlacement)`.
    `Neighbour<Exam,ExamPlacement>` | ExamGreatDeluge.`genMove(Solution<Exam,ExamPlacement> solution)` Generate neighbour -- select neighbourhood randomly, select neighbour
    `Neighbour<Exam,ExamPlacement>` | ExamSimulatedAnnealing.`genMove(Solution<Exam,ExamPlacement> solution)` 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)` A neighbour is generated randomly untill an acceptable one is found.
    `Neighbour<Exam,ExamPlacement>` | ExamHillClimbing.`selectNeighbour(Solution<Exam,ExamPlacement> solution)` 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)` Select neighbour -- generate a move `ExamSimulatedAnnealing.genMove(Solution)` until an acceptable neighbour is found `ExamSimulatedAnnealing.accept(Solution, Neighbour)`, keep increasing iteration `ExamSimulatedAnnealing.incIter(Solution)`.
    `Neighbour<Exam,ExamPlacement>` | ExamTabuSearch.`selectNeighbour(Solution<Exam,ExamPlacement> solution)` Neighbor selection

    Method parameters in net.sf.cpsolver.exam.heuristics with type arguments of type ExamPlacement
    Modifier and Type | Method and Description
    --- | ---
    `boolean` | ExamGreatDeluge.`accept(LazyNeighbour<Exam,ExamPlacement> neighbour, double value)` Accept lazy neighbour
    `boolean` | ExamHillClimbing.`accept(LazyNeighbour<Exam,ExamPlacement> neighbour, double value)` Accept lazy neighbour
    `boolean` | ExamSimulatedAnnealing.`accept(LazyNeighbour<Exam,ExamPlacement> neighbour, double value)` Accept lazy neighbour
    `protected boolean` | ExamGreatDeluge.`accept(Solution<Exam,ExamPlacement> solution, Neighbour<Exam,ExamPlacement> neighbour)` Accept neighbour
    `protected boolean` | ExamGreatDeluge.`accept(Solution<Exam,ExamPlacement> solution, Neighbour<Exam,ExamPlacement> neighbour)` Accept neighbour
    `protected boolean` | ExamSimulatedAnnealing.`accept(Solution<Exam,ExamPlacement> solution, Neighbour<Exam,ExamPlacement> neighbour)` True if the given neighboir is to be be accepted
    `protected boolean` | ExamSimulatedAnnealing.`accept(Solution<Exam,ExamPlacement> solution, Neighbour<Exam,ExamPlacement> neighbour)` True if the given neighboir is to be be accepted
    `void` | ExamGreatDeluge.`bestCleared(Solution<Exam,ExamPlacement> solution)`
    `void` | ExamHillClimbing.`bestCleared(Solution<Exam,ExamPlacement> solution)`
    `void` | ExamSimulatedAnnealing.`bestCleared(Solution<Exam,ExamPlacement> solution)`
    `void` | ExamGreatDeluge.`bestRestored(Solution<Exam,ExamPlacement> solution)`
    `void` | ExamHillClimbing.`bestRestored(Solution<Exam,ExamPlacement> solution)`
    `void` | ExamSimulatedAnnealing.`bestRestored(Solution<Exam,ExamPlacement> solution)`
    `void` | ExamGreatDeluge.`bestSaved(Solution<Exam,ExamPlacement> solution)` Update last improving iteration count
    `void` | ExamHillClimbing.`bestSaved(Solution<Exam,ExamPlacement> solution)` Memorize the iteration when the last best solution was found.
    `void` | ExamSimulatedAnnealing.`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)
    `protected void` | ExamSimulatedAnnealing.`cool(Solution<Exam,ExamPlacement> solution)` Cool temperature
    `Neighbour<Exam,ExamPlacement>` | ExamGreatDeluge.`genMove(Solution<Exam,ExamPlacement> solution)` Generate neighbour -- select neighbourhood randomly, select neighbour
    `Neighbour<Exam,ExamPlacement>` | ExamSimulatedAnnealing.`genMove(Solution<Exam,ExamPlacement> solution)` Generate neighbour -- select neighbourhood randomly, select neighbour
    `void` | ExamGreatDeluge.`getInfo(Solution<Exam,ExamPlacement> solution, Map<String,String> info)`
    `void` | ExamHillClimbing.`getInfo(Solution<Exam,ExamPlacement> solution, Map<String,String> info)`
    `void` | ExamSimulatedAnnealing.`getInfo(Solution<Exam,ExamPlacement> solution, Map<String,String> info)`
    `void` | ExamGreatDeluge.`getInfo(Solution<Exam,ExamPlacement> solution, Map<String,String> info, Collection<Exam> variables)`
    `void` | ExamHillClimbing.`getInfo(Solution<Exam,ExamPlacement> solution, Map<String,String> info, Collection<Exam> variables)`
    `void` | ExamSimulatedAnnealing.`getInfo(Solution<Exam,ExamPlacement> solution, Map<String,String> info, Collection<Exam> variables)`
    `protected void` | ExamGreatDeluge.`incIter(Solution<Exam,ExamPlacement> solution)` Increment iteration count, update bound
    `protected void` | ExamSimulatedAnnealing.`incIter(Solution<Exam,ExamPlacement> solution)` Increment iteration counter, cool/reheat/restoreBest if necessary
    `protected void` | ExamGreatDeluge.`info(Solution<Exam,ExamPlacement> solution)` Print some information
    `void` | ExamColoringConstruction.`init(Solver<Exam,ExamPlacement> solver)`
    `void` | ExamConstruction.`init(Solver<Exam,ExamPlacement> solver)` Initialization
    `void` | ExamGreatDeluge.`init(Solver<Exam,ExamPlacement> solver)` Initialization
    `void` | ExamHillClimbing.`init(Solver<Exam,ExamPlacement> solver)` Initialization
    `void` | ExamNeighbourSelection.`init(Solver<Exam,ExamPlacement> solver)` Initialization
    `void` | ExamSimulatedAnnealing.`init(Solver<Exam,ExamPlacement> solver)` Initialization
    `void` | ExamTabuSearch.`init(Solver<Exam,ExamPlacement> solver)` Initialization
    `void` | ExamUnassignedVariableSelection.`init(Solver<Exam,ExamPlacement> solver)` Initialization
    `protected void` | ExamSimulatedAnnealing.`reheat(Solution<Exam,ExamPlacement> solution)` Reheat temperature
    `protected void` | ExamSimulatedAnnealing.`restoreBest(Solution<Exam,ExamPlacement> solution)` restore best ever found solution
    `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)` A neighbour is generated randomly untill an acceptable one is found.
    `Neighbour<Exam,ExamPlacement>` | ExamHillClimbing.`selectNeighbour(Solution<Exam,ExamPlacement> solution)` 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)` Select neighbour -- generate a move `ExamSimulatedAnnealing.genMove(Solution)` until an acceptable neighbour is found `ExamSimulatedAnnealing.accept(Solution, Neighbour)`, keep increasing iteration `ExamSimulatedAnnealing.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)`
    `void` | ExamHillClimbing.`solutionUpdated(Solution<Exam,ExamPlacement> solution)`
    `void` | ExamSimulatedAnnealing.`solutionUpdated(Solution<Exam,ExamPlacement> solution)`

  - ### Uses of ExamPlacement in net.sf.cpsolver.exam.model

    Methods in net.sf.cpsolver.exam.model that return ExamPlacement
    Modifier and Type | Method and Description
    --- | ---
    `ExamPlacement` | ExamRoom.`getPlacement(ExamPeriod period)` Deprecated. If room sharing is allowed, this method only returns first exam. Use `ExamRoom.getPlacements(ExamPeriod)` instead.

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

    Methods in net.sf.cpsolver.exam.model with parameters of type ExamPlacement
    Modifier and Type | Method and Description
    --- | ---
    `void` | ExamInstructor.`afterAssigned(long iteration, ExamPlacement p)` An exam was assigned, update instructor assignment table
    `void` | ExamModel.`afterAssigned(long iteration, ExamPlacement placement)` Called after a value is assigned to its variable, optimization criteria are updated
    `void` | ExamRoom.`afterAssigned(long iteration, ExamPlacement p)` An exam was assigned, update room assignment table
    `void` | ExamStudent.`afterAssigned(long iteration, ExamPlacement value)` An exam was assigned, update student assignment table
    `void` | ExamInstructor.`afterUnassigned(long iteration, ExamPlacement p)` An exam was unassigned, update instructor assignment table
    `void` | ExamRoom.`afterUnassigned(long iteration, ExamPlacement p)` An exam was unassigned, update room assignment table
    `void` | ExamStudent.`afterUnassigned(long iteration, ExamPlacement value)` An exam was unassigned, update student assignment table
    `void` | Exam.`assign(long iteration, ExamPlacement placement)`
    `void` | ExamDistributionConstraint.`assigned(long iteration, ExamPlacement value)`
    `void` | ExamRoom.`assigned(long iteration, ExamPlacement p)` An exam was assigned, update room assignment table
    `void` | ExamModel.`beforeUnassigned(long iteration, ExamPlacement placement)` Called before a value is unassigned from its variable, optimization criteria are updated
    `boolean` | ExamDistributionConstraint.`check(ExamPlacement first, ExamPlacement second)` Check assignments of the given exams
    `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` | ExamDistributionConstraint.`computeConflicts(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(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(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(ExamPlacement p, Set<ExamPlacement> conflicts)` Compute conflicts between the given assignment of an exam and all the current assignments (of this student).
    `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(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(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(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(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(ExamPlacement p)` Return true if this is hard constraint or this is a soft constraint without any violation
    `void` | ExamDistributionConstraint.`unassigned(long iteration, ExamPlacement value)`
    `void` | ExamRoom.`unassigned(long iteration, ExamPlacement p)` An exam was unassigned, update room assignment table

    Method parameters in net.sf.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.
    `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` | 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
    `void` | ExamDistributionConstraint.`computeConflicts(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(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(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(ExamPlacement p, Set<ExamPlacement> conflicts)` Compute conflicts 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
    `void` | Exam.`removeContstraint(Constraint<Exam,ExamPlacement> constraint)` Removes a constraint.

    Constructor parameters in net.sf.cpsolver.exam.model with type arguments of type ExamPlacement
    Constructor and Description
    `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 net.sf.cpsolver.exam.neighbours

    Methods in net.sf.cpsolver.exam.neighbours that return types with arguments of type ExamPlacement
    Modifier and Type | Method and Description
    --- | ---
    `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(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(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(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(ExamPeriodPlacement)` if not (exam is unassigned, a room is not available or used).

    Method parameters in net.sf.cpsolver.exam.neighbours with type arguments of type ExamPlacement
    Modifier and Type | Method and Description
    --- | ---
    `boolean` | ExamPeriodSwapMove.`checkDistributionConstraints(Exam exam, ExamPeriodPlacement period, Map<Exam,ExamPlacement> placements)`
    `boolean` | ExamPeriodSwapMove.`checkDistributionConstraints(Exam exam, ExamRoomPlacement room, Set<ExamPlacement> conflictsToIgnore, Map<Exam,ExamPlacement> placements)`
    `boolean` | ExamPeriodSwapMove.`checkDistributionConstraints(Exam exam, ExamRoomPlacement room, Set<ExamPlacement> conflictsToIgnore, Map<Exam,ExamPlacement> placements)`
    `Set<ExamRoomPlacement>` | ExamPeriodSwapMove.`findBestAvailableRooms(Exam exam, ExamPeriodPlacement period, Set<ExamPlacement> conflictsToIgnore, Map<Exam,ExamPlacement> placements)`
    `Set<ExamRoomPlacement>` | ExamPeriodSwapMove.`findBestAvailableRooms(Exam exam, ExamPeriodPlacement period, Set<ExamPlacement> conflictsToIgnore, Map<Exam,ExamPlacement> placements)`
    `int` | ExamPeriodSwapMove.`getDistributionConstraintPenalty(Exam exam, ExamRoomPlacement room, Set<ExamPlacement> conflictsToIgnore, Map<Exam,ExamPlacement> placements)`
    `int` | ExamPeriodSwapMove.`getDistributionConstraintPenalty(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(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(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(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(ExamPeriodPlacement)` if not (exam is unassigned, a room is not available or used).

    Constructors in net.sf.cpsolver.exam.neighbours with parameters of type ExamPlacement
    Constructor and Description
    `ExamRoomSwapNeighbour(ExamPlacement placement, ExamRoomPlacement current, ExamRoomPlacement swap)`
    `ExamSimpleNeighbour(ExamPlacement placement)`

  - ### Uses of ExamPlacement in net.sf.cpsolver.exam.split

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

    Methods in net.sf.cpsolver.exam.split that return types with arguments of type ExamPlacement
    Modifier and Type | Method and Description
    --- | ---
    `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 net.sf.cpsolver.exam.split with parameters of type ExamPlacement
    Modifier and Type | Method and Description
    --- | ---
    `double` | ExamSplitter.`delta(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(ExamPlacement value, Set<ExamPlacement> conflicts)` Not used
    `Exam` | ExamSplitter.`split(Exam parent, long iteration, ExamPlacement placement)` Split an exam

    Method parameters in net.sf.cpsolver.exam.split with type arguments of type ExamPlacement
    Modifier and Type | Method and Description
    --- | ---
    `double` | ExamSplitter.`getValue(ExamPlacement value, Set<ExamPlacement> conflicts)` Not used
    `void` | ExamSplitMoves.`init(Solver<Exam,ExamPlacement> solver)` Initialization
    `boolean` | ExamSplitter.`init(Solver<Exam,ExamPlacement> solver)` Initialization
    `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).

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