org.cpsolver.coursett.criteria.additional

## Class StudentOnlineConflict

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

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

      public class StudentOnlineConflict
      extends StudentConflict

  An experimental criterion that tries to minimize cases where a student has an online and in-person class on the same day. Online classes are identified by a regular expression matching the room name and set in the General.OnlineRoom parameter (defaults to (?i)ONLINE|). Classes without a room are considered online when the General.OnlineRoom parameter matches a blank string. If a class has multiple rooms, all rooms must be online for the class to be considered online. The criterion is weighted by the Comparator.StudentOnlineConflictWeight parameter, defaults to one half of the Comparator.StudentConflictWeight.
  Version:
    CourseTT 1.3 (University Course Timetabling)
    Copyright (C) 2013 - 2023 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
    `StudentOnlineConflict()`

  - ### 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 `isOnline(Placement)` differs for the two placements and they are placed on the same day (`shareDays(Placement, Placement)` returns true).
    `boolean` | `isApplicable(Lecture l1, Lecture l2)`
    `boolean` | `isOnline(Placement p)`
    `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

    - #### StudentOnlineConflict

          public StudentOnlineConflict()

  - ### 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

    - #### isOnline

          public boolean isOnline(Placement p)

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

    - #### inConflict

          public boolean inConflict(Placement p1,
                                    Placement p2)

      There is a conflict when `isOnline(Placement)` differs for the two placements and they are placed on the same day (`shareDays(Placement, Placement)` returns true).
      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