UniTime 3.5 build 187
tomas-muller
released this
26 Jan 15:05
·
3533 commits
to master
since this release
Technology Update
Clustering
- Improved ability for UniTime to run in a cluster.
- Remote solver servers connect to each other and the web server(s) using JGroups.
- Hibernate L2 cache is now replicated across the cluster.
- However, L2 cache is disabled when Hibernate is used outside of Tomcat (e.g., on a remote
solver server).
- However, L2 cache is disabled when Hibernate is used outside of Tomcat (e.g., on a remote
- Clustering can be disabled by setting application properties unitime.hibernate.cluster
(Hibernate L2 cache) and unitime.solver.cluster (remove solver servers) to false. - Online student scheduling server can now run on multiple machines at once, with the data
asynchronously replicated (using infinispan) and one machine being the master (responsible for
all the updates).- To enable replication, set unitime.enrollment.server.replicated to true.
Constraint Solver
- Using the latest version of CPSolver 1.3
- This update contains a new assignment model and multi-core capabilities.
Mobile
- A few initial steps have been made towards a frendlier version of UniTime pages on mobile
(tables or phone) devices. - Mobile page layout is using less tables, and there is a new menu.
Student Scheduling
Over-Expected Criterion
- Added ability to provide a custom criterion that decides whether a class is over-expected or
not. - Default implementation now falls back to section balancing when there are no expectations.
- I.e., students can be only allowed into sections that are (or will become) dis-balanced by
more than 10% if there are no other sections meeting their schedule.
- I.e., students can be only allowed into sections that are (or will become) dis-balanced by
Student Scheduling Reports
- Added an interface that is implemented by all the reports.
- Added time / availability conflicts report: unlike the existing course conflict report,
conflicts are counted between individual classes. - Distance conflict report: changed to compute conflicts between individual classes.
- Unbalanced sections report: list sections that are dis-balanced by more than 10%.
- Time-overlaps report: list time conflicts between classes (that do allow for time overlaps).
- Added a page through which various student sectioning solver reports can be displayed:
- Works for both batch (page Student Sectioning Solver Reports, menu Students > Solver Reports)
and online (page Online Student Scheduling Reports, menu Students > Online Scheduling
Reports). - All the existing current reports are available (time conflicts, availability conflicts,
unbalanced classes, distance conflicts, time overlaps).
- Works for both batch (page Student Sectioning Solver Reports, menu Students > Solver Reports)
Student Scheduling Dashboard
- Display Not-Enrolled student requests instead of just the wait-listed ones.
- Distinguish wait-listed unassigned request with the w) hint.
- This is done in the same way as there is the r) hint for enrollments using reservations or for
reserved space.
- This is done in the same way as there is the r) hint for enrollments using reservations or for
- Filter text field was replaced by the new filter box component (which is used on the events
page, e.g., as Event Filter or Room Filter).
Student Scheduling Assistant
- Added ability to wait-list an unassigned course request in the List of Classes table.
- Added ability to automatically add course request and alternate course request lines as they are
needed. - Time Conflicts: display the allowed time conflicts note (Overlaps with x) in red color.
- There is also a warning icon next to each class that has a time conflict.
Custom Student Enrollment Interface
- Added an ability to provide a custom class that synchronizes the enrollments with an external
system. - The interface can be used to check student's eligibility (an additional step in the
CheckEligibility action).- The external system can request students to enter a PIN number.
- Discrepancies between the two systems can be detected (e.g., a student may be denied the
ability to enroll through UniTime if the two systems are not in sync).
- The interface can be used to enroll students into classes (an additional step in the
EnrollStudent action).- The external system may reject enrollment of some classes.
- If this happens, student is not enrolled into the rejected classes in UniTime as well
(appropriate error messages are displayed instead).
- Automated qait-listing is disabled when such a custom interface is used.
- This change also includes an example implementation using the new Banner XE (RESTful) interface.
Course Timetabling
Instructor Preferences
- Added ability to automatically inherit instructor preferences to externally managed classes.
- There is a new toggle (inherit instructor preferences) on a department which controls whether
instructor preferences are to be inherited or not. - Applicable room and building preferences, global room features and groups can now be inherited
onto an externally managed class as well. - If the externally managed department does not allow required time and/or room preferences, the
instructor preferences are weakened accordingly.
Hierarchical Preference Inheritance
- If there are two or more scheduling subparts in a parent-child relation with the same
instructional type (e.g., Lec - Lec a - Lec b stacked underneath), inherit preferences and the
date pattern from the parent subpart whenever possible. - This behavior can be enabled by setting application property
unitime.preferences.hierarchicalInheritance to true.
Instructor Unavailability
- Instructor unavailabilty can include special and course-related events that are approved.
- These are events for which the instructor is the main contact or he/she is present in the
additional contacts of the event. - This feature can be enabled by setting the application property
unitime.events.instructorUnavailability to true (default is false).
- These are events for which the instructor is the main contact or he/she is present in the
- If enabled, the unavailabilities will also show:
- in the Timetable Grid (in the same way as blocking events are displayed for rooms now)
- on the Instructor Detail page (there is a new section called Instructor Unavailability, only
visible when there is at least one such blocking event for the instructor).
- The RoomAvailabilityInterface has been extended to provide instructor availability, the default
room availability service has been extended to provide instructor availability from the events
as described above.
Course Credit
- Course credit moved from instructional offering to course offering.
- That is, each course of a cross-list can have a different credit information.
- This allows for variable credit courses where a student can pick the proper number of credits
by selecting the appropriate course offering in the cross-list.
- Course credit information is now also visible in the Course Finder dialog of the Student
Scheduling Assistant page.
Other Changes
Event Management: No Room Check
- Rooms that have the Ignore Room Check toggle enabled can be overbooked.
- To easily identify such a room, there is a No Room Check note in the room's tooltip and the
room name is in italic in the Meetings table on the Add / Edit Event pages.
- To easily identify such a room, there is a No Room Check note in the room's tooltip and the
- Meetings that are in a room with no room check never show any conflicts and such meetings also
never show among conflicting events.
Rooms
- Added ability to provide room pictures.
- Pictures (of a room) can be updated for
- the current academic session only,
- the current academic session and all future academic sessions, or
- all academic sessions.
Application Properties
- All (or most of) application properties are now registered and used through the
ApplicationProperty enum.- This allows for an easy place to see all configuration properties, define their default values
and short descriptions.
- This allows for an easy place to see all configuration properties, define their default values
- Application Configuration page was modified to include all registered properties, including
their defaults and descriptions.
Data Exchange
- Added export of student course requests.
- Student Class Enrollment Import: update student course requests to match student class
enrollments. - Room Sharing: added ability to export and import room sharing.
- Student Import, Student Class Enrollments Import: added incremental mode
- When not in incremental mode, students (student class enrollments) that are not included in
the XML are deleted (this is the default). - When in incremental mode, students that are not included in the file are completely ignored.
- When not in incremental mode, students (student class enrollments) that are not included in
- Student Course Requests Import
- Added ability to cancel a student through the import (cancelStudent element).
- Added ability to include class enrollments with the course requests.
- Added enrollment mode (attribute enrollment on the root element) with the following values:
- update: enrollments are updated to point to new course requests, orphaned enrollments
(enrollments without course requests) are deleted (this is the default) - nochange: all enrollments are kept (previously, this was achieved by keepEnrollments='true')
- import: import enrollments from the file (default when there are class elements in the file)
- delete: all class enrollments (of the related students) are deleted
- update: enrollments are updated to point to new course requests, orphaned enrollments
CAS Authentication
- Added provisions for CAS-based authentication.
- To enable CAS, uncomment the CAS Authentication sections in securityContext.xml and web.xml (see
the comments there).
Localization
- Added en_UK locale: it is much like the default, except of time (24-hour format) and date (day
before moth) formatting. - Course Timetabling: Added ability to display assigned times in either 12-hour or 24-hour time
format (based on the locale).
Constraint Solver
Course Timetabling: Deterministic Student Sectioning Customization
- This custom sectioning assign students to groups in a deterministic way.
- Students are ordered by their academic information (curriculum) and unique ids and assigned in
this order to the first available group (configuration or lecture).
- Students are ordered by their academic information (curriculum) and unique ids and assigned in
- To enable this customization set the following parameter:
- StudentSectioning.Class=org.cpsolver.coursett.custom.DeterministicStudentSectioning
Course Timetabling: Group Constraint
- Forward checking extended to all hard group constraints (not only meet-together).
- It is possible to avoid forward check on variables with large domains (parameter
ForwardCheck.MaxDomainSize, defaults to 1000) and to limit the depth (parameter
ForwardCheck.MaxDepth, defaults to 2).
Course Timetabling: MaxBreaks constraint
- MaxBreaks constraint limits the number of blocks of non back-to-back classes of an instructor on
a day. - It has two parameters: a maximal number of breaks and a minimal length of a break between two
classes not to be considered in the same block.- For example, reference MaxBreaks:1:30 translates to a maximum number of one break (two
blocks) on a day of classes not more than 30 minutes a part.
- For example, reference MaxBreaks:1:30 translates to a maximum number of one break (two
Course Timetabling: Class Weights
- Added an ability to provide each class with a weight.
- This weight is used in the time and room preferences (the preference is weighted by the
"importance" of the class).
- This weight is used in the time and room preferences (the preference is weighted by the
- For instance, this can be used for classes that are only offered once in a semester to have
a lower weight.- So that there is an incentive to put a class that is taught every week in a preferred time
even if it bumps two classes (that only meet once) from their preferred times.
- So that there is an incentive to put a class that is taught every week in a preferred time
- This also allows for things like giving compulsory or elective courses more weight over optional
courses in the curriculum timetabling, if ever needed. - This feature can be enabled by the solver parameter Class Weights, two implementations are now
available:- Default Class Weights (default): all class weights are 1.0 (so, all works as before).
- Average Hours A Week Class Weights: a weight of a class is estimated by the average number of
hours it takes during the academic session.
IFS: Neighborhood Search Algorithms
- Added a general versions of Hill Climber, Great Deluge, and Simulated Annealing to the solver,
with three problem independent neighboorhoods:- Random move just picks a random unconflicting value to a variable.
- Random swap tries to resolve all possible conflicts (unlike with suggestions there is no limit
on depth, however, no new conflict can be created by resolving an existing one). - Suggestion move: a variable is selected randomly, a limited depth backtracking is used to find
a possible change.- Unlike in NeighbourSelectionWithSuggestions, the very first found suggestion is returned.
- Added a "simple search" algorithm that combines the ifs, hill climber, and great deluge or
simulated annealing in a similar way as the examination solver (or the ITC competition solver)
does. - This algorithm is enabled by setting the Search Algorithm solver parameter to Experimental.
Student Scheduling: Required Reservation Constraint
- This global constraint ensures that reservations that must be used are used.
- That is, an enrollment is conflicting when there is a reservation for the student that must be
used, but the given enrollment does not use it.
- That is, an enrollment is conflicting when there is a reservation for the student that must be
- While the domain of the course request already does not allow for such enrollments, such an
enrollment can be loaded in from the database or XML.- This constraint is to prevent assignment of such invalid enrollments.
Course Timetabling: Room Ratio
- Changed the computation of minimal room size to round(room ratio x class limit), instead of the
previous ceil(room ratio x class limit). - While using ceiling instead of round has some merit, this fixes the ongoing issues with the
computation.- E.g., minimal room size of a class with limit 25 and room ratio 0.6 was 16 (as 0.6f * 25 =
15.000001 in Java) instead of the expected 15.
- E.g., minimal room size of a class with limit 25 and room ratio 0.6 was 16 (as 0.6f * 25 =
Course Timetabling: MaxWeeks constraint
- The MaxWeeks constraint limits the number of weeks during which the given set of classes are
taught. - It has two parameters: a maximal number of weeks during which the given set of classes can be
placed and a day code indicating what days of week are considered. - Reference MaxWeeks:3:48 translates to a maximum number of 3 weeks, but only for classes that
are placed on Fridays and Saturdays- (64 for Monday, 32 for Tuesday, 16 for Wednesday, 8 for Thursday, 4 for Friday, 2 for
Saturday, and 1 for Sunday) - If the second parameter is zero, all days of week are considered.
- (64 for Monday, 32 for Tuesday, 16 for Wednesday, 8 for Thursday, 4 for Friday, 2 for
Course Timetabling: Classes with multiple rooms
- For each time, limit the number of room combinations (parameter General.MaxRoomCombinations,
defaults to 100).- Domain is dynamic (not cached) in this case, preferring rooms that are available for the given
time (for which the room combinations are generated).
- Domain is dynamic (not cached) in this case, preferring rooms that are available for the given
Course Timetabling: Max N Hours A Day constraint
- Added ability to consider date patterns (individual weeks).
- When solver parameter MaxNHoursADay.ConsiderDatePatterns is set to true (this is also the new
default). - For former behavior, set MaxNHoursADay.ConsiderDatePatterns to false.
- When solver parameter MaxNHoursADay.ConsiderDatePatterns is set to true (this is also the new
Course Timetabling: Distribution Preferences
- Added structure One of Each
- The distribution constraint is created for each combination of classes such that one class is
taken from each line representing a class or a scheduling subpart - For instance, if the constraint is put between three scheduling subparts, a constraint will be
posted between each combination of three classes, each from one of the three subparts. - If a constraint is put between a class and a scheduling subpart, there will be a binary
constraint posted between the class and each of the classes of the scheduling subpart.
- The distribution constraint is created for each combination of classes such that one class is