Skip to content

UniTime 3.5 build 187

Compare
Choose a tag to compare
@tomas-muller 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).
  • 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.

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).

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.
  • 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).
  • 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.
  • 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.
  • 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.
  • 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

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).
  • 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.

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).
  • 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.
  • 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.
  • 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.

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.

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).

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.

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.