org.cpsolver.coursett.heuristics

## Class LectureSelection

- java.lang.Object
- - org.cpsolver.coursett.heuristics.LectureSelection

- All Implemented Interfaces:
    VariableSelection<Lecture,Placement>

      public class LectureSelection
      extends Object
      implements VariableSelection<Lecture,Placement>

  Lecture (variable) selection.
  If there are one or more variables unassigned, the variable selection criterion picks one of them randomly. We have tried several approaches using domain sizes, number of previous assignments, numbers of constraints in which the variable participates, etc., but there was no significant improvement in this timetabling problem towards the random selection of an unassigned variable. The reason is, that it is easy to go back when a wrong variable is picked - such a variable is unassigned when there is a conflict with it in some of the subsequent iterations.
  When all variables are assigned, an evaluation is made for each variable according to the above described weights. The variable with the worst evaluation is selected. This variable promises the best improvement in optimization.
  Parameters (selection among unassigned lectures):

  Parameter | Type | Comment
  --- | --- | ---
  Lecture.RouletteWheelSelection | `Boolean` | Roulette wheel selection
  Lecture.RandomWalkProb | `Double` | Random walk probability
  Lecture.DomainSizeWeight | `Double` | Domain size weight
  Lecture.NrAssignmentsWeight | `Double` | Number of assignments weight
  Lecture.InitialAssignmentWeight | `Double` | Initial assignment weight
  Lecture.NrConstraintsWeight | `Double` | Number of constraint weight

  Parameters (selection among assigned lectures, when the solution is complete):

  Parameter | Type | Comment
  --- | --- | ---
  Comparator.HardStudentConflictWeight | `Double` | Hard student conflict weight
  Comparator.StudentConflictWeight | `Double` | Student conflict weight
  Comparator.TimePreferenceWeight | `Double` | Time preference weight
  Comparator.ContrPreferenceWeight | `Double` | Group constraint preference weight
  Comparator.RoomPreferenceWeight | `Double` | Room preference weight
  Comparator.UselessSlotWeight | `Double` | Useless slot weight
  Comparator.TooBigRoomWeight | `Double` | Too big room weight
  Comparator.DistanceInstructorPreferenceWeight | `Double` | Distance (of the rooms of the back-to-back classes) based instructor preferences weight
  Comparator.DeptSpreadPenaltyWeight | `Double` | Department balancing penalty (see `DepartmentSpreadConstraint`)

  Parameters (selection among subset of lectures (faster)):

  Parameter | Type | Comment
  --- | --- | ---
  Lecture.SelectionSubSet | `Boolean` | Selection among subset of lectures (faster)
  Lecture.SelectionSubSetMinSize | `Double` | Minimal subset size
  Lecture.SelectionSubSetPart | `Double` | Subset size in percentage of all lectures available for selection

  Version:
    CourseTT 1.3 (University Course Timetabling)
    Copyright (C) 2006 - 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/.
  See Also:
    `PlacementSelection`

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `LectureSelection(DataProperties properties)`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `init(Solver<Lecture,Placement> solver)` Initialization
    `Lecture` | `selectVariable(Solution<Lecture,Placement> solution)` Variable selection

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

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

- - ### Constructor Detail

    - #### LectureSelection

          public LectureSelection(DataProperties properties)

  - ### Method Detail

    - #### init

          public void init(Solver<Lecture,Placement> solver)

      Description copied from interface: `VariableSelection`
      Initialization
      Specified by:
        `init` in interface `VariableSelection<Lecture,Placement>`
      Parameters:
        `solver` - current solver

    - #### selectVariable

          public Lecture selectVariable(Solution<Lecture,Placement> solution)

      Description copied from interface: `VariableSelection`
      Variable selection
      Specified by:
        `selectVariable` in interface `VariableSelection<Lecture,Placement>`
      Parameters:
        `solution` - current solution
      Returns:
        selected variable