## Uses of Interface
org.cpsolver.ifs.criteria.Criterion

- Packages that use Criterion
  Package | Description
  --- | ---
  org.cpsolver.coursett.constraint | University Course Timetabling: Constraints.
  org.cpsolver.coursett.criteria | University Course Timetabling: Criteria.
  org.cpsolver.coursett.criteria.additional | University Course Timetabling: Additional (Experimental) Criteria.
  org.cpsolver.coursett.criteria.placement | University Course Timetabling: Placement Selection Criteria.
  org.cpsolver.coursett.model | University Course Timetabling: Model.
  org.cpsolver.exam.criteria | Examination Timetabling: Criteria.
  org.cpsolver.exam.criteria.additional | Examination Timetabling: Additional (Experimental) Criteria.
  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.
  org.cpsolver.ifs.criteria | IFS Criteria.
  org.cpsolver.ifs.model | IFS Model (description of a problem)
  org.cpsolver.instructor.criteria | Instructor Scheduling: Criteria.

- - ### Uses of Criterion in org.cpsolver.coursett.constraint

    Methods in org.cpsolver.coursett.constraint that return Criterion
    Modifier and Type | Method and Description
    --- | ---
    `protected Criterion<Lecture,Placement>` | DepartmentSpreadConstraint.`getCriterion()`
    `protected Criterion<Lecture,Placement>` | SpreadConstraint.`getCriterion()`

  - ### Uses of Criterion in org.cpsolver.coursett.criteria

    Classes in org.cpsolver.coursett.criteria that implement Criterion
    Modifier and Type | Class and Description
    --- | ---
    `class` | `BackToBackInstructorPreferences` Bact-to-back instructor preferences.
    `class` | `BrokenTimePatterns` Broken time patterns.
    `class` | `DepartmentBalancingPenalty` Department balancing penalty.
    `class` | `DistributionPreferences` Distribution preferences.
    `class` | `FlexibleConstraintCriterion` The class encapsulates various flexible constraints concerning compact timetables of instructors.
    `class` | `Perturbations` Perturbations.
    `class` | `RoomPreferences` Room preferences.
    `class` | `RoomViolations` Room violations.
    `class` | `SameSubpartBalancingPenalty` Same subpart balancing penalty.
    `class` | `StudentCommittedConflict` Student committed conflicts.
    `class` | `StudentConflict` Student conflicts.
    `class` | `StudentDistanceConflict` Student distance conflicts.
    `class` | `StudentHardConflict` Student hard conflicts.
    `class` | `StudentOverlapConflict` Student overlapping conflicts.
    `class` | `StudentWorkdayConflict` Student work-day conflicts.
    `class` | `TimePreferences` Time preferences.
    `class` | `TimetablingCriterion` Abstract class for all timetabling criteria.
    `class` | `TimeViolations` Time violations.
    `class` | `TooBigRooms` Too big rooms.
    `class` | `UselessHalfHours` Useless half-hours.

  - ### Uses of Criterion in org.cpsolver.coursett.criteria.additional

    Classes in org.cpsolver.coursett.criteria.additional that implement Criterion
    Modifier and Type | Class and Description
    --- | ---
    `class` | `IgnoredCommittedStudentConflict` Ignored committed student conflicts.
    `class` | `IgnoredStudentConflict` Ignored student conflicts.
    `class` | `ImportantStudentConflict` Important student conflicts.
    `class` | `ImportantStudentHardConflict` Important student hard conflicts.
    `class` | `InstructorConflict` Instructor conflict counting criterion.
    `class` | `InstructorFairness` This class represent fairness criterion for instructors.
    `class` | `InstructorLunchBreak` The class represents various criteria concerning compact timetables of instructors.
    `class` | `InstructorStudentConflict` Instructor student conflicts.
    `class` | `InstructorStudentHardConflict` Instructor student conflicts.
    `class` | `QuadraticStudentConflict` Quadratic student conflicts.
    `class` | `QuadraticStudentHardConflict` Quadratic student conflicts.
    `class` | `RoomSizePenalty` Cost for using room(s) that are too big.
    `class` | `StudentLuchBreak` Naive, yet effective approach for modeling student lunch breaks.
    `class` | `StudentMinimizeDaysOfWeek` Naive, yet effective approach for minimizing number of days in student schedule.
    `class` | `StudentMinimizeScheduleHoles` Naive, yet effective approach for minimizing holes in student schedule.
    `class` | `StudentOnlineConflict` An experimental criterion that tries to minimize cases where a student has an online and in-person class on the same day.
    `class` | `StudentOverLunchConflict` An experimental criterion that tries to keep student all classes before or after the lunch period.

  - ### Uses of Criterion in org.cpsolver.coursett.criteria.placement

    Classes in org.cpsolver.coursett.criteria.placement that implement Criterion
    Modifier and Type | Class and Description
    --- | ---
    `class` | `AssignmentCount` Deprecated.
    `class` | `DeltaTimePreference` Difference between proposed and best time assignment.
    `class` | `HardConflicts` Number of values (of other variables) that have to be unassigned in order before this value can be assigned.
    `class` | `PlacementSelectionCriterion` Abstract class for all criteria that are to be used only in the placement selection (do not have any impact on the overall solution value).
    `class` | `PotentialHardConflicts` Use conflict-based statistics to compute potential hard conflicts.
    `class` | `WeightedHardConflicts` Hard conflicts weighted by the conflict-based statistics (past occurrences).

  - ### Uses of Criterion in org.cpsolver.coursett.model

    Methods in org.cpsolver.coursett.model with parameters of type Criterion
    Modifier and Type | Method and Description
    --- | ---
    `void` | TimetableModel.`addCriterion(Criterion<Lecture,Placement> criterion)`
    `void` | TimetableModel.`removeCriterion(Criterion<Lecture,Placement> criterion)`

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

    Classes in org.cpsolver.exam.criteria that implement Criterion
    Modifier and Type | Class and Description
    --- | ---
    `class` | `DistributionPenalty` Distribution penalty.
    `class` | `ExamCriterion` Abstract examination criterion.
    `class` | `ExamRotationPenalty` Rotation penalty.
    `class` | `InstructorBackToBackConflicts` Number of back-to-back instructor conflicts.
    `class` | `InstructorDirectConflicts` Number of direct instructor conflicts.
    `class` | `InstructorDistanceBackToBackConflicts` Number of back-to-back distance instructor conflicts.
    `class` | `InstructorMoreThan2ADayConflicts` Number of more than two exams a day instructor conflicts.
    `class` | `InstructorNotAvailableConflicts` Number of direct instructor conflicts caused by the fact that an instructor is not available.
    `class` | `LargeExamsPenalty` Front load penalty.
    `class` | `PeriodIndexPenalty` Average index of the assigned period.
    `class` | `PeriodPenalty` Cost for using a period.
    `class` | `PeriodSizePenalty` A weight for period penalty (used in `ExamPeriodPlacement.getPenalty()` multiplied by examination size `Exam.getSize()`.
    `class` | `PerturbationPenalty` Perturbation penalty.
    `class` | `RoomPenalty` Room penalty (penalty for using given rooms).
    `class` | `RoomPerturbationPenalty` Room perturbation penalty.
    `class` | `RoomSplitDistancePenalty` Room split distance penalty.
    `class` | `RoomSplitPenalty` Cost for using more than one room (nrSplits^2).
    `class` | `StudentBackToBackConflicts` Number of back-to-back student conflicts.
    `class` | `StudentDirectConflicts` Number of direct student conflicts.
    `class` | `StudentDistanceBackToBackConflicts` Number of back-to-back distance student conflicts.
    `class` | `StudentMoreThan2ADayConflicts` Number of more than two exams a day student conflicts.
    `class` | `StudentNotAvailableConflicts` Number of direct student conflicts caused by the fact that a student is not available.

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

    Classes in org.cpsolver.exam.criteria.additional that implement Criterion
    Modifier and Type | Class and Description
    --- | ---
    `class` | `DistanceToStronglyPreferredRoom` Experimental criterion measuring average distance (in meters) to the strongly preferred room (or rooms) of the examination.
    `class` | `DistributionViolation` Experimental criterion counting violations of hard distribution constraints.
    `class` | `PeriodViolation` Experimental criterion counting violations of periods assignments.
    `class` | `RoomViolation` Experimental criterion counting violations of room assignments.
    `class` | `StudentMoreThan1ADayConflicts` Number of more than One exam a day student conflicts.

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

    Classes in org.cpsolver.exam.split that implement Criterion
    Modifier and Type | Class and Description
    --- | ---
    `class` | `ExamSplitter` Experimental criterion that allows an exam to be split into two if it decreases the number of student conflicts.

  - ### Uses of Criterion in org.cpsolver.ifs.criteria

    Classes in org.cpsolver.ifs.criteria that implement Criterion
    Modifier and Type | Class and Description
    --- | ---
    `class` | `AbstractCriterion<V extends Variable<V,T>,T extends Value<V,T>>` Abstract Criterion.
    `class` | `AssignedValue<V extends Variable<V,T>,T extends Value<V,T>>` Simple Criterion: Sum of `Value.toDouble(Assignment)`.

  - ### Uses of Criterion in org.cpsolver.ifs.model

    Methods in org.cpsolver.ifs.model that return Criterion
    Modifier and Type | Method and Description
    --- | ---
    `Criterion<V,T>` | Model.`getCriterion(Class<? extends Criterion<V,T>> criterion)` Return a registered criterion of the given type.

    Methods in org.cpsolver.ifs.model that return types with arguments of type Criterion
    Modifier and Type | Method and Description
    --- | ---
    `Collection<Criterion<V,T>>` | Model.`getCriteria()` List all registered criteria

    Methods in org.cpsolver.ifs.model with parameters of type Criterion
    Modifier and Type | Method and Description
    --- | ---
    `void` | Model.`addCriterion(Criterion<V,T> criterion)` Register a new criterion
    `void` | Model.`removeCriterion(Criterion<V,T> criterion)` Unregister an existing criterion

    Method parameters in org.cpsolver.ifs.model with type arguments of type Criterion
    Modifier and Type | Method and Description
    --- | ---
    `Criterion<V,T>` | Model.`getCriterion(Class<? extends Criterion<V,T>> criterion)` Return a registered criterion of the given type.
    `void` | Model.`removeCriterion(Class<? extends Criterion<V,T>> criterion)` Unregister an existing criterion

  - ### Uses of Criterion in org.cpsolver.instructor.criteria

    Classes in org.cpsolver.instructor.criteria that implement Criterion
    Modifier and Type | Class and Description
    --- | ---
    `class` | `AttributePreferences` Attribute Preferences.
    `class` | `BackToBack` Back to Back.
    `class` | `CoursePreferences` Course Preferences.
    `class` | `DifferentLecture` Different Lecture.
    `class` | `Distributions` Distributions criterion.
    `class` | `InstructorPreferences` Instructor Preferences.
    `class` | `InstructorSchedulingCriterion` Abstract instructor scheduling criterion.
    `class` | `OriginalInstructor` Original Instructor.
    `class` | `SameCommon` Same Common Preferences.
    `class` | `SameCourse` Same Course Preferences.
    `class` | `SameDays` Same Days.
    `class` | `SameInstructor` Same Instructor.
    `class` | `SameLink` Same Link.
    `class` | `SameRoom` Same Room.
    `class` | `TeachingPreferences` Teaching Preferences.
    `class` | `TimeOverlaps` Time overlaps.
    `class` | `UnusedInstructorLoad` Unused Instructor Load.