Releases: UniTime/cpsolver
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)
cpsolver-1.3.232
Student Scheduling: Critical Course Requests / Priority Students
- added ability to boost the weight of critical course requests (StudentWeights.CriticalBoost) and
priority students (StudentWeights.PriortyBoost) - base weight is multipled by the boost parameter
- both parameters default to 1.0, no bost
- this is to make sure priority students and/or critical courses are more important when comparing
two solutions
Revision 45aa96e by tomas-muller muller@unitime.org (27-Nov-2020 12:38 PM)
Student Scheduling: Student Swap
- take students in the order by their priority, only students with the same priority
- when failed, put the student back to the queue after the students with the same priority
Revision 4c8e38a by tomas-muller muller@unitime.org (25-Nov-2020 7:19 PM)
Student Scheduling: Enrollment Swap
- take the unassigned requests in the order by their priority, only shuffle requests with the same
priority - critical requests or priority student first (based on solver config)
- request priority (higher priority first, substitute request last)
- when failed, put the request at back to the queue after the requests with the same priority
Revision 7f3b213 by tomas-muller muller@unitime.org (25-Nov-2020 7:18 PM)
Student Scheduling: Backtracking
- take the unassigned requests in the order by their priority, only shuffle requests with the same
priority - critical requests or priority student first (based on solver config)
- request priority (higher priority first, substitute request last)
- when failed, put the request at back to the queue after the requests with the same priority
Revision 57d1903 by tomas-muller muller@unitime.org (25-Nov-2020 7:12 PM)
Student Scheduling: IFS
- added ability to prohibit unassignment of a request of higher priority (than the request that is
being assigned)
when Neighbour.StandardCanHigherPriorityConflict is set to false (defaults to true)
Revision e97bdd5 by tomas-muller muller@unitime.org (24-Nov-2020 6:40 PM)
Student Scheduling: IFS
- variable selection: skip unassigned free times when selecting variables
Revision c2eef88 by tomas-muller muller@unitime.org (24-Nov-2020 6:39 PM)
Student Scheduling: Enrollment Swap
- listen for failed neibhours, put the failed request back into the queue
Revision aef7b66 by tomas-muller muller@unitime.org (22-Nov-2020 5:00 PM)
Student Scheduling: Student Swap
- avoid cycling where the same student swap keeps on repeatedly failing (very rare, but not
impossible)
Revision 961a4ae by tomas-muller muller@unitime.org (22-Nov-2020 4:59 PM)
Student Scheduling: IFS
- improved handing of concurrent modification errors
Revision 42c0875 by tomas-muller muller@unitime.org (22-Nov-2020 4:59 PM)
Student Scheduling: IFS
- added an ability to completely disable conflicting placements (no unassignments are allowed)
- added an ability to disable conflicting placements at some point during the search (e.g., two
hours before solver's timeout) - added an ability to disable this neighbourhood at some point during the search (e.g., no IFS if
less than an hour before solver's timeout)
-> this is to allow the solver some time at the end of the search to optimize the solution without
making steps that are hard to undo or resolve
Revision 77a46cc by tomas-muller muller@unitime.org (20-Nov-2020 4:30 PM)
Student Scheduling: Restore Best
- added a simple step that checks whether the best solution has improved since the last check
- if there is no improvement, restore the best solution (reset the search to start from the best
solution again) - the checking is done in the seletion's initialization phase, no neighbors are actually computed
Revision 061b087 by tomas-muller muller@unitime.org (20-Nov-2020 4:28 PM)
Student Scheduling: MPP
- CourseRequest.isMPP() -- do not return true when the request has no initial assignment, but only
some preferences (selected choices) - this is to avoid problems when initial assignments must be kept (e.g., branch&bound does not
allow MPP request to be left unassigned)
Revision a5df083 by tomas-muller muller@unitime.org (19-Nov-2020 8:57 PM)
Student Scheduling: Required Sections / Configs
- CourseRequest.isRequired(Section) -- corrected the config checking when there is a section
required
Revision 62bfaa7 by tomas-muller muller@unitime.org (17-Nov-2020 9:02 AM)
Student Scheduling: Concurrent Modification
- improved handing of concurrent modification errors during backtracking (caused by a model change
during the search) - retry computation of the neighbour selection up to five times rather than skipping to the next
student/request
Revision 12657a9 by tomas-muller muller@unitime.org (15-Nov-2020 1:16 PM)
Student Scheduling: Branch & Bound Selection
- value ordering: always prefer enrollments that do not have a time conflict with a lower priority
course which has only a few possible enrollments (five or less) - partial comparison of enrollments that are otherwise very close to each other was breking
comparator transitivity in some cases - set OnlineStudentSectioning.TimesToAvoidHeuristics to false to swith of the time conflict
checking
Revision 55c3eab by tomas-muller muller@unitime.org (15-Nov-2020 1:12 PM)
Student Scheduling: Critical IFS
- can unassing: check student priority (do not allow unassignment of higher priority student)
- can unassign: added ability to allow/disallow unassigment of a course request of the same or
higher request priority (more critical) - by setting Neighbour.AllowCriticalUnassignment to true (defaults to false)
Revision 7290163 by tomas-muller muller@unitime.org (15-Nov-2020 1:09 PM)
Student Scheduling: Request Bound
- added ability to switched off the request bound adjustments implemented by commit 5d0b726
- by setting StudentWeights.ImprovedBound to false (defaults to true)
Revision c8d9df9 by tomas-muller muller@unitime.org (15-Nov-2020 1:04 PM)
Student Scheduling: Failed Neighbour Assignment
- backtrack and student swap now also listen for failed neibhours, putting the failed
student/request back into the queue - improving success of each phase, especially when there are higher number of solver threads
- also students are put at the beginning of the queue, ensuring that priority students are
processed first
Revision f555fa7 by tomas-muller muller@unitime.org (15-Nov-2020 12:59 PM)
Student Scheduling: XML Save/Load
- include course id in the current/best/initial enrollment
- this is to fix the case where a student is requesting multiple courses of a cross-listed course
as alternatives to each other
Revision 1639c6f by tomas-muller muller@unitime.org (13-Nov-2020 5:16 PM)
Student Scheduling: Branch & Bound
- when a neigbour (class schedule of a student) fails to be assigned, e.g., because the last spot
in a class got taken: - put the student back at the beginning of the queue (instead of the end)
- this is to ensure that student priority is beter considered (priority student does not get
bumped at the end of the list)
Revision 4b8c09d by tomas-muller muller@unitime.org (13-Nov-2020 2:06 PM)
Student Scheduling: Request Bound
- improved computation of course request bound in an attempt to improve the branching
- include penalization for arrange hours, online, selection and intitial placement if it cannot be
avoided
(e.g., when all enrollments are online)
Revision 5d0b726 by tomas-muller muller@unitime.org (12-Nov-2020 9:04 PM)
Course Timetabling: Same Dates Group Constraint
- added a new group constraint SAME_DATES
- given classes must be taught on the same dates
- if one of the classes meets more often, the class meeting less often can only meet on the dates
when the other class is meeting - when prohibited or (strongly) discouraged: given classes cannot be taught on the same days
(there cannot be a date when both classes are meeting) - note: unlike with the same days/weeks constraint, this constraint consider individual meeting
dates of both classes
Revision 0e491d2 by tomas-muller muller@unitime.org (11-Nov-2020 6:04 PM)
Student Scheduling: Branch & Bound Selection
- value ordering: among enrollments that are otherwise very close to each other (in terms of their
value), prefer those that do not have a time conflict with a lower priority course which has
only a few possible enrollments (five or less)
Revision 835f055 by tomas-muller muller@unitime.org (11-Nov-2020 5:34 PM)
Student Scheduling: Priority Students
- student priority changed from being a boolean (priority yes/no) to have five layers of priority
students - named Priority > Senior > Junior > Sophomore > Freshmen > Normal (no priority)
- students of higher priority are assigned before students of lower priority
- combined with course request priority depending on
Sectioning.PriorityStudentsFirstSelection.AllIn - when true, student priority takes precedence Critical Priority > Non-Critical Priority >
Critical Senior ... - when false, request priority takes precedence Critical Priority > Critical Senior > ... >
Non-Critical Priority ...
Revision 6891ac1 by tomas-muller muller@unitime.org (6-Oct-2020 3:40 PM)