net.sf.cpsolver.studentsct.constraint
Class ReservationLimit

java.lang.Object
  extended by net.sf.cpsolver.ifs.model.Constraint<V,T>
      extended by net.sf.cpsolver.ifs.model.GlobalConstraint<Request,Enrollment>
          extended by net.sf.cpsolver.studentsct.constraint.ReservationLimit
All Implemented Interfaces:
Comparable<Constraint<Request,Enrollment>>

public class ReservationLimit
extends GlobalConstraint<Request,Enrollment>

Reservation limit constraint. This global constraint ensures that a limit of each reservation is not exceeded. This means that the total sum of weights of course requests (see Request.getWeight()) enrolled into a reservation is below the reservation's limit (see Reservation.getLimit()). It also ensures that the desired space is reserved in the enrollment's offering and configuration.

Parameters:

Parameter Type Comment
ReservationLimit.PreferDummyStudents Boolean If true, requests of dummy (last-like) students are preferred to be selected as conflicting.


Version:
StudentSct 1.2 (Student Sectioning)
Copyright (C) 2007 - 2010 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/.

Field Summary
 
Fields inherited from class net.sf.cpsolver.ifs.model.Constraint
iAssignedVariables, iConstraintListeners, iId
 
Constructor Summary
ReservationLimit(DataProperties cfg)
          Constructor
 
Method Summary
 void computeConflicts(Enrollment enrollment, Set<Enrollment> conflicts)
          A given enrollment is conflicting, if the reservation's remaning available space (computed by Reservation.getReservedAvailableSpace(Request)) is below the requests weight Request.getWeight().
static double getUnreservedSpace(Config config, Request request)
          Remaining unreserved space in a config if the given request is assigned.
 boolean inConflict(Enrollment enrollment)
          A given enrollment is conflicting, if the config's enrollment (computed by ConfigLimit.getEnrollmentWeight(Config, Request)) exceeds the limit.
 String toString()
           
 
Methods inherited from class net.sf.cpsolver.ifs.model.GlobalConstraint
addVariable, assigned, assignedVariables, removeVariable, unassigned, variables
 
Methods inherited from class net.sf.cpsolver.ifs.model.Constraint
addConstraintListener, compareTo, constraintListeners, countAssignedVariables, countVariables, equals, getDescription, getId, getModel, getName, hashCode, isConsistent, isHard, removeConstraintListener, setModel
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Constructor Detail

ReservationLimit

public ReservationLimit(DataProperties cfg)
Constructor

Parameters:
cfg - solver configuration
Method Detail

getUnreservedSpace

public static double getUnreservedSpace(Config config,
                                        Request request)
Remaining unreserved space in a config if the given request is assigned. In order to overcome rounding problems with last-like students ( e.g., 5 students are projected to two sections of limit 2 -- each section can have up to 3 of these last-like students), the weight of the request with the highest weight in the section is changed to a small nominal weight.

Parameters:
config - a config that is of concern
request - a request of a student to be assigned containing the given section
Returns:
config's new unreserved space

computeConflicts

public void computeConflicts(Enrollment enrollment,
                             Set<Enrollment> conflicts)
A given enrollment is conflicting, if the reservation's remaning available space (computed by Reservation.getReservedAvailableSpace(Request)) is below the requests weight Request.getWeight().
If the limit is breached, one or more existing enrollments are selected as conflicting until there is enough space in the reservation. Similarly, if the enrollment does not have the reservation, it is checked that there is enough unreserved space in the desired configuration.

Specified by:
computeConflicts in class Constraint<Request,Enrollment>
Parameters:
enrollment - Enrollment that is being considered
conflicts - all computed conflicting requests are added into this set

inConflict

public boolean inConflict(Enrollment enrollment)
A given enrollment is conflicting, if the config's enrollment (computed by ConfigLimit.getEnrollmentWeight(Config, Request)) exceeds the limit.

Overrides:
inConflict in class Constraint<Request,Enrollment>
Parameters:
enrollment - Enrollment that is being considered
Returns:
true, if the enrollment cannot be assigned without exceeding the limit

toString

public String toString()
Overrides:
toString in class Object