net.sf.cpsolver.exam.model
Class ExamStudent

java.lang.Object
  extended by net.sf.cpsolver.ifs.model.Constraint
      extended by net.sf.cpsolver.exam.model.ExamStudent
All Implemented Interfaces:
Comparable

public class ExamStudent
extends Constraint
implements Comparable

A student.

Version:
ExamTT 1.1 (Examination Timetabling)
Copyright (C) 2008 Tomáš Müller
muller@unitime.org
Lazenska 391, 76314 Zlin, Czech Republic

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 2.1 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

Field Summary
 
Fields inherited from class net.sf.cpsolver.ifs.model.Constraint
iAssignedVariables, iConstraintListeners, iId
 
Constructor Summary
ExamStudent(ExamModel model, long id)
          Constructor
 
Method Summary
 void afterAssigned(long iteration, Value value)
          An exam was assigned, update student assignment table
 void afterUnassigned(long iteration, Value value)
          An exam was unassigned, update student assignment table
 boolean canConflict(Exam ex1, Exam ex2)
          True if the given two exams can have a direct student conflict with this student, i.e., they can be placed at the same period.
 int compareTo(Object o)
          Compare two students (by student ids)
 void computeConflicts(Value value, Set conflicts)
          Compute conflicts between the given assignment of an exam and all the current assignments (of this student).
 boolean equals(Object o)
          Compare two student for equality
 Set getExams(ExamPeriod period)
          Exam(s) enrolled by the student that are scheduled in the given period
 Set getExamsADay(ExamPeriod period)
          Exam(s) enrolled by the student that are scheduled in the given day
 Set getExamsADay(int day)
          Exam(s) enrolled by the student that are scheduled in the given day
 Vector getOwners()
          Courses and/or sections that this student is enrolled to
 int hashCode()
          Hash code
 boolean inConflict(Value value)
          Check whether there is a conflict between the given assignment of an exam and all the current assignments (of this student).
 boolean isAllowDirectConflicts()
          True if direct student conflicts are allowed for this student
 boolean isAvailable(ExamPeriod period)
          True if the student is available (for examination timetabling) during the given period
 boolean isConsistent(Value value1, Value value2)
          True if the given exams can conflict (see canConflict(Exam, Exam)), or if they are placed at different periods.
 boolean isHard()
          Constraint is hard if isAllowDirectConflicts() is false.
 void setAllowDirectConflicts(boolean allowDirectConflicts)
          Set whether direct student conflicts are allowed for this student
 void setAvailable(int period, boolean available)
          Set whether the student is available (for examination timetabling) during the given period
 String toString()
          Student unique id
 
Methods inherited from class net.sf.cpsolver.ifs.model.Constraint
addConstraintListener, addVariable, assigned, assignedVariables, constraintListeners, countAssignedVariables, countVariables, getDescription, getId, getModel, getName, removeConstraintListener, removeVariable, setModel, unassigned, variables
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Constructor Detail

ExamStudent

public ExamStudent(ExamModel model,
                   long id)
Constructor

Parameters:
model - examination timetabling model
id - student unique id
Method Detail

isAllowDirectConflicts

public boolean isAllowDirectConflicts()
True if direct student conflicts are allowed for this student


setAllowDirectConflicts

public void setAllowDirectConflicts(boolean allowDirectConflicts)
Set whether direct student conflicts are allowed for this student


canConflict

public boolean canConflict(Exam ex1,
                           Exam ex2)
True if the given two exams can have a direct student conflict with this student, i.e., they can be placed at the same period.

Parameters:
ex1 - an exam
ex2 - an exam
Returns:
isAllowDirectConflicts() and Exam.isAllowDirectConflicts() for both exams

getExams

public Set getExams(ExamPeriod period)
Exam(s) enrolled by the student that are scheduled in the given period


getExamsADay

public Set getExamsADay(ExamPeriod period)
Exam(s) enrolled by the student that are scheduled in the given day


getExamsADay

public Set getExamsADay(int day)
Exam(s) enrolled by the student that are scheduled in the given day


computeConflicts

public void computeConflicts(Value value,
                             Set conflicts)
Compute conflicts between the given assignment of an exam and all the current assignments (of this student). Only not-allowed conflicts (see canConflict(Exam, Exam) are considered.

Specified by:
computeConflicts in class Constraint
Parameters:
value - value to be assigned to its varaible
conflicts - resultant set of conflicting values

inConflict

public boolean inConflict(Value value)
Check whether there is a conflict between the given assignment of an exam and all the current assignments (of this student). Only not-allowed conflicts (see canConflict(Exam, Exam) are considered.

Overrides:
inConflict in class Constraint

isConsistent

public boolean isConsistent(Value value1,
                            Value value2)
True if the given exams can conflict (see canConflict(Exam, Exam)), or if they are placed at different periods.

Overrides:
isConsistent in class Constraint

afterAssigned

public void afterAssigned(long iteration,
                          Value value)
An exam was assigned, update student assignment table


afterUnassigned

public void afterUnassigned(long iteration,
                            Value value)
An exam was unassigned, update student assignment table


equals

public boolean equals(Object o)
Compare two student for equality

Overrides:
equals in class Constraint

hashCode

public int hashCode()
Hash code

Overrides:
hashCode in class Constraint

toString

public String toString()
Student unique id

Overrides:
toString in class Object

compareTo

public int compareTo(Object o)
Compare two students (by student ids)

Specified by:
compareTo in interface Comparable

isHard

public boolean isHard()
Constraint is hard if isAllowDirectConflicts() is false.

Overrides:
isHard in class Constraint

getOwners

public Vector getOwners()
Courses and/or sections that this student is enrolled to

Returns:
list of ExamOwner

isAvailable

public boolean isAvailable(ExamPeriod period)
True if the student is available (for examination timetabling) during the given period

Parameters:
period - a period
Returns:
true if a student can attend an exam at the given period, false if otherwise

setAvailable

public void setAvailable(int period,
                         boolean available)
Set whether the student is available (for examination timetabling) during the given period

Parameters:
period - a period
available - true if a student can attend an exam at the given period, false if otherwise