## Uses of Interface
org.cpsolver.ifs.heuristics.NeighbourSelection

- Packages that use NeighbourSelection
  Package | Description
  --- | ---
  org.cpsolver.coursett.heuristics | University Course Timetabling: Heuristics.
  org.cpsolver.coursett.neighbourhoods | University Course Timetabling: Various Neighbourhoods.
  org.cpsolver.coursett.sectioning | Additional Student Sectioning Algorithms.
  org.cpsolver.exam.heuristics | Examination Timetabling: Solution Heuristics.
  org.cpsolver.exam.neighbours | Examination Timetabling: Various Neighbourhoods.
  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.algorithms | IFS Neighbourhood Search Algorithms
  org.cpsolver.ifs.algorithms.neighbourhoods | IFS: Various Problem-Independent Neighbourhoods.
  org.cpsolver.ifs.assignment.context | Assignment context can be used by a class (e.g., a constraint, a extension, a neighborhood selection, or a criterion) to contain any assignment dependent data.
  org.cpsolver.ifs.heuristics | IFS Heuristics (value and variable selection criteria)
  org.cpsolver.ifs.solver | IFS Solver
  org.cpsolver.studentsct.heuristics | Student Sectioning: Heuristics.
  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 NeighbourSelection in org.cpsolver.coursett.heuristics

    Classes in org.cpsolver.coursett.heuristics that implement NeighbourSelection
    Modifier and Type | Class and Description
    --- | ---
    `class` | `FixCompleteSolutionNeighbourSelection` University course timetabling neighbour selection.
    `class` | `NeighbourSelectionWithSuggestions` Neighbour selection which does the standard time neighbour selection most of the time, however, the very best neighbour is selected time to time (using backtracking based search).

    Constructors in org.cpsolver.coursett.heuristics with parameters of type NeighbourSelection
    Constructor and Description
    `FixCompleteSolutionNeighbourSelection(DataProperties config, NeighbourSelection<Lecture,Placement> parent)`

  - ### Uses of NeighbourSelection in org.cpsolver.coursett.neighbourhoods

    Classes in org.cpsolver.coursett.neighbourhoods that implement NeighbourSelection
    Modifier and Type | Class and Description
    --- | ---
    `class` | `RoomChange` Try to assign a class with a new room.
    `class` | `RoomSwap` Try to assign a class with a new room.
    `class` | `Suggestion` A simple neighbor selection based on `NeighbourSelectionWithSuggestions`, only triggering when there is an unassigned class.
    `class` | `TimeChange` Try to assign a class with a new time.
    `class` | `TimeSwap` Try to assign a class with a new time.

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

    Classes in org.cpsolver.coursett.sectioning that implement NeighbourSelection
    Modifier and Type | Class and Description
    --- | ---
    `class` | `RandomStudentSwap` A neihbourhood selection that attempts to swap a student between alternative sections of a course.
    `class` | `StudentSwapGenerator` Generate student swaps.

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

    Classes in org.cpsolver.exam.heuristics that implement NeighbourSelection
    Modifier and Type | Class and Description
    --- | ---
    `class` | `ExamColoringConstruction` Examination timetabling construction heuristics based on graph vertex coloring.
    `class` | `ExamConstruction` Initial solution construction heuristics.
    `class` | `ExamGreatDeluge` Deprecated.
    `class` | `ExamHillClimbing` Deprecated.
    `class` | `ExamNeighbourSelection` Examination timetabling neighbour selection.
    `class` | `ExamSimulatedAnnealing` Deprecated.
    `class` | `ExamTabuSearch` Tabu search algorithm.

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

    Classes in org.cpsolver.exam.neighbours that implement NeighbourSelection
    Modifier and Type | Class and Description
    --- | ---
    `class` | `ExamPeriodSwapMove` Try to swap a period between two exams.
    `class` | `ExamRandomMove` A period is selected randomly for a randomly selected exam.
    `class` | `ExamRoomMove` Try to swap a room between two exams.
    `class` | `ExamTimeMove` A new period is selected for a randomly selected exam.

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

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

  - ### Uses of NeighbourSelection in org.cpsolver.ifs.algorithms

    Classes in org.cpsolver.ifs.algorithms that implement NeighbourSelection
    Modifier and Type | Class and Description
    --- | ---
    `class` | `GreatDeluge<V extends Variable<V,T>,T extends Value<V,T>>` Great deluge.
    `class` | `HillClimber<V extends Variable<V,T>,T extends Value<V,T>>` Hill climber.
    `class` | `MetaHeuristicSearch<V extends Variable<V,T>,T extends Value<V,T>>` Meta-heuristic search neighbor selection.
    `class` | `NeighbourSearch<V extends Variable<V,T>,T extends Value<V,T>>` Base class for the search techniques like hill climber, great deluge, or simulated annealing.
    `class` | `NeighbourSelector<V extends Variable<V,T>,T extends Value<V,T>>` A wrapper for `NeighbourSelection` that keeps some stats about the given neighbour selector.
    `class` | `ParallelConstruction<V extends Variable<V,T>,T extends Value<V,T>>` A simple neighbourhood selection extension suitable for the `ParallelSolver` during the construction phase.
    `class` | `SimpleSearch<V extends Variable<V,T>,T extends Value<V,T>>` Simple search neighbour selection.
    `class` | `SimulatedAnnealing<V extends Variable<V,T>,T extends Value<V,T>>` Simulated annealing.
    `class` | `StepCountingHillClimber<V extends Variable<V,T>,T extends Value<V,T>>` Step counting hill climber.

    Fields in org.cpsolver.ifs.algorithms declared as NeighbourSelection
    Modifier and Type | Field and Description
    --- | ---
    `protected NeighbourSelection<V,T>` | ParallelConstruction.`iParent`

    Methods in org.cpsolver.ifs.algorithms that return NeighbourSelection
    Modifier and Type | Method and Description
    --- | ---
    `NeighbourSelection<V,T>` | MetaHeuristicSearch.MetaHeuristicSearchContext.`getConstructionSelection()`
    `NeighbourSelection<V,T>` | MetaHeuristicSearch.MetaHeuristicSearchContext.`getHillClimberSelection()`
    `NeighbourSelection<V,T>` | MetaHeuristicSearch.MetaHeuristicSearchContext.`getImprovementSelection()`
    `NeighbourSelection<V,T>` | MetaHeuristicSearch.MetaHeuristicSearchContext.`getIncompleteSelection()`
    `protected NeighbourSelection<V,T>` | NeighbourSearch.`nextNeighbourSelection()` Generate and return next neighbour selection
    `NeighbourSelection<V,T>` | NeighbourSelector.`selection()` Given neighbour selection

    Methods in org.cpsolver.ifs.algorithms that return types with arguments of type NeighbourSelection
    Modifier and Type | Method and Description
    --- | ---
    `protected List<? extends NeighbourSelection<V,T>>` | NeighbourSearch.`getNeighbours()` Return list of neighbour selections

    Methods in org.cpsolver.ifs.algorithms with parameters of type NeighbourSelection
    Modifier and Type | Method and Description
    --- | ---
    `protected void` | NeighbourSearch.`addNeighbourSelection(NeighbourSelection<V,T> ns, double bonus)` Add neighbour selection

    Constructors in org.cpsolver.ifs.algorithms with parameters of type NeighbourSelection
    Constructor and Description
    `NeighbourSelector(NeighbourSelection<V,T> sel, double bonus, boolean update)` Constructor
    `ParallelConstruction(DataProperties config, NeighbourSelection<V,T> parent)`

  - ### Uses of NeighbourSelection in org.cpsolver.ifs.algorithms.neighbourhoods

    Classes in org.cpsolver.ifs.algorithms.neighbourhoods that implement NeighbourSelection
    Modifier and Type | Class and Description
    --- | ---
    `class` | `RandomMove<V extends Variable<V,T>,T extends Value<V,T>>` Try to assign a variable with a new value.
    `class` | `RandomSwapMove<V extends Variable<V,T>,T extends Value<V,T>>` Try to assign a variable with a new value.
    `class` | `SuggestionMove<V extends Variable<V,T>,T extends Value<V,T>>` Suggestion move.

  - ### Uses of NeighbourSelection in org.cpsolver.ifs.assignment.context

    Classes in org.cpsolver.ifs.assignment.context that implement NeighbourSelection
    Modifier and Type | Class and Description
    --- | ---
    `class` | `NeighbourSelectionWithContext<V extends Variable<V,T>,T extends Value<V,T>,C extends AssignmentContext>` A neighborhood selection with an assignment context.

  - ### Uses of NeighbourSelection in org.cpsolver.ifs.heuristics

    Classes in org.cpsolver.ifs.heuristics that implement NeighbourSelection
    Modifier and Type | Class and Description
    --- | ---
    `class` | `BacktrackNeighbourSelection<V extends Variable<V,T>,T extends Value<V,T>>` Backtracking-based neighbour selection.
    `class` | `MaxIdleNeighbourSelection<V extends Variable<V,T>,T extends Value<V,T>>` Simple extension of a provided `NeighbourSelection` that halts the construction heuristic or the IFS search when the underlying heuristic is unable to improve the number of assigned variables.
    `class` | `RoundRobinNeighbourSelection<V extends Variable<V,T>,T extends Value<V,T>>` A round robin neighbour selection.
    `class` | `StandardNeighbourSelection<V extends Variable<V,T>,T extends Value<V,T>>` Standard neighbour selection criterion.

    Fields in org.cpsolver.ifs.heuristics declared as NeighbourSelection
    Modifier and Type | Field and Description
    --- | ---
    `protected NeighbourSelection<V,T>` | MaxIdleNeighbourSelection.`iParent`

    Methods in org.cpsolver.ifs.heuristics that return NeighbourSelection
    Modifier and Type | Method and Description
    --- | ---
    `NeighbourSelection<V,T>` | RoundRobinNeighbourSelection.`getSelection()`

    Methods in org.cpsolver.ifs.heuristics with parameters of type NeighbourSelection
    Modifier and Type | Method and Description
    --- | ---
    `void` | RoundRobinNeighbourSelection.`registerSelection(NeighbourSelection<V,T> selection)` Register a neighbour selection

    Constructors in org.cpsolver.ifs.heuristics with parameters of type NeighbourSelection
    Constructor and Description
    `MaxIdleNeighbourSelection(DataProperties properties, NeighbourSelection<V,T> parent, int maxIdle)`

  - ### Uses of NeighbourSelection in org.cpsolver.ifs.solver

    Methods in org.cpsolver.ifs.solver that return NeighbourSelection
    Modifier and Type | Method and Description
    --- | ---
    `NeighbourSelection<V,T>` | Solver.`getNeighbourSelection()` Returns neighbour selection criterion

    Methods in org.cpsolver.ifs.solver with parameters of type NeighbourSelection
    Modifier and Type | Method and Description
    --- | ---
    `void` | Solver.`setNeighbourSelection(NeighbourSelection<V,T> neighbourSelection)` Sets neighbour selection criterion

  - ### Uses of NeighbourSelection in org.cpsolver.studentsct.heuristics

    Classes in org.cpsolver.studentsct.heuristics that implement NeighbourSelection
    Modifier and Type | Class and Description
    --- | ---
    `class` | `RandomizedBacktrackNeighbourSelection` Randomized backtracking-based neighbour selection.
    `class` | `RestoreBestSolution` A simple step that checks whether the best solution has improved since the last check.
    `class` | `StudentSctNeighbourSelection` (Batch) student sectioning neighbour selection.
    `class` | `TwoPhaseStudentSctNeighbourSelection` Two-phase (Batch) student sectioning neighbour selection.
    `protected class` | `TwoPhaseStudentSctNeighbourSelection.RestoreDummyStudents` Return all dummy students into the problem, executed as the last phase of the first round

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

    Classes in org.cpsolver.studentsct.heuristics.selection that implement NeighbourSelection
    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` | `CriticalStandardSelection` Use the standard IFS search for the unassigned critical course requests.
    `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` | `PriorityConstructionSelection` This selection is very much like `BranchBoundSelection`, but it works in cycles (over all the students) assigning only the first N priority courses.
    `class` | `RandomUnassignmentSelection` Random unassignment of some (randomly selected) students.
    `class` | `ResectionIncompleteStudentsSelection` Resection incomplete studends.
    `class` | `ResectionUnassignedStudentsSelection` Resection studends with empty schedule.
    `class` | `RndUnProblStudSelection` Random unassignment of some problematic students.
    `class` | `ShuffleStudentsSelection` Shuffle students along request groups.
    `static class` | `ShuffleStudentsSelection.ShuffleBacktrackNeighbourSelection` A special version of the `BacktrackNeighbourSelection` that filters the enrollments with the provided section filter.
    `class` | `StandardSelection` Use the provided variable and value selection for some time.
    `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 NeighbourSelection in org.cpsolver.studentsct.online.selection

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