Releases: UniTime/cpsolver
cpsolver-1.4.89
Student Scheduling: Free Time
- do not allow to overlap when there is no model
- this makes the free-time conflicts show in the dashboards
Revision a45772b by tomas-muller muller@unitime.org (16-Feb-2026 7:39 PM)
Student Scheduling: Free Time Request Priority
- added an ability to set RequestPriority for free time requests
Revision e34e733 by tomas-muller muller@unitime.org (16-Feb-2026 2:48 PM)
Student Scheduling Solver: Free Time Conflicts
- added a FreeTimeConflicts global constraint that does not allow an overlap with a higher priority free time request, even when it is not assigned
- by default, a higher-priority free time request only blocks lower-priority course requests when it is assigned
- enable by setting Sectioning.FreeTimeConflict to true (defaults to false)
Revision b7f7442 by tomas-muller muller@unitime.org (16-Feb-2026 2:40 PM)
Dependencies
- log4j updated to 2.25.3 (was 2.20.0)
- dom4j updated to 2.1.5 (was 2.1.4)
Revision e533c9c by tomas-muller muller@unitime.org (5-Jan-2026 2:47 PM)
cpsolver-1.4.86
Course Timetabling: Max Days/Workdays Range constraints
- added Max Days/Workdays Range group constraints
- given classes must be taught within the number of consecutive days
- this means that between any first meeting and any last meeting of all classes in the constraint, there cannot be more N - 2 days in between
- counting either all days, or only work days (no weekends or holidays)
Revision 2a594b5 by tomas-muller muller@unitime.org (12-Nov-2025 6:11 PM)
Student Scheduling: Reservations
- improved course checking for course-related reservations
- check the course of the enrollment/request rather than all courses that the student is requesting
- can make a difference when a student requests multiple cross-listed courses from the same instructional offering
Revision f8cc383 by tomas-muller muller@unitime.org (11-Nov-2025 9:26 PM)
cpsolver-1.4.83
Dependent Courses: Branch & Bound
- corrected the canLeaveUnassigned method for a request with no children
Revision b649337 by tomas-muller muller@unitime.org (28-Oct-2025 7:46 PM)
cpsolver-1.4.82
Build: Release
- added PGP signature
Revision e794623 by tomas-muller muller@unitime.org (17-Sep-2025 2:32 PM)
Student Scheduling: Dependent Courses
- suggestions improvements
- dependent courses constraint do not return a conflict on unassignment of the child course (using an empty enrollment for the course)
- do not check for dependent courses when computing available values (so a swap can be considered)
Revision 40f2471 by tomas-muller muller@unitime.org (11-Sep-2025 2:41 PM)
Student Scheduling: Dependent Courses
- do not automatically unassign child courses during unassignment of the parent course request
- causes issues with re-assignments (e.g., when computing suggestions)
- branch&bound: consider available assignments that break the dependent courses constraint
- needed as the whole student's schedule is built in memory, without making individual assignments
Revision 99d6684 by tomas-muller muller@unitime.org (11-Sep-2025 2:11 PM)
Nightly Builds: Snapshots
- nightly snapshot publishing moved to the Central Portal
- folowing the announcement from https://central.sonatype.org/pages/ossrh-eol
Revision 5e083de by tomas-muller muller@unitime.org (8-Sep-2025 3:14 PM)
Student Scheduling: Dependent Courses
- added an ability to disable the Dependent Courses global constraint when Sectioning.DependentCourses is set to false
Revision 6753976 by tomas-muller muller@unitime.org (5-Sep-2025 4:57 PM)
Student Scheduling: Dependent Courses
- added a global constraint for dependent courses
- if a student requests both a course and its parent, the student cannot get the dependent course without also having the parent course assigned
Revision 449b631 by tomas-muller muller@unitime.org (5-Sep-2025 1:57 PM)
Student Scheduling: Backtracking and Student Swap
- track progress by the number of items remaining in the queue
- do not re-add a request (or a student) into the queue when the assignment has failed for more than 5 (or 10) times
Revision f5de705 by tomas-muller muller@unitime.org (5-Sep-2025 1:46 PM)
Parallel Solver: Assignment
- since assignment map is used, order of the assiged values cannot be guaranteed
- try to re-assign conflicting assignments and only fail the assignment when the conflict is reported for the second time
Revision f1f2615 by tomas-muller muller@unitime.org (5-Sep-2025 1:40 PM)
Global Constraint
- added default name (using class name)
Revision 6721501 by tomas-muller muller@unitime.org (5-Sep-2025 1:39 PM)
Optimistic Inherited Assignment
- added toString() to make debugging easier
(listing changes against the parent assignment)
Revision fc8d1c3 by tomas-muller muller@unitime.org (5-Sep-2025 1:38 PM)
Course Timetabling: Initial Student Sectioning
- Added the ability to skip the assignment of a student to the course when there is a reservation for a class or a course that is not being loaded (e.g., distance configuration when solving on-campus students)
- Enable by setting StudentSectioning.MustFollowReservations to true (defaults to false, which is the existing behaviour).
Revision 9212829 by tomas-muller muller@unitime.org (4-Jun-2025 3:35 PM)
Student Scheduling: Enrollment
- getAvaiableEnrollments(..) .. also check the reservation limit (not just the reservation config limit)
Revision 84678c5 by tomas-muller muller@unitime.org (29-May-2025 7:09 PM)
Student Scheduling: Reservation Limit
- corrected isConflict(..) to match the computeConflicts(..)
Revision e370a7d by tomas-muller muller@unitime.org (29-May-2025 7:06 PM)
README updated
- added ITC 2019
- updated a few links
Revision d934455 by Tomáš Müller muller@unitime.org (15-Apr-2025 8:10 PM)
Student Scheduling: 1-by-1 Simulation
- student prefernces: created a plain version of the midday preferences not using roulette wheel; just penality = (10 - dist) / 9
Revision d77c42d by tomas-muller muller@unitime.org (4-Apr-2025 2:07 PM)
Student Scheduling: Solution Statistics
- added solution statistics report (a copy from UniTime)
Revision 66a9315 by tomas-muller muller@unitime.org (4-Apr-2025 2:07 PM)
cpsolver-1.4.74
Student Scheduling: Hard Distance Conflicts
- HardDistanceConflicts.inConflict(..) -- avoid null exceptions when call for a null section or a free-time's enrollment
Revision e705efa by tomas-muller muller@unitime.org (30-Jan-2025 1:32 PM)
Distance Metric: Copy
- when using new DistanceMetric(DistanceMetric), copy the new hard distance conflict parameters
- this fixes the problem of hard distance conflicts not being enabled for unavailabilities, when they are not enabled by default
Revision 32515c6 by tomas-muller muller@unitime.org (27-Jan-2025 3:40 PM)
Student Scheduling: Hard Distance Conflicts
- allow hard distance conflicts between sections which allow for time overlaps
Revision 28b3e96 by tomas-muller muller@unitime.org (16-Jan-2025 9:18 AM)
Student Scheduling: Hard Distance Conflicts
- added an ability to make (some) student distance conflicts hard
- to enable, set Sectioning.HardDistanceConflict to true (defaults to false)
- a distance conflict is considered hard when
- the distance between the two classes (or a class and an unavailability) is HardDistanceConflict.DistanceHardLimitInMinutes or more (defaults to 60)
- the travel time exceeds the time for travel (break time + gap) by more than HardDistanceConflict.AllowedDistanceInMinutes (defaults to 30)
- so in other words, a distance conflict with travel time of 60 or more munites will be considered hard if student has less than 30 mintes to get between the classes
Revision 11cd291 by tomas-muller muller@unitime.org (15-Jan-2025 6:25 PM)
Course Timetabling: Instructor Unavailable Dates
- check department of the unavailable dates
- this is to allow for an instructor to have different unavailable dates on each of the departments they are teaching
Revision 9d7b9a5 by tomas-muller muller@unitime.org (8-Jan-2025 5:35 PM)
Course Timetabling: Following Dates Constraint
- new group constraint added
FOLLOWING_DATES: Following Dates - given classes must be taught on dates that are back-to-back and in the given order
- when prohibited or (strongly) discouraged: given classes must be taught on dates in the given order with at least one day between any two following classes
- the primary use for this constraint are for classes that meet only once
- the constraint will fail if one of the meetings falls on a holiday and the other does not
Revision d81ac71 by tomas-muller muller@unitime.org (19-Dec-2024 3:29 PM)
Instructor Scheduling: Distributions
- many course timetabling distributions (group constraint and flexible constraints) have been included in the instructor scheduling problem
- namely
- At Most N Hours A Day
- Same Weeks
- N Hour Workday
- Mininal Gap Between Classes
- Max Block
- Max Breaks
- Max Days
- Break
- Max Weeks
- Max Holes
- Max Half-Days
- Max Consecutive Days
Revision 9663d04 by tomas-muller muller@unitime.org (18-Dec-2024 7:47 PM)
Course Timetabling: New Group Constraints
- added two new group constraints (distribution types)
SAME_STUD_NODST: Same Students w/o Distance - same as the Same Students distribution, except there is no distance conflict checking and no work-day limit
- also, the distribution gets ignored when there is Ignore Student Conflicts distribution between the two classes
- to replace DIFF_TIME in General.AutoSameStudentsConstraint
- same as different time, but does not ignore cases when there is Ignore Student Conflicts between two classes in parent-child relation
DIFF_TIME_IGN_STUDS: Different Time + Ignore Student Conflicts - combination of two constraints, Different Time and Ignore Student Conflicts
- given classes cannot overlap in time, replacing any student conflicts between these classes
- when prohibited or (strongly) discouraged: every pair of classes in the constraint must overlap in time
- still, student conflicts are ignored
Revision 84c6f7b by tomas-muller muller@unitime.org (13-Dec-2024 2:10 PM)
cpsolver-1.4.64
JavaDoc: Cleanup
- updated package infos (using package-info.java)
- fixed various JavaDoc warnings and errors
- added @author
Revision 1eccc07 by tomas-muller muller@unitime.org (10-Dec-2024 6:48 PM)
Course Timetabling: XML Save
- when Xml.SaveConfig is set to true (defaults to false), save the solver configuration with the solution
Revision ab4cc05 by tomas-muller muller@unitime.org (27-Nov-2024 8:27 PM)
Examinations: Distribution Constraint
- corrected the value of the sDistSameRoom static variable
Revision 202b79e by tomas-muller muller@unitime.org (27-Nov-2024 8:26 PM)
Student Scheduling: Linked Section
- allow one class to be present in multiple Linked Classes distributions between the same two courses
- for example having Lec 1 - Lec 1 and Lec 1 - Lec 2, and Lec 2 - Lec 1 to allow any combination except of Lec 2 - Lec 2
- or Lec 1 - Lec 1, Lec 2 - Lec 2, and Lec 3 - Lec 1 or Lec 2 (prohibiting Lec 1 - Lec 2 and Lec 2 - Lec 1)
Revision b9d4348 by tomas-muller muller@unitime.org (18-Nov-2024 6:38 PM)
Simple Search: HC/GD/SA
- when max-idle is enabled and unassignments are not allowed (Suggestion.AllowUnassignments is false, which is the default)
- when the number of unassigned classes increases (is above the number in best solution) > automatically restore best
Revision 13d65f0 by tomas-muller muller@unitime.org (15-Nov-2024 4:30 PM)
Simple Neighbour: Assign
- when conflicts are provided, unassing the conflicting variables before assigning the given variable
- some constraints my provide different conflicts each time the conflicts are computed and may even return a different number of conflicts
- this can cause issue when used during the HC/GD/SA phase (e.g., by the Suggestion selection) when the number of assigned variables cannot decrease
Revision c3c402c by tomas-muller muller@unitime.org (15-Nov-2024 4:02 PM)
Simple Search: Max Idle
- restore best solutio after the IFS phase if the best solution has more variables assigned than the current solution
- do not use construction/IFS neighbourhoods during the HC/SA/GD phases even when there are unassigned variables when max-idle is enabled
- this is to avoid decreasing the number of assigned variables during the optimization phases
Revision ebe30d4 by tomas-muller muller@unitime.org (14-Nov-2024 9:13 PM)
Simple Search: progress
- show "Improving found solution ..." status during the HC/GD/SA phases even when a complete solution has not been found
Revision c3bea40 by tomas-muller muller@unitime.org (14-Nov-2024 9:11 PM)
Simple Search: max idle iterations during construction
- improved counting of idle unassignments of individual variables by marking the current counts when the solution is improved
- default limit on individual unassignments set to 1/10 of Search.MaxIdleIterations
Revision 6acf978 by tomas-muller muller@unitime.org (14-Nov-2024 9:04 PM)
Course Timetabling: Back-To-Back
- corrected conflict checking for a partially assigned back-to-back constraint when an unassigned class can have times with various lengths
(e.g., MWF 3x50 and TTh 2x75) - previously only the lenght of the first available time was considered
Revision fc2ef60 by tomas-muller muller@unitime.org (14-Nov-2024 8:11 PM)
Simulated Annealing: Various Improvements & Changes
- default temperature minimum adjusted
Revision 6c4ae72 by tomas-muller muller@unitime.org (11-Nov-2024 3:05 PM)
Criterion: Minor Logging Adujstment
- toString(Assignment): include absolute value with the percentage
Revision 8116e51 by tomas-muller muller@unitime.org (8-Nov-2024 2:38 PM)
Simulated Annealing: Various Improvements & Changes
- various improvements and changes in an attempt to make the SA algorithm more reliable
- added maximal temperature
- this allows the maximal temperature to be higher than the initial temperature (and the initial temperature does not need to start as high)
- when maximal temperature is reached, the best solution is always restored and further reheating is disabled until a new best solution is found
- SimulatedAnnealing.MaximalTemperature parameter (defaults to 1.5, or to -1 if the initial temperature is set to -1)
- added minimal temperature
- this allows the search to start reheating when the minimal temperature is reached (when reheating is disabled, i.e., no best solutuion was found since the reheating was stopped)
- when the current solution is more than 0.1% worse than the best solution, the best solution is automatically restored
- SimulatedAnnealing.MinimalTemperature parameter (defaults to 0.001, or to -1 if the initial temperature is set to -1)
- temperature training (a.k.a., adaptive simulated annealing)
- when initial temperature is set to -1, additional parameters are set based on the training period
- default training probability adjusted to 0.00001 (SimulatedAnnealing.TrainingProbability parameter -- original setting was too high)
- training probability is now used to set the maximal temperature (probability of accepting an average worsening move from the training phase)
- initial temperature is set using 1/100 of the training probability (worsening move is accepted 100 times less often)
- minimal temperature is set so that move withb value of +0.1 is accepted with the training probability
- temperature length is set so that there is about 10 seconds between temperature adjustments
- can be adjusted by setting the SimulatedAnnealing.TimeBetweenCooldowns (in seconds, defaults to 10.0)
- when an improvement was found during the last period (between two coolings, governed by the temperature length), no cooling is done
- an improvement is only recorded when the new best solution is at least 0.01% better than the last best
(avoid excessive cooling due to small oscilations in solution values) - default for the initial temperature changed to -1 (enabling the temperature training)
Revision 1f2e7a5 by tomas-muller muller@unitime.org (8-Nov-2024 2:37 PM)
Course Timetabling: Limited-Depth Search (Suggestion Selection)
- when doing a limited-depth backtracking, but no suggestion is found
- only do a random assignment with >1 conflicts when Suggestion.AllowUnassignments is true (defaults to false)
- while this somewhat limits the Suggestion's ability to converge the search towards a complete solution, allowing unassignments (>1 conflicts) causes the Hill Climber to diverge from a local optima
- this is because the number of assigned variables is not included in the objective function that is being minimized
- other search algorithms (such as Great Deluge or Simulated Annealing) can also suffer from accepting a move that decreases the number of assigned variables, especially when it is not possible to find a complete solution eventually (i.e., no complete solution can be found)
Revision 2824463 by tomas-muller muller@unitime.org (8-Nov-2024 2:06 PM)
Course Timetabling: Random Student Swap Selection
- added a neihbourhood selection that attempts to swap a student between alternative sections of a course
- to be used with the Hill Climber (HC), Great Deluge (GD), or Simulated Annealing (SA) algorithms
- enable by adding the RandomStudentSwap class to the AdditionalNeighbours properties
- based on the StudentSwapGenerator class, but making a random selection of a lecture and of a student
- the selection is only available/enabled when the solver is using a single thread
- as student class assignments are not included in the solution
Revision 4bf79b6 by tomas-muller muller@unitime.org (8-Nov-2024 2:04 PM)
Course Timetabling Model
- added an ability to change whether student sectioning informations are saved/restored with best solution
- methods isOnFlySectioningEnabled(), setOnFlySectioningEnabled(boolean)
- restore best: when on-fly sectioning is enabled, considerably speed up restore best solution
(when there are a lot of jenrl constraints that can be removed as students have been moved avay of the appropriate class pairs) - student conflict criteria (getStudentConflictCriteria()) moved from StudentSwapSectioning to TimetableModel
Revision 4a5e677 by tomas-muller muller@unitime.org (8-Nov-2024 2:03 PM)
Simple Search: max idle iterations during construction
- added an ability to disable the max-idle limitation during the first part of the search, effectively setting up a minimal construction time
- parameter Search.MinConstructionTime, which can be in seconds or in percentage of the total time (Termination.TimeOut)
- defaults to 10% of the total time limit
- so, if max-idle is enabled, it will not stop construction or IFS phase during the first 10% time of the solver run
Revision 88e2efd by tomas-muller muller@unitime.org (8-Nov-2024 1:51 PM)
Simple Search: max idle iterations during construction
- when CBS is enabled, only stop the construction/IFS heuristic when all unassigned variables have been unassigned more times than the given max number of idle iterations
- when Search.MaxIdleIterations is set to zero, the construction/IFS heuristics gets switched off (HC and GD/SA are used from the start)
Revision db4b876 by tomas-muller muller@unitime.org (18-Oct-2024 3:28 PM)
Course Timetabling: Limited-Depth Search (Suggestion Selection)
- when doing a limited-depth backtracking, randomize value selection
(start at a random index instead of always from the start)
Revision 7bb8c8e by tomas-muller muller@unitime.org (16-Oct-2024 4:31 PM)
Course Timetabling: Limited-Depth Search (Suggestion Selection)
- when doing a limited-depth backtracking, randomize value selection
(start at a random index instead of always from the start)
Revision 182c03c by tomas-muller muller@unitime.org (16-Oct-2024 4:28 PM)
Course Timetabling: S...
cpsolver-1.4.34
Course Timetabling: XML Save
- when saving best solution (Xml.SaveBest = true) always output the best="true" attributes, event if the placement is the same as current
- this fixes an issue in UniTime where the best solution is not remembered after restart or pasivation
Revision 1058d5a by tomas-muller muller@unitime.org (15-Feb-2024 6:22 PM)
Student Scheduling: Universal Override
- added the ability to match on concentration, degree, or program
- added the ability to match on primary area, classification, major, concentration, degree, program, or campus
Revision 94d6ae0 by tomas-muller muller@unitime.org (23-Jan-2024 4:56 PM)
Student Scheduling: Universal Override
- added UniversalOverride reservation that is matching using a student filter
- the student filter may contain the following attributes
- area for academic area code
- clasf or classification for classification code
- campus for campus code
- major for major code
- minor for minor code
- group for student group code
- accommodation for accommodation code
- student for student's external id or name
- advisor for student's advisor external id
- status for student status code
- type for student groups with a type
Revision 8a27733 by tomas-muller muller@unitime.org (23-Jan-2024 4:44 PM)
Student Scheduling: Student Campus
- added student campus to AreaClassificationMajor
Revision 9e9b6b9 by tomas-muller muller@unitime.org (23-Jan-2024 4:44 PM)
Course Timetabling: Room Partition
- if a class needs two or more rooms, ensure that it does not have a room and one of its partitions at the same time
Revision 1573987 by tomas-muller muller@unitime.org (11-Jan-2024 7:13 PM)
Course Timetabling: Multiple Rooms With Different Preferences
- support multiple rooms with different preferences
- including the case when some rooms are prohibited in some positions
e.g., a class needs a classroom and a lab (that is not a classroom)
Revision b3e78d8 by tomas-muller muller@unitime.org (11-Jan-2024 6:56 PM)
Course Timetabling: Class Split Attendance Between Multiple Rooms
- added ability to split class attendance between multiple rooms
(class.nbrRooms > 1 and class.splitAttendance = true) - in this case, the class must fit the selected rooms (total of room capacity is equal or above class mit limit times room ratio)
Revision 8530c94 by tomas-muller muller@unitime.org (9-Jan-2024 4:01 PM)
Examples: Binary CSP
- corrected ClassCastException in the Test class
Revision 133fc00 by tomas-muller muller@unitime.org (23-Dec-2023 1:53 PM)
Student Scheduling Solver: Distance Conflicts
- shorter synchronization times when computing distance conflicts
- use read/write lock when updating distance cache instead of having the whole method synchronized
Revision 7c51d7e by tomas-muller muller@unitime.org (22-Nov-2023 3:02 PM)
Batch Student Scheduling: Standard Selection (IFS)
- do not penalize unassignments by default
- added an additional parameter to disable/enable the ability to accept worsening moves for critical course requests
Neighbour.CriticalStandardCanWorsen, defaults to false - disabled timeout for switching of IFS (Neighbour.StandardTimeOut=0)
- updated default timeout for not allowing conflicts to last 10% of the seach (Neighbour.StandardConflictTimeOut parameter)
- conflicts are not allowed during the last 10% of the search time
- added timeout for accepting worsening moves (Neighbour.StandardWorsenTimeOut)
- defaults to last 30% of the time limit (worsening moves are not allowed during the last 30% of the search)
Revision bd49bca by tomas-muller muller@unitime.org (19-Nov-2023 11:35 PM)
Batch Student Scheduling: Standard Selection (IFS)
- in the enrollment selection, allow to only select values with conflicts that can be unassigned
(passing the AssignmentCheck interface from StandardSelection and CriticalStandardSelection who already implement the canUnassign method) - Standard Selection: added ability to only select neighbors that are not worsening the total value (when Neighbour.StandardCanWorsen is set to false, default to true)
- Critical Standard Selection: always only select neighbors that are not worsening the total value
Revision edf1e54 by tomas-muller muller@unitime.org (16-Nov-2023 12:23 PM)
Simple Neighbour: Value
- include conflicts in the value computation, i.e., toValue(Assignment) method
Revision 84de73e by tomas-muller muller@unitime.org (15-Nov-2023 9:54 PM)
Student Scheduling: Time / Availability Conflicts Report
- added ability to filter the course requests by priority
- for instance, to only lists time and space conflicts for critical course requests
Revision d5af64f by tomas-muller muller@unitime.org (8-Nov-2023 10:11 PM)
cpsolver-1.4.24
Student Scheduling Solver: Course
- added course title and course type fields
Revision 73a3d65 by tomas-muller muller@unitime.org (17-Aug-2023 6:42 PM)
Course Timetabling: Same Days-Time-Weeks
- added Same Days-Time-Weeks distribution type
- given classes must be taught at the same time of day, on the same days and on the same weeks (i.e., must have the same date pattern)
- it is the combination of Same Days, Same Time, and Same Weeks distribution preferences
- when prohibited or (strongly) discouraged: Any pair of classes classes cannot be taught on the same days during the same time and during overlapping date patterns
- in other words, the given classes cannot overlap
Revision b92b769 by tomas-muller muller@unitime.org (23-Jun-2023 2:58 PM)
Dependencies: Log4j 2.20.0, Dom4j 2.1.4
- Dom4j updated to 2.1.4 (was 2.1.3)
- Log4j updated to 2.20.0 (was 2.17.1)
Revision ab5fe67 by tomas-muller muller@unitime.org (3-May-2023 9:27 AM)
Student Scheduling: Course Request Priorities
- added LC priority level (as the very first one)
- to be used for courses with LC reservations (by setting Load.LCRequestPriority=LC)
- this will ensure that LC courses are assigned first
Revision 18b0cf6 by tomas-muller muller@unitime.org (15-Mar-2023 6:16 PM)
Course Timetabling: Online Conflicts
- Online/Offline Room: added a distribution constraints Online/Offline Room that prevents (or penalizes) a pair of classes which are taught on the same day and one is placed in and online room and the other is not
- No Student Online Conflicts: added a global constraint No Student Online Conflicts that prevents a student from having two classes on the same day, one being online and the other not
- to be registered by setting General.GlobalConstraints=org.cpsolver.coursett.constraint.NoStudentOnlineConflicts
- online classes are identified by a regular expression matching the room name and set in the General.OnlineRoom parameter
- it defaults to (?i)ONLINE|
- classes without a room are considered online when the parameter matches a blank string
- if a class has multiple rooms, all rooms must be online for the class to be considered online
Revision 7be9455 by tomas-muller muller@unitime.org (10-Mar-2023 3:34 PM)
Course Timetabling: Global Constraints
- added ability to add global constraints using General.GlobalConstraints parameter
- contains a semicolon separated list of classes
Revision e5f25e3 by tomas-muller muller@unitime.org (10-Mar-2023 3:33 PM)
Course Timetabling: Student Online Conflicts
- added an experimental criterion that tries to minimize cases where a student has an online and in-person class on the same day
- online classes are identified by a regular expression matching the room name and set in the StudentConflict.OnlineRoom parameter
- it defaults to (?i)ONLINE|
- classes without a room are considered online when the parameter matches a blank string
- if a class has multiple rooms, all rooms must be online for the class to be considered online
- the criterion is weighted by the Comparator.StudentOnlineConflictWeight parameter, defaults to one half of the Comparator.StudentConflictWeight
- to enable add org.cpsolver.coursett.criteria.additional.StudentOnlineConflict into General.AdditionalCriteria parameter
Revision e189140 by tomas-muller muller@unitime.org (23-Feb-2023 1:36 PM)
Course Timetabling: Flexible Constraints
- added ability to precisely compute the individual dates
(instead of just checking for overlap with individual week patterns) - disabled by default, enable by setting FlexibleConstraint.PreciseDateComputation=true
Revision 5ab5e1e by tomas-muller muller@unitime.org (22-Dec-2022 9:12 AM)
Course Timetabling: Max N Hours A Day
- added ability to precisely compute the individual dates
(instead of just checking for overlap with individual week patterns) - disabled by default, enable by setting MaxNHoursADay.PreciseComputation=true
Revision 530cabd by tomas-muller muller@unitime.org (22-Dec-2022 9:10 AM)
Course Timetabling: Daybreak Constraint
- corrected distance checking -- used meters instead of minutes
Revision 3c0a4d9 by tomas-muller muller@unitime.org (20-Dec-2022 10:39 AM)
Examination Timetabling: Exam Split Move
- corrected period comparison
Revision 6ff24c9 by tomas-muller muller@unitime.org (7-Nov-2022 6:26 PM)
Course Timetabling: Default Student Sectioning
- fixed a null error when sectioning over an incomplete model
(some classes are removed from the model due to their inconsistencies)
Revision 57a922a by tomas-muller muller@unitime.org (7-Nov-2022 6:25 PM)
Course Timetabling: Daybreak Constraint added
- the Daybreak constraint checks for cases when there is an evening class and a morning class the following day
- there should be at least the given number of hours between an evening class followed by a morning class the next day
- the constraint can be also parametrised by a distance between the two classes:
- the constraint only triggers when the distance between the two classes is over the provided distance
- distance checking is disabled when distance is set to -1
Revision c28b5ce by tomas-muller muller@unitime.org (22-Oct-2022 8:05 PM)
Online Student Scheduling: Multi-criteria Selection Criteria
- when comparing past sections, use percentage of past sections instead of their number
- this is to avoid preference for configurations with fewer subparts (e.g., when everything is in the past)
Revision 2eb08ed by tomas-muller muller@unitime.org (7-Oct-2022 2:21 PM)
Course Timetabling: Precedence
- when checking on date patterns is enabled (Precedence.ConsiderDatePatterns is true, which is the default), always check the date of the first meeting
- instead of only checking the dates when the two classes have different date pattern
(this does not work when some weeks are shifted due to holidays) - former behaviour can be enabled by setting Precedence.SkipSameDatePatternCheck to false (defaults to true -- always check the dates)
Revision 1a67856 by tomas-muller muller@unitime.org (23-Sep-2022 7:12 PM)
Course Timetabling: Room Partition
- added ability to partition a room multiple smaller rooms
- with conflict checking between the parent room and each of the partitions
- including events and committed classes, but not room sharing
(it is possible to share partitions differently, or to set differnt availability)
Revision fbeeca2 by tomas-muller muller@unitime.org (21-Aug-2022 5:33 PM)
CPSolver Build: Deploy
- publish snapshot/nightly builds in the Sonatype's OSSRH snapshot repository
https://oss.sonatype.org/content/repositories/snapshots/org/unitime/cpsolver/1.4-SNAPSHOT/
Revision f6a18ee by tomas-muller muller@unitime.org (27-Jul-2022 2:04 PM)
Course Timetabling: Spread Constraint
- fixed an ArrayIndexOutOfBoundsException thrown when there are 7 working days
(all days of the week are working days)
Revision b1bda9d by tomas-muller muller@unitime.org (18-Jun-2022 12:28 PM)
Course Timetabling: Same Days-Room-Start constraint
- added Same Days-Room-Start group constraint (distribution type)
Given classes must start at the same time of day, on the same days and in the same room.
It is the combination of Same Days, Same Start and Same Room distribution preferences.
When prohibited or (strongly) discouraged: Any pair of classes classes cannot be taught on the same days during the same time in the same room.
Revision 5624d90 by tomas-muller muller@unitime.org (8-Jun-2022 11:31 AM)
Course Timetabling: Max N Days, Max N Half-Days constraints
- added ability to evaludate the Max N Days and Max N Half-Days constraints separately for each week
- when FlexibleConstraint.CheckWeeks is set to true, defaults to false
Revision 5a77459 by tomas-muller muller@unitime.org (30-May-2022 1:51 PM)
Course Timetabling: Max N Consecutive Days constraint
- added a (flexible) distribution constraint that limits the number of consecutive days that can be taught each week
- individual weeks are considered when FlexibleConstraint.CheckWeeks is set to true
Revision 6376b3a by tomas-muller muller@unitime.org (30-May-2022 11:14 AM)
Student Scheduling: Course Request Priority
- added new priority level: vital
- current scaling is critical > vital > important > normal
Revision c4e92e5 by tomas-muller muller@unitime.org (27-May-2022 3:18 PM)
Student Scheduling: Day of week offset
- added ability to set the day of week offset on an online section
- this is to make sure that the isEnabled(Student) checking computes the first/last meeting correctly during wait-list processing
Revision 7f0b3c4 by tomas-muller muller@unitime.org (11-May-2022 8:29 PM)
cpsolver-1.4.3
Maven Build: Packages
- only publish to Nexus Reporistory Manager (sonatype) when ossrh profile is enabled
(publish to GitHub otherwise)
Revision dbdacf6 by tomas-muller muller@unitime.org (13-Apr-2022 3:17 PM)
Student Sectioning: Student Scheduling Preferences
- added ability to define the following preferences on a student
- modality preferences: require online, prefer online, discourage online, no preference
- back-to-back preference: prefer back-to-backs, discourage back-to-backs, no preferences
- class dates: optional class start date and class end date
- when a class is outside of the class dates or it is not online and online is required,
- the class appears like it would be disabled (can be overridden by a reservation)
- using Section.isEnabled(Student) which replaces Section.isEnabled()
- student schedule quality changes
- penalisation can now consider the student and their preferences
- it is now also possible to have a negative penalisation
- added Modality criterion
- weight StudentWeights.ModalityFactor, defaults to 0.0500
- for students with prefer/discourage online, there is a penalisation for classes with mismatching modality
- BackToBack criterion now considers student's back-to-back preference
- can return negative weight for a back-to-back conflict when back-to-backs are discouraged
- online sectioning: OnlineSection has now an ability to override class status (enabled/disabled)
- classes that the student is enrolled in are considered always enabled (regardless of the student's preference)
Revision 8cee838 by tomas-muller muller@unitime.org (31-Mar-2022 2:22 PM)
Log4j dependency updated to 2.17.1 (was 2.17.0)
- this is to avoid CVE-2021-44832 (remote code execution vulnerability)
Revision ff0c17e by tomas-muller muller@unitime.org (3-Jan-2022 4:09 PM)
CPSolver 1.4
- created a new version of the CPSolver library (1.4) in order to avoid backward compatibility issues with the Log4j dependency
(CPSolver 1.3 is still using Log4j 1.2.17, CPSolver 1.4 has been updated to Log4j 2.17.0)
Revision 8c99561 by tomas-muller muller@unitime.org (3-Jan-2022 1:27 PM)
cpsolver-1.3.255
Student Sectioning: Priority Request Date Order
- added a student order comparing students by:
- student priority (priority students first)
- average course request timestamp (student with eariler requests first)
- number of choices (student with fewer choices first)
Revision 8246405 by tomas-muller muller@unitime.org (18-Oct-2021 2:40 PM)
Student Sectioning: Request Priority Report
- include the first column with student id (__Student)
- this will make the report clickable in UniTime (showing details about the student)
Revision 2367140 by tomas-muller muller@unitime.org (18-Oct-2021 2:39 PM)
Online Student Scheduling: Reservation Limit Cap
- do not cap the reservation limit of OnlineReservation any further
- it is already capped by the config/class limits (XReservation.getLimit() minus the current
enrollment, except of the student in question) - capping the limit any further can create discrepancies as the config/class limits are computed
differently
(excluding other students, possibly causing the class no longer available errors in the
check-assignment action)
Revision 9ad6480 by tomas-muller muller@unitime.org (6-Aug-2021 2:01 PM)
Parallel Solver: Solver Thread
- set the iStop variable to its previous state at the end, before calling onStop or onFinish
- this is to fix the onStop/onFinish tasks ability to get stopped (and not being stopped
immediately)
Revision 7e419e6 by tomas-muller muller@unitime.org (30-Jul-2021 1:28 PM)
Placement: Get Long Name
- avoid Null exception if the placement has no lecture (e.g., when used by the student sectioning
solver)
Revision 685795c by tomas-muller muller@unitime.org (17-Jun-2021 9:38 AM)
Student Scheduling: Section Times
- added ability to load arranged hours (no time) classes with a time (listing the date pattern but
no time) and rooms (that are required by the class)
Revision 701adec by tomas-muller muller@unitime.org (16-Jun-2021 6:19 PM)
Student Scheduling: Tableu Report
- only report the assigned section on the assigned course (not on all courses of the request)
Revision ec04dab by tomas-muller muller@unitime.org (12-Jun-2021 9:11 PM)
Course Timetabling: JenrlConstraint
- fixed a null exception when getWorkDayLimit is called on a constrain with no model
Revision 13a521b by tomas-muller muller@unitime.org (12-Jun-2021 9:10 PM)
Solver: Solver Thread
- reset the solver thread only after all is finised (after onStop() or onFinish() are called)
- this will allow the tasks that run after the solver has finished (like student sectioning or
save) to be stopped
Revision bb1283a by tomas-muller muller@unitime.org (18-May-2021 2:20 PM)
Student Scheduling Reports: Tableau Report
- added Request Type column (including request priority: Critical, Important, or Normal)
Revision 4367942 by tomas-muller muller@unitime.org (26-Apr-2021 5:48 PM)
CVSFile: Line Breaks
- when reading CSV file, consider line breaks inside of cells -- do not import as multiple lines
Revision 0bec949 by tomas-muller muller@unitime.org (19-Apr-2021 11:30 AM)
Batch Student Scheduling: Backtracking phase
- ensure that the solver does not get stuck (as it repeatedly adds requests that failed) by
setting a limit on the number of iterations (2x the initial size of the request queue)
Revision fa515df by tomas-muller muller@unitime.org (23-Mar-2021 6:09 PM)
Student Scheduling Algorithm: backtrack and branch&bound after restore best
- added BacktrackSelection and BranchBoundSelection after best solution is (possibly) restored
- this is to improve the chance to finish the search in a locally optimal solution
Revision 5ed13c8 by tomas-muller muller@unitime.org (15-Mar-2021 9:27 PM)
Student Scheduling: Restore Best
- corrected checking for the restore best step
Revision aad08c6 by tomas-muller muller@unitime.org (15-Mar-2021 9:25 PM)
Student Scheduling Reports: Accommodations Conflicts
- added student's curriculum, groups, and advisors
Revision 6ba8e52 by tomas-muller muller@unitime.org (12-Mar-2021 4:10 PM)
Student Scheduling: Area Classification Major
- toString: add concentration, if it is present
Revision aa1f1e2 by tomas-muller muller@unitime.org (12-Mar-2021 3:54 PM)
Student Scheduling Model: Student Curriculum (Degree)
- added optional degree (only to be used for display at the moment)
Revision 0f3f041 by tomas-muller muller@unitime.org (8-Mar-2021 3:57 PM)
Student Scheduling Model: Student Curriculum (Area, Classification, Major/Minor, Concentration)
- added optional names and weight (for display purposes, not actually used by the solver)
Revision cee0c1b by tomas-muller muller@unitime.org (25-Feb-2021 6:39 PM)
Student Scheduling: Restore Best
- log the restore best phase
Revision 9ce54f3 by tomas-muller muller@unitime.org (24-Feb-2021 6:13 PM)
Student Scheduling: Branch&Bound / Backtrack
- when sorting possible enrollments, avoid contract violations
Revision 7bdb71e by tomas-muller muller@unitime.org (24-Feb-2021 6:11 PM)
Student Scheduling Algorithm: Priority Students / Critical Courses
- when priority and/or critical students are preferred, added an ability to cycle through the
students/requests more than once
Sectioning.CriticalRounds for critical courses (defaults to 1)
Sectioning.PriorityRounds for priority students (defaults to 1) - when cycling through the priority students, added ability to include all students of the desired
or higher priority during the last round
when Sectioning.PriorityLastRoundAllStudents is true (defaults to false)
Revision 14e629e by tomas-muller muller@unitime.org (24-Feb-2021 6:07 PM)
Student Sectioning: Student Priority
- fixed a typo in Freshman
Revision 1483eb4 by tomas-muller muller@unitime.org (24-Feb-2021 6:04 PM)
Student Scheduling: Schedule Quality
- to increase speed, only consider criteria that are enabled (have non-zero weight)
Revision 4900055 by tomas-muller muller@unitime.org (24-Feb-2021 4:15 PM)
Student Scheduling: Load XML
- corrected assignment of best enrollments
- this fixes the changes in commit 504f598 which made the enrollments with an override to be
ignored instead of going last
Revision 1cf28a4 by tomas-muller muller@unitime.org (17-Feb-2021 3:32 PM)
Student Scheduling: Curriculum Reservation/Restriction
- added ability to have multiple academic areas (restrictions)
- added optional concentrations (further division within majors)
Revision 4545039 by tomas-muller muller@unitime.org (27-Jan-2021 2:52 PM)
Student Scheduling: Curriculum Reservation/Restriction
- added ability to have multiple majors
- added ability to match on student minors
- when a reservation has both majors and minors, a student must have a least one matching minor OR
major
Revision 505be75 by tomas-muller muller@unitime.org (13-Jan-2021 6:11 PM)
Examination Timetabling: Overlapping Periods
- added ability to check for direct (student or instructor) conflicts between two examination
periods that overlap in time - only enabled when Exams.CheckForPeriodOverlaps is set to true (defaults to false)
Revision 54ad167 by tomas-muller muller@unitime.org (11-Jan-2021 1:45 PM)
Student Scheduling Quality: Accommodations
- few minor adjustments
- added Accommodation Conflicts report
Revision d26cba8 by tomas-muller muller@unitime.org (7-Jan-2021 10:45 PM)
Student Scheduling Quality: Accommodations
- students needing short distances (SD accommodation)
- weight: StudentWeights.ShortDistanceConflict
- there is a conflict when classes are back-to-back and distance in minutes is above zero
- students needing free time (FT accommodation)
- weight: Accommodations.FreeTimeOverlapFactor
- higher penalization for free-time conflicts
- students needing back-to-back classes (BTB accommodation)
- weight: Accommodations.BackToBackFactor
- a (negative) penalization for classes that are back-to-back, or within 30 minutes of each other
- students needing breaks between classes (BBC accommodation)
- weight: Accommodations.BreaksBetweenClassesFactor
- a (positive) penalization for classes that are back-to-back, or within 30 minutes of each other
Revision 9bca75a by tomas-muller muller@unitime.org (7-Jan-2021 3:53 PM)
Student Scheduling: Student Groups & Accommodations
in preparation for being able to start using student minors:
- created separate lists for student groups and accommodations (instead of storing them as minors
which have not been used so far) - removed the old student academic area - classification and student academic area - major pairs
(use the student area, classification, major tripplets) - updated XML load and save (XML load does understand the old format, creting student groups and
accommodations)
Revision f5fe357 by tomas-muller muller@unitime.org (7-Jan-2021 3:39 PM)
Code Cleanup: Removed Unused Imports
Revision e152854 by tomas-muller muller@unitime.org (7-Jan-2021 3:37 PM)
Student Scheduling: Past Sections
- added ability to mark sections that are in the past (e.g., start before current date)
- the use of past sections can be minimized (using StudentWeights.PastFactor student weight)
- during online, the use of sections that are in the past is minimized
(between following reservations and checking schedule quality)
Revision adcc8cb by tomas-muller muller@unitime.org (16-Dec-2020 4:43 PM)