org.cpsolver.coursett.criteria.additional

## Class StudentOverLunchConflict

- 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.StudentOverLunchConflict

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

      public class StudentOverLunchConflict
      extends StudentConflict

  An experimental criterion that tries to keep student all classes before or after the lunch period. There is a conflict (penalized by Comparator.StudentOverLunchConflictWeight parameter) every time when a student has two classes, one in the morning (starting before or at the lunch period) and one in the afternoon (starting after lunch period). When StudentConflict.OverLunchSameDayOnly is true, only conflicts between classes that are on the same day are counted. The lunch period is defined by StudentConflict.NoonSlot parameter (defaults to 144).
  Version:
    CourseTT 1.3 (University Course Timetabling)
    Copyright (C) 2013 - 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
    `StudentOverLunchConflict()`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `configure(DataProperties properties)` Configure the criterion if needed
    `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).
    `boolean` | `inConflict(Placement p1, Placement p2)` There is a conflict when `isMorning(Placement)` differs for the two placements.
    `boolean` | `isApplicable(Lecture l1, Lecture l2)`
    `boolean` | `isMorning(Placement placement)` Is the given placement in the morning or in the afternoon?
    `boolean` | `shareDays(Placement p1, Placement p2)` Are the two placements at the same day?

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

      `applicable, bestRestored, committed, distance, getBounds, getBounds, getMetrics, getValue, getValue, hard, ignore, incJenrl, isApplicable, jointEnrollment, jointEnrollment, 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

    - #### StudentOverLunchConflict

          public StudentOverLunchConflict()

  - ### Method Detail

    - #### configure

          public void configure(DataProperties properties)

      Description copied from interface: `Criterion`
      Configure the criterion if needed
      Specified by:
        `configure` in interface `Criterion<Lecture,Placement>`
      Overrides:
        `configure` in class `StudentConflict`
      Parameters:
        `properties` - configuration

    - #### shareDays

          public boolean shareDays(Placement p1,
                                   Placement p2)

      Are the two placements at the same day? True when the two placements share days and weeks.

    - #### isMorning

          public boolean isMorning(Placement placement)

      Is the given placement in the morning or in the afternoon?

    - #### inConflict

          public boolean inConflict(Placement p1,
                                    Placement p2)

      There is a conflict when `isMorning(Placement)` differs for the two placements. When parameter StudentConflict.OverLunchSameDayOnly is true, only conflicts that are on the same day (`shareDays(Placement, Placement)` returns true) are counted.
      Overrides:
        `inConflict` in class `StudentConflict`

    - #### isApplicable

          public boolean isApplicable(Lecture l1,
                                      Lecture l2)

      Overrides:
        `isApplicable` 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