org.cpsolver.exam.criteria

## Class RoomSizePenalty

- java.lang.Object
- - org.cpsolver.ifs.criteria.AbstractCriterion<Exam,ExamPlacement>
  - - org.cpsolver.exam.criteria.ExamCriterion
    - - org.cpsolver.exam.criteria.RoomSizePenalty

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

      public class RoomSizePenalty
      extends ExamCriterion

  Cost for using room(s) that are too big. I.e., a difference between total room size (computed using either `ExamRoom.getSize()` or `ExamRoom.getAltSize()` based on `Exam.hasAltSeating()`) and the number of students `Exam.getSize()`.
  A weight for room size penalty can be set by problem property Exams.RoomSizeWeight, or in the input xml file, property roomSizeWeight).
  The difference function can be made polynomial by using Exams.RoomSizeFactor parameter (defaults to 1.0). The value of this criteria is then cubed by the power of this room size factor. This is to be able to favor a room swap between two exams at the same period, in which a smaller exam takes a smaller room. To do this, set Exams.RoomSizeFactor to a number bigger than one that is close to one (e.g., 1.05).
  Version:
    ExamTT 1.3 (Examination Timetabling)
    Copyright (C) 2008 - 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.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
    `RoomSizePenalty()`

  - ### 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<Exam,ExamPlacement> assignment, Map<String,String> info)` Adds some information into the table with information about the solution
    `double` | `getValue(Assignment<Exam,ExamPlacement> assignment, ExamPlacement value, Set<ExamPlacement> conflicts)` Value of a proposed assignment (including hard conflicts)
    `double` | `getWeightDefault(DataProperties config)` Defines default weight (when `AbstractCriterion.getWeightName()` parameter is not present in the criterion).
    `String` | `getWeightName()` Defines weight name (to be used to get the criterion weight from the configuration).
    `void` | `getXmlParameters(Map<String,String> params)` Put all the parameters of this criterion into a map that is used to write parameters section of the examination XML file.
    `String` | `getXmlWeightName()` Name of the weight parameter in the parameters section of the examination XML file.
    `boolean` | `isPeriodCriterion()` True if this criterion is based on period assignment.
    `void` | `setModel(Model<Exam,ExamPlacement> model)` called when the criterion is added to a model
    `void` | `setXmlParameters(Map<String,String> params)` Set all the parameters of this criterion from a map that is read from the parameters section the examination XML file.
    `String` | `toString(Assignment<Exam,ExamPlacement> assignment)` Simple text representation of the criterion and its value.

    - ### Methods inherited from class org.cpsolver.exam.criteria.ExamCriterion

      `getBounds, getPeriodValue, getRoomValue, isRoomCriterion, setWeight`

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

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

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

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

- - ### Constructor Detail

    - #### RoomSizePenalty

          public RoomSizePenalty()

  - ### Method Detail

    - #### configure

          public void configure(DataProperties properties)

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

    - #### setModel

          public void setModel(Model<Exam,ExamPlacement> model)

      Description copied from interface: `Criterion`
      called when the criterion is added to a model
      Specified by:
        `setModel` in interface `Criterion<Exam,ExamPlacement>`
      Overrides:
        `setModel` in class `AbstractCriterion<Exam,ExamPlacement>`
      Parameters:
        `model` - problem model

    - #### getWeightName

          public String getWeightName()

      Description copied from class: `AbstractCriterion`
      Defines weight name (to be used to get the criterion weight from the configuration).
      Overrides:
        `getWeightName` in class `ExamCriterion`
      Returns:
        name of the weight associated with this criterion

    - #### getXmlWeightName

          public String getXmlWeightName()

      Description copied from class: `ExamCriterion`
      Name of the weight parameter in the parameters section of the examination XML file.
      Overrides:
        `getXmlWeightName` in class `ExamCriterion`
      Returns:
        name of the weight parameter in the XML

    - #### 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<Exam,ExamPlacement>`
      Parameters:
        `config` - solver configuration
      Returns:
        default criterion weight value

    - #### getXmlParameters

          public void getXmlParameters(Map<String,String> params)

      Description copied from class: `ExamCriterion`
      Put all the parameters of this criterion into a map that is used to write parameters section of the examination XML file.
      Overrides:
        `getXmlParameters` in class `ExamCriterion`
      Parameters:
        `params` - map of parameters (parameter = value) to be populated

    - #### setXmlParameters

          public void setXmlParameters(Map<String,String> params)

      Description copied from class: `ExamCriterion`
      Set all the parameters of this criterion from a map that is read from the parameters section the examination XML file.
      Overrides:
        `setXmlParameters` in class `ExamCriterion`
      Parameters:
        `params` - map of parameters (parameter = value) loaded from XML

    - #### getValue

          public double getValue(Assignment<Exam,ExamPlacement> assignment,
                                 ExamPlacement value,
                                 Set<ExamPlacement> conflicts)

      Description copied from interface: `Criterion`
      Value of a proposed assignment (including hard conflicts)
      Parameters:
        `assignment` - current assignment
        `value` - given value
        `conflicts` - values conflicting with the given value
      Returns:
        change in this criterion value when assigned

    - #### getInfo

          public void getInfo(Assignment<Exam,ExamPlacement> 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<Exam,ExamPlacement>`
      Overrides:
        `getInfo` in class `ExamCriterion`
      Parameters:
        `assignment` - current assignment
        `info` - info table

    - #### toString

          public String toString(Assignment<Exam,ExamPlacement> assignment)

      Description copied from class: `AbstractCriterion`
      Simple text representation of the criterion and its value. E.g., X:x where X is the `AbstractCriterion.getAbbreviation()` and x is the current value `AbstractCriterion.getValue(Assignment)`.
      Specified by:
        `toString` in interface `Criterion<Exam,ExamPlacement>`
      Overrides:
        `toString` in class `AbstractCriterion<Exam,ExamPlacement>`
      Parameters:
        `assignment` - current assignment
      Returns:
        short string representation (e.g., PP:95% for period preference)

    - #### isPeriodCriterion

          public boolean isPeriodCriterion()

      Description copied from class: `ExamCriterion`
      True if this criterion is based on period assignment. Used by `ExamPlacement.getTimeCost(Assignment)`.
      Overrides:
        `isPeriodCriterion` in class `ExamCriterion`
      Returns:
        true if this criterion is based on period assignment