Releases: UniTime/cpsolver
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)
cpsolver-1.3.219
Course Timetabling: Room Availability
- do not check room availability on rooms that ignore room checking
- XML load: do not set unavailabilities on rooms that ignore room checking
(when a committed class is being loaded) - this fixes an issue with ONLINE rooms after the solution has been passivated in UniTime
Revision 4f454c9 by tomas-muller muller@unitime.org (22-Sep-2020 5:34 PM)
Course Timetabling: Instructor Conflicts
- Lecture.computeConflicts: ensure that cases when an instructor has a distance conflict with an
unavailability (e.g., committed class of a different problem) are not included in the domain
Revision c2727fb by tomas-muller muller@unitime.org (18-Sep-2020 10:50 AM)
Student Sectioning: Restrictions
- ensure restrictions are not broken by adding RequiredRestrictions global constraint into the
model
Revision baaeb57 by tomas-muller muller@unitime.org (18-Sep-2020 10:43 AM)
Student Sectioning: Added Restrictions
- restrictions are like reservations, that must be used and that do not reserve any space
- there can be more than one restriction on an offering and the student must meet at least one
that applies to her/him - restrictions do not compete with reservations
- for an offering that has both reservations and restrictions, a student must meet one restriction
that applies to him/her and must also follow the reservations - this allows UniTime to define, for example, which course configurations a student can take
independently from the given reservations
Revision 49ef4ef by tomas-muller muller@unitime.org (3-Sep-2020 7:04 PM)
Student Scheduling: Solver Info
- corrected Selection detail
Revision 2cd2457 by tomas-muller muller@unitime.org (18-Aug-2020 5:55 PM)
Examination Timetabling: Soft Rooms
- added ability to have rooms that do not check for conflicts (room checking disabled in UniTime)
Revision 5f66634 by tomas-muller muller@unitime.org (18-Aug-2020 5:54 PM)
Student Scheduling: Complete Students
- corrected computation of dummy/priority students with a complete schedule
(do not double count a complete student when a free time is being assigned / unassigned)
Revision e6ff523 by tomas-muller muller@unitime.org (19-Jul-2020 7:42 PM)
Student Scheduling Weights: Time Conflicts
- corrected computation of time conflict penalization change
Revision f455d21 by tomas-muller muller@unitime.org (19-Jul-2020 7:01 PM)
Student Scheduling: Progress
- ensure that the progress does not get reset to the first phase when there is a solver thread
late on skipping it
Revision ab662c9 by tomas-muller muller@unitime.org (30-Jun-2020 5:28 PM)
Student Scheduling Solver: Priority Students
- use the setting of Sectioning.PriorityStudentsFirstSelection.AllIn when comparting two requests
for student and request priority - when Sectioning.PriorityStudentsFirstSelection.AllIn is set to true
- request of a priority student is always considered more important
e.g., do not assign a critical request of non-priority student when it conflicts with
a non-critical request of a priority student
(priority student takes precedence over non-priority) - when Sectioning.PriorityStudentsFirstSelection.AllIn is set to false
- more critical request is always connsidered more important (using request priority)
e.g., do not assign a non-critical request of a priority student when it conflicts with a critical
request of a non-priority students
(critical request takes precedence over non-critical)
Revision afea8ee by tomas-muller muller@unitime.org (25-Jun-2020 1:29 PM)
fixed a javadoc warning
Revision ed79895 by tomas-muller muller@unitime.org (25-Jun-2020 1:05 PM)
Dependencies: Dom4J
- dom4j upgraded to version 2.1.3 (was 2.1.1)
- this is to fix a high severity vulnerability (CVE-2020-10683)
dom4j before 2.1.3 allows external DTDs and External Entities by default, which might enable XXE
attacks
Revision b5d3694 by tomas-muller muller@unitime.org (25-Jun-2020 1:03 PM)
Student Scheduling Solver: Limit Constraints
- when chosing among adepts (for a conflict) in class, course, configuration, or reservation limit
constraints, prefer course requests in the following order - dummy students before other (only when PreferDummyStudents is true)
- non-priority students over priority students
- less critical courses over more critical courses
- assignments without a reservation over assignments with a reservation
- among the rest, prefer requests with higher value (lower priority, alternative over first
choice, etc.)
Revision a50b1d9 by tomas-muller muller@unitime.org (25-Jun-2020 12:52 PM)
Student Scheduling Solver: Priority Students
- when Sectioning.PriorityStudentsFirstSelection.AllIn is set to true, all course requests of
priority students are assigned first - the order when set to true:
critical courses of priority students
important courses of priority students
remaining courses of priority students
critical courses of non-priority students
important courses of non-priority students
remaining courses of non-priority students - the order when set to false:
critical courses of priority students
critical courses of non-priority students
important courses of priority students
important courses of non-priority students
remaining courses of priority students
remaining courses of non-priority students
Revision 01f8e05 by tomas-muller muller@unitime.org (25-Jun-2020 12:49 PM)
Student Scheduling: Required Sections / Configs
- CourseRequest.isRequired(Section) -- corrected the case when there is a section required that is
from a different configuration - that is:
when there is no match, but there are section requirements for a different config -> return false
Revision 2d69a3f by tomas-muller muller@unitime.org (12-Jun-2020 6:48 PM)
Student Scheduling: Online Sections
- added ability to mark some sections as online
- e.g., sections that have no time assignment, but also sections without a room or with a room
that allows for conflicts - online sections can be penalized just like the arranged hours sections
- possibly with a different weight (StudentWeights.OnlineFactor)
Revision 3dd92d5 by tomas-muller muller@unitime.org (10-Jun-2020 2:08 PM)
Course Timetabling: Instructor Constraint
- InstructorConstraint.getPreference(Assignment, Placement) corrected
(non-BTB preference was included multiple times for classes with multiple meetings in a week) - SoftInstructorConstraint include unavailability conflicts in the conflict computation
Revision 6634297 by tomas-muller muller@unitime.org (28-May-2020 9:32 PM)
Student Scheduling: Linked Sections
- added ability to break linked-sections constraint with a reservation
Revision 21b84f1 by tomas-muller muller@unitime.org (27-May-2020 5:07 PM)
Course Timetabling: Allow Break Hard
- added ability to include prohibited values in the domain (General.AllowBreakHard = true)
- only when these times/rooms are loaded in (e.g., due to the interactive mode)
Revision 7efd671 by tomas-muller muller@unitime.org (20-May-2020 10:10 AM)
Course Timetabling: Soft Instructor Constraint
- added a soft version of the instructor constraint (instructor conflicts are allowed, but
penalized)
Revision c8b7992 by tomas-muller muller@unitime.org (19-May-2020 8:29 PM)
Student Scheduling: MPP
- Student Swap, Limited-Depth Backtracking: do not unassign initial enrollment in MPP mode
- allow for an initial enrollment to be unassigned when the new enrollment is also initial
-> this is to allow the solver to swap two students (initial assignment of one student for initial
assignment of the other student) - however, do not unassign a course request with a fixed enrollment
Revision 4bcb362 by tomas-muller muller@unitime.org (14-May-2020 7:06 PM)
Student Scheduling: MPP
- Branch&Bound: do not leave course request with a fixed enrollment (or an initial enrollment when
initial assignment must be kept) unassigned - Student Swap, Limited-Depth Backtracking: do not unassign initial enrollment in MPP mode
- or an enrollment that would get a student below min creadit
- or an enrollment of a student with higher priority
- or an enrollment with higher request priority
Revision f15a53b by tomas-muller muller@unitime.org (12-May-2020 2:10 PM)
Student Scheduling: Single-course MPP
- avoid re-assignment of the same value to a variable
- when there are override reservations for conflicting original enrollments, re-assignment of an
enrollment (that does not have an override) can trigger a conflict on a course with such
overrides
Revision 0d62f3d by tomas-muller muller@unitime.org (11-May-2020 9:37 PM)
Student Scheduling: Load XML
- assign enrollments with a reservation first, but enrollments with an override go last
- this is to avoid conflicts of other enrollments
Revision 504f598 by tomas-muller muller@unitime.org (11-May-2020 9:35 PM)
Student Scheduling: Fixed Course Requests
- added ability to assign course request with one fixed enrollment
(no other enrollments are listed in the domain of the request in this case) - useful for signle-course MPP, especially if there are inconsistent enrollments in the courses
that are to be fixed (left unchanged)
Revision 6553f8c by tomas-muller muller@unitime.org (6-May-2020 6:58 PM)
Student Scheduling: MPP
- when using MPP in the mode where initial assignments cannot be changed
(Sectioning.KeepInitialAssignments is true)
-> when there is an initial assignment, only return the initial assignment in the course request's
domain
Revision 926d487 by tomas-muller muller@unitime.org (30-Apr-2020 1:58 PM)
Stud...
cpsolver-1.3.189
Online Student Scheduling: Suggestions
- consider order of the courses within a course request when comparing two suggestions
Revision ef53256 by tomas-muller muller@unitime.org (30-Oct-2019 8:24 PM)
Course Timetabling: Back-To-Back/Following Weeks
- added Back-To-Back Weeks distribution constraint
- given classes must be taught on weeks that are back-to-back (the gap between the two assigned
date patterns is less than a week) - when prohibited or (strongly) discouraged: any two classes must have at least a week gap in
between - added Following Weeks distribution constraint
- given classes must be taught on weeks that are back-to-back and in the given order
- when prohibited or (strongly) discouraged: given classes must be taught on weeks in the given
order with at least one week between any two following classes
Revision 67338fe by tomas-muller muller@unitime.org (25-Oct-2019 5:32 PM)
Examination Timetabling: More Than One Exam A Day
- added the ability to set a penalty when a student has two exams or more a day
- to enable add org.cpsolver.exam.criteria.additional.StudentMoreThan1ADayConflicts to Exam
Additional Criteria - more than one exam a day student conflict weight can be set by problem property
Exams.MoreThanOneADayWeight
Revision e4c37b9 by Rafat Rafat@Ishaq (1-Oct-2019 3:35 PM)
cpsolver-1.3.185
Student Scheduling: Dummy Students
- improved handling of projected students
Revision c7b4502 by tomas-muller muller@unitime.org (13-Sep-2019 3:09 PM)
Student Scheduling: Priority Students
- added ability to mark some students as priority students
- priority students are scheduled first (after the critical course assignments), improving their
chance of getting the courses they need
Revision d5e0377 by tomas-muller muller@unitime.org (9-Sep-2019 8:23 AM)
cpsolver-1.3.182
Student Scheduling: Advisors
- added student's advisor(s)
- only needed for reporting
Revision 991fafc by tomas-muller muller@unitime.org (6-Aug-2019 10:34 PM)
Student Scheduling: Extended Info
- added information about full sections and offerings
- added information about students with time overlaps (number of students, average overlapping
minutes)
Revision 0152c5f by tomas-muller muller@unitime.org (6-Aug-2019 6:25 PM)
Student Scheduling: Online Test
- save best after every iteration
Revision 33187c2 by tomas-muller muller@unitime.org (6-Aug-2019 4:34 PM)
Student Scheduling: StudentByRequestDate
- added ability to order students by the avarage course request timestamp
Revision 7780d40 by tomas-muller muller@unitime.org (6-Aug-2019 4:33 PM)
Examination Timetabling: Availability
- when instructor or student direct conflicts are not allowed, also do not allow for availability
violations
Revision 89c0918 by tomas-muller muller@unitime.org (6-Aug-2019 4:32 PM)
cpsolver-1.3.179
Batch Student Scheduling: Critical Course Requests
- improved handling of critical course requests
- only consider critical course requests when sorting students for the Critical Courses B&B phase
(students with fewer choices go first) - added two new phases that are only considering critical course requests, using backtracking and
IFS
Revision 2ffe7bb by tomas-muller muller@unitime.org (11-Jul-2019 8:30 PM)
Student Scheduling: Timing
- display information about solver speed in the solver log (debug level) after particular phases
- branch & bound, backtrack, student swap, and student enrollment swap
Revision b8b4f5d by tomas-muller muller@unitime.org (11-Jul-2019 8:30 PM)