org.cpsolver.studentsct.heuristics.selection

## Class OnlineSelection

- java.lang.Object
- - org.cpsolver.studentsct.heuristics.selection.BranchBoundSelection
  - - org.cpsolver.studentsct.heuristics.selection.OnlineSelection

- All Implemented Interfaces:
    NeighbourSelection<Request,Enrollment>, InfoProvider<Request,Enrollment>, SolverListener<Request,Enrollment>

      public class OnlineSelection
      extends BranchBoundSelection

  Section given student using branch & bound algorithm with no unassignments allowed.
  Parameters:

  Related Solver Parameters
  Parameter | Type | Comment
  --- | --- | ---
  Sectioning.UseStudentPreferencePenalties | `Boolean` | If true, `StudentPreferencePenalties` are used
  Sectioning.Distribution | `Integer` | When student preference penalties are used, defines which distribution is to be used (one of `StudentPreferencePenalties.sDistTypePreference`, `StudentPreferencePenalties.sDistTypePreferenceQuadratic`, `StudentPreferencePenalties.sDistTypePreferenceReverse`, `StudentPreferencePenalties.sDistTypeUniform`)
  Sectioning.UseOnlinePenalties | `Boolean` | If true, online sectioning penalties computed based on held/expected space are used.
  Sectioning.Epsilon | `Double` | When both online penalties and student preference penalties are used: a solution based on online penalties is computed first, this solution (and the given epsilon) is then used to setup bounds on online penalties for the solution that minimizes student preference penalties. Limit on online penalty is computed as (1+Section.Epsilon) `BranchBoundSelection.Selection.getPenalty()`, i.e., only sections with penalty equal or below this limit can be used -- among these the solution that minimizes student preference penalties is computed.

  Version:
    StudentSct 1.3 (Student Sectioning)
    Copyright (C) 2007 - 2014 Tomáš Müller
    muller@unitime.org
    http://muller.unitime.org
    This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
    This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
    You should have received a copy of the GNU Lesser General Public License along with this library; if not see http://www.gnu.org/licenses/.
  Author:
    Tomáš Müller

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `class` | `OnlineSelection.EpsilonSelection` Branch & bound selection for a student

    - ### Nested classes/interfaces inherited from class org.cpsolver.studentsct.heuristics.selection.BranchBoundSelection

      `BranchBoundSelection.BranchBoundNeighbour, BranchBoundSelection.Selection`

  - ### Field Summary

    - ### Fields inherited from class org.cpsolver.studentsct.heuristics.selection.BranchBoundSelection

      `iBranchWhenSelectedHasNoConflict, iDistanceConflict, iDistConfWeight, iFilter, iMinimizePenalty, iModel, iNbrIterations, iNbrNoSolution, iNbrTimeoutReached, iOrder, iStudentQuality, iStudents, iTimeout, iTimeOverlaps, iTimesToAvoidHeuristics, iTotalTime, sDebug`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `OnlineSelection(DataProperties properties)` Constructor

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `BranchBoundSelection.Selection` | `getSelection(Assignment<Request,Enrollment> assignment, Student student)` Branch & bound selection for a student
    `void` | `init(Solver<Request,Enrollment> solver)` Criterion initialization
    `boolean` | `isUsePenalties()` Use online penalties
    `boolean` | `isUseStudentPrefPenalties()` Use student preference penalties
    `void` | `updateSpace(Assignment<Request,Enrollment> assignment, Student student)` Update online sectioning info after the given student is sectioned

    - ### Methods inherited from class org.cpsolver.studentsct.heuristics.selection.BranchBoundSelection

      `addStudent, getFilter, getInfo, getInfo, init, neighbourFailed, neighbourSelected, nextStudent, selectNeighbour, setModel, valueSelected, variableSelected, withFilter`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### OnlineSelection

          public OnlineSelection(DataProperties properties)

      Constructor
      Parameters:
        `properties` - configuration

  - ### Method Detail

    - #### init

          public void init(Solver<Request,Enrollment> solver)

      Description copied from interface: `NeighbourSelection`
      Criterion initialization
      Specified by:
        `init` in interface `NeighbourSelection<Request,Enrollment>`
      Overrides:
        `init` in class `BranchBoundSelection`
      Parameters:
        `solver` - current solver

    - #### isUseStudentPrefPenalties

          public boolean isUseStudentPrefPenalties()

      Use student preference penalties
      Returns:
        true if student preference penalties are to be used

    - #### isUsePenalties

          public boolean isUsePenalties()

      Use online penalties
      Returns:
        true if online penalties are to be used

    - #### updateSpace

          public void updateSpace(Assignment<Request,Enrollment> assignment,
                                  Student student)

      Update online sectioning info after the given student is sectioned
      Parameters:
        `assignment` - current assignment
        `student` - student in question

    - #### getSelection

          public BranchBoundSelection.Selection getSelection(Assignment<Request,Enrollment> assignment,
                                                             Student student)

      Branch & bound selection for a student
      Overrides:
        `getSelection` in class `BranchBoundSelection`
      Parameters:
        `assignment` - current assignment
        `student` - selected student
      Returns:
        selection