public class ExamModel extends ModelWithContext<Exam,ExamPlacement,ExamContext>
Exam
are modeled as variables,
rooms ExamRoom
and students ExamStudent
as constraints.
Assignment of an exam to time (modeled as non-overlapping periods
ExamPeriod
) and space (set of rooms) is modeled using values
ExamPlacement
. In order to be able to model individual period and
room preferences, period and room assignments are wrapped with
ExamPeriodPlacement
and ExamRoomPlacement
classes
respectively. Moreover, additional distribution constraint
ExamDistributionConstraint
can be defined in the model. PeriodPenalty
of all assigned exams, weighted by
Exams.PeriodWeight).
RoomSizePenalty
of all assigned exams, weighted by
Exams.RoomSizeWeight).
RoomSplitPenalty
of all assigned exams, weighted
by Exams.RoomSplitWeight).
RoomPenalty
of all assigned exams, weighted by
Exams.RoomWeight).
ExamDistributionConstraint.getWeight()
of all soft distribution
constraints that are not satisfied, i.e.,
ExamDistributionConstraint.isSatisfied(Assignment)
= false; weighted by
Exams.DistributionWeight).
ModelWithContext.ContextUpdateType
sDoubleFormat, sPercentageFormat, sTimeFormat
sMaxSize
Constructor and Description |
---|
ExamModel(DataProperties properties)
Constructor
|
Modifier and Type | Method and Description |
---|---|
ExamPeriod |
addPeriod(Long id,
String day,
String time,
int length,
int penalty)
Add a period
|
ExamContext |
createAssignmentContext(Assignment<Exam,ExamPlacement> assignment)
Create a new assignment context for the given assignment.
|
double |
getBackToBackDistance()
Back-to-back distance, can be set by
problem property Exams.BackToBackDistance, or in the input xml file,
property backToBackDistance)
|
DistanceMetric |
getDistanceMetric() |
List<ExamDistributionConstraint> |
getDistributionConstraints()
Distribution constraints
|
Map<String,String> |
getExtendedInfo(Assignment<Exam,ExamPlacement> assignment)
Extended info table
|
List<ExamInstructor> |
getInstructors()
Problem instructors
|
Map<ExamInstructor,Set<Exam>> |
getInstructorsOfDay(Assignment<Exam,ExamPlacement> assignment,
ExamPeriod period) |
Map<ExamInstructor,Set<Exam>> |
getInstructorsOfDay(Assignment<Exam,ExamPlacement> assignment,
int day) |
Map<ExamInstructor,Set<Exam>> |
getInstructorsOfPeriod(Assignment<Exam,ExamPlacement> assignment,
ExamPeriod period) |
int |
getMaxRooms()
Default maximum number of rooms (can be set by problem property
Exams.MaxRooms, or in the input xml file, property maxRooms)
|
int |
getNrDays()
Number of days
|
int |
getNrPeriods()
Number of periods
|
ExamPeriod |
getPeriod(Long id)
Period of given unique id
|
List<ExamPeriod> |
getPeriods()
List of periods, use
addPeriod(Long, String, String, int, int) to add a
period |
DataProperties |
getProperties()
Problem properties
|
List<ExamRoom> |
getRooms()
Problem rooms
|
ExamRoomSharing |
getRoomSharing()
Return examination room sharing model
|
List<ExamStudent> |
getStudents()
Problem students
|
Map<ExamStudent,Set<Exam>> |
getStudentsOfDay(Assignment<Exam,ExamPlacement> assignment,
ExamPeriod period) |
Map<ExamStudent,Set<Exam>> |
getStudentsOfDay(Assignment<Exam,ExamPlacement> assignment,
int day) |
Map<ExamStudent,Set<Exam>> |
getStudentsOfPeriod(Assignment<Exam,ExamPlacement> assignment,
ExamPeriod period) |
double[] |
getTotalMultiValue(Assignment<Exam,ExamPlacement> assignment)
Return weighted individual objective criteria.
|
double |
getTotalValue(Assignment<Exam,ExamPlacement> assignment)
Objective function.
|
boolean |
hasRoomSharing()
True if there is an examination sharing model
|
void |
init()
Initialization of the model
|
boolean |
isCheckForPeriodOverlaps()
Check for examination periods that overlap with each other
|
boolean |
isDayBreakBackToBack()
True when back-to-back student conflict is to be encountered when a
student is enrolled into an exam that is on the last period of one day
and another exam that is on the first period of the consecutive day.
|
boolean |
load(Document document,
Assignment<Exam,ExamPlacement> assignment)
Load model (including its solution) from XML.
|
boolean |
load(Document document,
Assignment<Exam,ExamPlacement> assignment,
Callback saveBest)
Load model (including its solution) from XML.
|
Document |
save(Assignment<Exam,ExamPlacement> assignment)
Save model (including its solution) into XML.
|
void |
setCheckForPeriodOverlaps(boolean check)
Enable checking for period overlaps
|
void |
setMaxRooms(int maxRooms)
Default maximum number of rooms (can be set by problem property
Exams.MaxRooms, or in the input xml file, property maxRooms)
|
void |
setRoomSharing(ExamRoomSharing sharing)
Set examination sharing model
|
String |
toString(Assignment<Exam,ExamPlacement> assignment)
String representation -- returns a list of values of objective criteria
|
afterAssigned, afterUnassigned, beforeAssigned, beforeUnassigned, getAssignmentContextReference, getContext, getContext, getContextUpdateType, setAssignmentContextReference, setContextUpdateType
addConstraint, addCriterion, addGlobalConstraint, addModelListener, addVariable, afterAssigned, afterUnassigned, assignedVariables, assignedVariables, beforeAssigned, beforeUnassigned, bestUnassignedVariables, bestUnassignedVariables, clearAssignmentContexts, clearBest, conflictConstraints, conflictValues, conflictValues, constraints, countConstraints, countGlobalConstraints, countVariables, createAssignmentContexts, createInheritedAssignment, createReference, getBestPerturbations, getBestUnassignedVariables, getBestValue, getCriteria, getCriterion, getDefaultAssignment, getEmptyAssignment, getExtendedInfo, getInfo, getInfo, getInfo, getInfo, getInfoProviders, getModelListeners, getPerc, getPercRev, getTotalValue, getTotalValue, getTotalValue, globalConstraints, inConflict, inConflict, init, invalidateVariablesWithInitialValueCache, modelListenerOfType, nrAssignedVariables, nrAssignedVariables, nrUnassignedVariables, nrUnassignedVariables, perturbVariables, perturbVariables, perturbVariables, perturbVariables, perturbVariables, removeConstraint, removeCriterion, removeCriterion, removeGlobalConstraint, removeModelListener, removeReference, removeVariable, restoreBest, restoreBest, restoreBest, saveBest, saveBest, setBestValue, setDefaultAssignment, toString, unassignedHardConstraints, unassignedVariables, unassignedVariables, variables, variablesWithInitialValue, weaken
public ExamModel(DataProperties properties)
properties
- problem propertiespublic DistanceMetric getDistanceMetric()
public boolean hasRoomSharing()
public ExamRoomSharing getRoomSharing()
public void setRoomSharing(ExamRoomSharing sharing)
sharing
- examination sharing modelpublic void init()
public int getMaxRooms()
public void setMaxRooms(int maxRooms)
maxRooms
- default maximum number of rooms for an exampublic boolean isCheckForPeriodOverlaps()
public void setCheckForPeriodOverlaps(boolean check)
public ExamPeriod addPeriod(Long id, String day, String time, int length, int penalty)
id
- period unique identifierday
- day (e.g., 07/12/10)time
- (e.g., 8:00am-10:00am)length
- length of period in minutespenalty
- period penaltypublic int getNrDays()
public int getNrPeriods()
public List<ExamPeriod> getPeriods()
addPeriod(Long, String, String, int, int)
to add a
periodExamPeriod
public ExamPeriod getPeriod(Long id)
id
- period unique idpublic boolean isDayBreakBackToBack()
public double getBackToBackDistance()
public double getTotalValue(Assignment<Exam,ExamPlacement> assignment)
getTotalValue
in class Model<Exam,ExamPlacement>
assignment
- current assignmentpublic double[] getTotalMultiValue(Assignment<Exam,ExamPlacement> assignment)
assignment
- current assignmentpublic String toString(Assignment<Exam,ExamPlacement> assignment)
toString
in class Model<Exam,ExamPlacement>
assignment
- current assignmentAbstractCriterion.toString(Assignment)
public Map<String,String> getExtendedInfo(Assignment<Exam,ExamPlacement> assignment)
getExtendedInfo
in class Model<Exam,ExamPlacement>
assignment
- current assignmentpublic DataProperties getProperties()
public List<ExamStudent> getStudents()
ExamStudent
public List<ExamInstructor> getInstructors()
ExamInstructor
public List<ExamDistributionConstraint> getDistributionConstraints()
ExamDistributionConstraint
public Document save(Assignment<Exam,ExamPlacement> assignment)
assignment
- current assignmentpublic boolean load(Document document, Assignment<Exam,ExamPlacement> assignment)
document
- XML documentassignment
- assignment to be loadedpublic boolean load(Document document, Assignment<Exam,ExamPlacement> assignment, Callback saveBest)
document
- XML documentassignment
- assignment to be loadedsaveBest
- callback executed once the best assignment is loaded and assignedpublic ExamContext createAssignmentContext(Assignment<Exam,ExamPlacement> assignment)
HasAssignmentContext
assignment
- an assignment for which there needs to be an assignment contextpublic Map<ExamStudent,Set<Exam>> getStudentsOfPeriod(Assignment<Exam,ExamPlacement> assignment, ExamPeriod period)
public Map<ExamStudent,Set<Exam>> getStudentsOfDay(Assignment<Exam,ExamPlacement> assignment, ExamPeriod period)
public Map<ExamStudent,Set<Exam>> getStudentsOfDay(Assignment<Exam,ExamPlacement> assignment, int day)
public Map<ExamInstructor,Set<Exam>> getInstructorsOfPeriod(Assignment<Exam,ExamPlacement> assignment, ExamPeriod period)
public Map<ExamInstructor,Set<Exam>> getInstructorsOfDay(Assignment<Exam,ExamPlacement> assignment, ExamPeriod period)
public Map<ExamInstructor,Set<Exam>> getInstructorsOfDay(Assignment<Exam,ExamPlacement> assignment, int day)