org.cpsolver.coursett.heuristics

## Class PlacementSelection

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

- All Implemented Interfaces:
    ValueSelection<Lecture,Placement>

      public class PlacementSelection
      extends Object
      implements ValueSelection<Lecture,Placement>

  Placement (value) selection.
  We have implemented a hierarchical handling of the value selection criteria (see `HeuristicSelector`).
  The value selection heuristics also allow for random selection of a value with a given probability (random walk, e.g., 2%) and, in the case of MPP, to select the initial value (if it exists) with a given probability (e.g., 70%).
  Parameters (general):

  Related Solver Parameters
  Parameter | Type | Comment
  --- | --- | ---
  Placement.RandomWalkProb | `Double` | Random walk probability
  Placement.GoodSelectionProb | `Double` | Good value (not removed from domain) selection probability (MAC related)
  Placement.TabuLength | `Integer` | Tabu-list length (-1 means do not use tabu-list)
  Placement.MPP_InitialProb | `Double` | MPP initial selection probability
  Placement.MPP_Limit | `Integer` | MPP: limit on the number of perturbations (-1 for no limit)
  Placement.MPP_PenaltyLimit | `Double` | MPP: limit on the perturbations penalty (-1 for no limit)

  Parameters (for each level of selection):

  Related Solver Parameters
  Parameter | Type | Comment
  --- | --- | ---
  Placement.NrAssignmentsWeight1 Placement.NrAssignmentsWeight2 Placement.NrAssignmentsWeight3 | `Double` | Number of previous assignments of the value weight
  Placement.NrConflictsWeight1,2,3 | `Double` | Number of conflicts weight
  Placement.WeightedConflictsWeight1,2,3 | `Double` | Weighted conflicts weight (Conflict-based Statistics related)
  Placement.NrPotentialConflictsWeight1,2,3 | `Double` | Number of potential conflicts weight (Conflict-based Statistics related)
  Placement.MPP_DeltaInitialAssignmentWeight1,2,3 | `Double` | Delta initial assigments weight (MPP, violated initials related)
  Placement.NrHardStudConfsWeight1,2,3 | `Double` | Hard student conflicts weight (student conflicts between single-section classes)
  Placement.NrStudConfsWeight1,2,3 | `Double` | Student conflicts weight
  Placement.TimePreferenceWeight1,2,3 | `Double` | Time preference weight
  Placement.DeltaTimePreferenceWeight1,2,3 | `Double` | Time preference delta weight (difference between before and after assignemnt of the value)
  Placement.ConstrPreferenceWeight1,2,3 | `Double` | Constraint preference weight
  Placement.RoomPreferenceWeight1,2,3 | `Double` | Room preference weight
  Placement.UselessSlotsWeight1,2,3 | `Double` | Useless slot weight
  Placement.TooBigRoomWeight1,2,3 | `Double` | Too big room weight
  Placement.DistanceInstructorPreferenceWeight1,2,3 | `Double` | Distance (of the rooms of the back-to-back classes) based instructor preferences weight
  Placement.DeptSpreadPenaltyWeight1,2,3 | `Double` | Department spreading: penalty of when a slot over initial allowance is used
  Placement.ThresholdKoef1,2 | `Double` | Threshold koeficient of the level

  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`

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static String` | `GOOD_SELECTION_PROB`
    `static String` | `INITIAL_SELECTION_PROB`
    `static String` | `NR_MPP_LIMIT`
    `static String` | `NR_MPP_PENALTY_LIMIT`
    `static String` | `NR_THRESHOLD_KOEF`
    `static String` | `RW_SELECTION_PROB`
    `static String` | `TABU_LENGTH`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `PlacementSelection(DataProperties properties)`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `boolean` | `containsItselfSingletonOrCommited(TimetableModel model, Set<Placement> values, Placement selectedValue)`
    `void` | `init(Solver<Lecture,Placement> solver)` Initialization
    `Placement` | `selectValue(Solution<Lecture,Placement> solution, Lecture var)` Value selection

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

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

- - ### Field Detail

    - #### GOOD_SELECTION_PROB

          public static final String GOOD_SELECTION_PROB

      See Also:
        Constant Field Values

    - #### RW_SELECTION_PROB

          public static final String RW_SELECTION_PROB

      See Also:
        Constant Field Values

    - #### INITIAL_SELECTION_PROB

          public static final String INITIAL_SELECTION_PROB

      See Also:
        Constant Field Values

    - #### NR_MPP_LIMIT

          public static final String NR_MPP_LIMIT

      See Also:
        Constant Field Values

    - #### NR_MPP_PENALTY_LIMIT

          public static final String NR_MPP_PENALTY_LIMIT

      See Also:
        Constant Field Values

    - #### NR_THRESHOLD_KOEF

          public static final String NR_THRESHOLD_KOEF

      See Also:
        Constant Field Values

    - #### TABU_LENGTH

          public static final String TABU_LENGTH

      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### PlacementSelection

          public PlacementSelection(DataProperties properties)

  - ### Method Detail

    - #### init

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

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

    - #### selectValue

          public Placement selectValue(Solution<Lecture,Placement> solution,
                                       Lecture var)

      Description copied from interface: `ValueSelection`
      Value selection
      Specified by:
        `selectValue` in interface `ValueSelection<Lecture,Placement>`
      Parameters:
        `solution` - current solution
        `var` - selected variable
      Returns:
        selected value (of the given variable)

    - #### containsItselfSingletonOrCommited

          public boolean containsItselfSingletonOrCommited(TimetableModel model,
                                                           Set<Placement> values,
                                                           Placement selectedValue)