org.cpsolver.coursett.criteria.additional

## Class StudentMinimizeScheduleHoles

- java.lang.Object
- - org.cpsolver.ifs.criteria.AbstractCriterion<Lecture,Placement>
  - - org.cpsolver.coursett.criteria.TimetablingCriterion
    - - org.cpsolver.coursett.criteria.StudentConflict
      - - org.cpsolver.coursett.criteria.additional.StudentMinimizeScheduleHoles

- All Implemented Interfaces:
    CanHoldContext, HasAssignmentContext<Lecture,Placement,AbstractCriterion.ValueContext>, Criterion<Lecture,Placement>, ExtendedInfoProvider<Lecture,Placement>, InfoProvider<Lecture,Placement>, ModelListener<Lecture,Placement>

      public class StudentMinimizeScheduleHoles
      extends StudentConflict

  Naive, yet effective approach for minimizing holes in student schedule. This criterion is based on `StudentConflict` and it penalizes all cases where a student has two classes taught on the same day that are not back-to-back. The penalisation is based on the time distance between the two classes, computed in hours. These penalties are weighted by Comparator.MinimizeStudentScheduleHolesWeight, which defaults to 1/20 of the Comparator.StudentConflictWeight.
  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/.
  Author:
    Tomáš Müller

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class org.cpsolver.ifs.criteria.AbstractCriterion

      `AbstractCriterion.ValueContext, AbstractCriterion.ValueUpdateType`

  - ### Field Summary

    - ### Fields inherited from class org.cpsolver.coursett.criteria.StudentConflict

      `iIncludeConflicts`

    - ### Fields inherited from class org.cpsolver.ifs.criteria.AbstractCriterion

      `iBest, iDebug, iWeight, sDoubleFormat, sPercentFormat`

    - ### Fields inherited from interface org.cpsolver.ifs.assignment.context.CanHoldContext

      `sMaxSize`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `StudentMinimizeScheduleHoles()`

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `static double` | `btbDistance(Placement p1, Placement p2)` Time distance between two placements in hours.
    `void` | `getInfo(Assignment<Lecture,Placement> assignment, Map<String,String> info)` Adds some information into the table with information about the solution
    `void` | `getInfo(Assignment<Lecture,Placement> assignment, Map<String,String> info, Collection<Lecture> variables)` Adds some information into the table with information about the solution, only consider variables from the given set
    `String` | `getPlacementSelectionWeightName()`
    `double` | `getWeightDefault(DataProperties config)` Defines default weight (when `AbstractCriterion.getWeightName()` parameter is not present in the criterion).
    `void` | `incJenrl(Assignment<Lecture,Placement> assignment, JenrlConstraint jenrl, double studentWeight, Double conflictPriority, Student student)`
    `boolean` | `inConflict(Placement p1, Placement p2)`
    `boolean` | `isApplicable(Lecture l1, Lecture l2)`
    `protected double` | `jointEnrollment(JenrlConstraint jenrl)`
    `protected double` | `jointEnrollment(JenrlConstraint jenrl, Placement p1, Placement p2)`

    - ### Methods inherited from class org.cpsolver.coursett.criteria.StudentConflict

      `applicable, bestRestored, committed, configure, distance, getBounds, getBounds, getMetrics, getValue, getValue, hard, ignore, isApplicable, overlaps, slots, uncommitted, workday`

    - ### Methods inherited from class org.cpsolver.coursett.criteria.TimetablingCriterion

      `getPlacementSelectionAdjustmentsName, getPlacementSelectionWeight, getPlacementSelectionWeightDefault`

    - ### Methods inherited from class org.cpsolver.ifs.criteria.AbstractCriterion

      `afterAssigned, afterUnassigned, beforeAssigned, beforeUnassigned, bestSaved, clearCache, computeBounds, constraintAdded, constraintRemoved, createAssignmentContext, getAbbreviation, getAssignmentContextReference, getBest, getBounds, getBounds, getContext, getContext, getExtendedInfo, getModel, getName, getPerc, getPercentage, getPercRev, getValue, getValue, getValue, getValueUpdateType, getWeight, getWeightedBest, getWeightedValue, getWeightedValue, getWeightedValue, getWeightedValue, getWeightedValue, getWeightedValue, getWeightName, inc, inc, init, setAssignmentContextReference, setModel, setValueUpdateType, toString, variableAdded, variableRemoved`

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

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

- - ### Constructor Detail

    - #### StudentMinimizeScheduleHoles

          public StudentMinimizeScheduleHoles()

  - ### Method Detail

    - #### btbDistance

          public static double btbDistance(Placement p1,
                                           Placement p2)

      Time distance between two placements in hours. The classes must be on the same days and weeks, but not overlapping in time. If the two classes are taught on multiple days during the week, the distance is also multiplied by the number of shared days of week.
      Parameters:
        `p1` - first placement
        `p2` - second placement
      Returns:
        distance between the two classes in hours

    - #### inConflict

          public boolean inConflict(Placement p1,
                                    Placement p2)

      Overrides:
        `inConflict` in class `StudentConflict`

    - #### jointEnrollment

          protected double jointEnrollment(JenrlConstraint jenrl,
                                           Placement p1,
                                           Placement p2)

      Overrides:
        `jointEnrollment` in class `StudentConflict`

    - #### jointEnrollment

          protected double jointEnrollment(JenrlConstraint jenrl)

      Overrides:
        `jointEnrollment` in class `StudentConflict`

    - #### isApplicable

          public boolean isApplicable(Lecture l1,
                                      Lecture l2)

      Overrides:
        `isApplicable` in class `StudentConflict`

    - #### incJenrl

          public void incJenrl(Assignment<Lecture,Placement> assignment,
                               JenrlConstraint jenrl,
                               double studentWeight,
                               Double conflictPriority,
                               Student student)

      Overrides:
        `incJenrl` in class `StudentConflict`

    - #### getWeightDefault

          public double getWeightDefault(DataProperties config)

      Description copied from class: `AbstractCriterion`
      Defines default weight (when `AbstractCriterion.getWeightName()` parameter is not present in the criterion).
      Overrides:
        `getWeightDefault` in class `AbstractCriterion<Lecture,Placement>`
      Parameters:
        `config` - solver configuration
      Returns:
        default criterion weight value

    - #### getPlacementSelectionWeightName

          public String getPlacementSelectionWeightName()

      Overrides:
        `getPlacementSelectionWeightName` in class `StudentConflict`

    - #### getInfo

          public void getInfo(Assignment<Lecture,Placement> assignment,
                              Map<String,String> info)

      Description copied from interface: `InfoProvider`
      Adds some information into the table with information about the solution
      Specified by:
        `getInfo` in interface `InfoProvider<Lecture,Placement>`
      Overrides:
        `getInfo` in class `AbstractCriterion<Lecture,Placement>`
      Parameters:
        `assignment` - current assignment
        `info` - info table

    - #### getInfo

          public void getInfo(Assignment<Lecture,Placement> assignment,
                              Map<String,String> info,
                              Collection<Lecture> variables)

      Description copied from interface: `InfoProvider`
      Adds some information into the table with information about the solution, only consider variables from the given set
      Specified by:
        `getInfo` in interface `InfoProvider<Lecture,Placement>`
      Overrides:
        `getInfo` in class `AbstractCriterion<Lecture,Placement>`
      Parameters:
        `assignment` - current assignment
        `info` - info table
        `variables` - sub-problem