## Uses of Interface
org.cpsolver.ifs.model.InfoProvider

- Packages that use InfoProvider
  Package | Description
  --- | ---
  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.custom | University Course Timetabling: Various customizations.
  org.cpsolver.coursett.model | University Course Timetabling: Model.
  org.cpsolver.coursett.sectioning | Additional Student Sectioning Algorithms.
  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.
  org.cpsolver.studentsct | Student Sectioning Solver.
  org.cpsolver.studentsct.extension | Student Sectioning: Various Extensions.
  org.cpsolver.studentsct.heuristics.selection | Student Sectioning: Various Neighbour Selection Criteria.
  org.cpsolver.studentsct.online.selection | Online Student Sectioning Solver: Selection Weights and Heuristics.

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

    Classes in org.cpsolver.coursett.criteria that implement InfoProvider
    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 InfoProvider in org.cpsolver.coursett.criteria.additional

    Classes in org.cpsolver.coursett.criteria.additional that implement InfoProvider
    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 InfoProvider in org.cpsolver.coursett.criteria.placement

    Classes in org.cpsolver.coursett.criteria.placement that implement InfoProvider
    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 InfoProvider in org.cpsolver.coursett.custom

    Classes in org.cpsolver.coursett.custom that implement InfoProvider
    Modifier and Type | Class and Description
    --- | ---
    `class` | `DeterministicStudentSectioning` Deterministic implementation of the initial student sectioning.

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

    Classes in org.cpsolver.coursett.model that implement InfoProvider
    Modifier and Type | Class and Description
    --- | ---
    `class` | `DefaultStudentSectioning` Default implementation of the student sectioning functions needed within the course timetabling solver consisting of `InitialSectioning` and `FinalSectioning`.

  - ### Uses of InfoProvider in org.cpsolver.coursett.sectioning

    Classes in org.cpsolver.coursett.sectioning that implement InfoProvider
    Modifier and Type | Class and Description
    --- | ---
    `class` | `SctSectioning` Student sectioning implementation based on branch & bound.
    `class` | `StudentSwapSectioning` Student sectioning implementation based on local search.

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

    Classes in org.cpsolver.exam.criteria that implement InfoProvider
    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 InfoProvider in org.cpsolver.exam.criteria.additional

    Classes in org.cpsolver.exam.criteria.additional that implement InfoProvider
    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 InfoProvider in org.cpsolver.exam.split

    Classes in org.cpsolver.exam.split that implement InfoProvider
    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 InfoProvider in org.cpsolver.ifs.criteria

    Subinterfaces of InfoProvider in org.cpsolver.ifs.criteria
    Modifier and Type | Interface and Description
    --- | ---
    `interface` | `Criterion<V extends Variable<V,T>,T extends Value<V,T>>` Criterion.

    Classes in org.cpsolver.ifs.criteria that implement InfoProvider
    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 InfoProvider in org.cpsolver.ifs.model

    Subinterfaces of InfoProvider in org.cpsolver.ifs.model
    Modifier and Type | Interface and Description
    --- | ---
    `interface` | `ExtendedInfoProvider<V extends Variable<V,T>,T extends Value<V,T>>` An extension of the `InfoProvider` class providing extended information.

    Methods in org.cpsolver.ifs.model that return types with arguments of type InfoProvider
    Modifier and Type | Method and Description
    --- | ---
    `protected List<InfoProvider<V,T>>` | Model.`getInfoProviders()` Registered info providers (see `InfoProvider`)

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

    Classes in org.cpsolver.instructor.criteria that implement InfoProvider
    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.

  - ### Uses of InfoProvider in org.cpsolver.studentsct

    Classes in org.cpsolver.studentsct that implement InfoProvider
    Modifier and Type | Class and Description
    --- | ---
    `class` | `StudentSectioningModel.StudentSectioningModelContext`

  - ### Uses of InfoProvider in org.cpsolver.studentsct.extension

    Classes in org.cpsolver.studentsct.extension that implement InfoProvider
    Modifier and Type | Class and Description
    --- | ---
    `class` | `StudentQuality` This extension computes student schedule quality using various matrices.

  - ### Uses of InfoProvider in org.cpsolver.studentsct.heuristics.selection

    Classes in org.cpsolver.studentsct.heuristics.selection that implement InfoProvider
    Modifier and Type | Class and Description
    --- | ---
    `class` | `AssignInitialSelection` Assign initial enrollments.
    `class` | `BacktrackSelection` Use backtrack neighbour selection.
    `class` | `BranchBoundSelection` Section all students using incremental branch & bound (no unassignments).
    `class` | `CriticalBacktrackSelection` Use backtrack neighbour selection.
    `class` | `CriticalCoursesBranchAndBoundSelection` This selection is very much like `BranchBoundSelection`, but only critical course requests are assigned (see `Request.isCritical()`.
    `class` | `MinCreditBranchAndBoundSelection` This selection is very much like `BranchBoundSelection`, but only enough courses to a student is assigned to reach the min credit (see `Student.getMinCredit()`).
    `class` | `OnlineSelection` Section given student using branch & bound algorithm with no unassignments allowed.
    `class` | `ResectionIncompleteStudentsSelection` Resection incomplete studends.
    `class` | `ResectionUnassignedStudentsSelection` Resection studends with empty schedule.
    `class` | `StudentEnrollmentSwapSelection` Swap enrollments of different students of a course.
    `class` | `SwapStudentSelection` Pick a student (one by one) with an incomplete schedule, try to find an improvement, identify problematic students.

  - ### Uses of InfoProvider in org.cpsolver.studentsct.online.selection

    Classes in org.cpsolver.studentsct.online.selection that implement InfoProvider
    Modifier and Type | Class and Description
    --- | ---
    `class` | `SuggestionSelection` Online student sectioning algorithm based on the `BranchBoundSelection` of the batch solver.