<?xml version="1.0"?>
<?xml-stylesheet type="text/css" media="screen" href="svn-log.css"?>
<log>
<title>CP Solver v1.2 build 73 change log (since the last release, build 46 on 13 May 2011 00:00)</title>
<logentry
   revision="544">
<author>Tomas Muller</author>
<date>2011-05-24 18:19:47</date>
<msg>Batch Student Sectioning Solver
 - save/load XML: remember enrollment reservation
   - this is to avoid conflicts when restoring initial / best / current solution</msg>
</logentry>
<logentry
   revision="545">
<author>Tomas Muller</author>
<date>2011-05-24 18:24:02</date>
<msg>Batch Student Sectioning Solver
 - section / config unreserved space in limit constraints: use the same technique to overcome rounding problems as for the section / config limit
   - that is adding a little less than the biggest request weight (of the section / config) to the unreserved space</msg>
</logentry>
<logentry
   revision="546">
<author>Tomas Muller</author>
<date>2011-05-24 18:25:52</date>
<msg>Batch Student Sectioning Solver
 - branch &amp; bound: when using projected students with weight different from one -- bound was weighted by the request weight but no the (solution) value
   - this is now corrected</msg>
</logentry>
<logentry
   revision="547">
<author>Tomas Muller</author>
<date>2011-05-31 08:58:56</date>
<msg>Student Sectioning Solver: added Student.externalId</msg>
</logentry>
<logentry
   revision="548">
<author>Tomas Muller</author>
<date>2011-06-01 17:49:45</date>
<msg>Student Sectioning Solver: added Student.name</msg>
</logentry>
<logentry
   revision="549">
<author>Tomas Muller</author>
<date>2011-06-01 18:27:17</date>
<msg>Student Sectioning Solver: added Enrollment.timeStamp</msg>
</logentry>
<logentry
   revision="550">
<author>Tomas Muller</author>
<date>2011-06-02 20:14:39</date>
<msg>Student Sectioning Solver
 - Student.equals -- fixed the case when real and projected student ids are overlapping</msg>
</logentry>
<logentry
   revision="551">
<author>Tomas Muller</author>
<date>2011-06-09 20:12:10</date>
<msg>Course Timetabling Solver: Distribution  (Group) Constraint
 - added maximum hours a day constraint
 - soft version: weighting schema changed to measure how well is the constraint violated
   - constraint weight: -1 if satisfied (-4 for strong preference), N if violated (times 4 for strong preference), 0 if not assigned
     - for most constraints N is how many class pairs do not meet the constraint
     - for BTB: how many classes would need to be unassigned if hard
     - for max hours a day: how many hours over a day is there
 - code cleanup (replaced TYPE_ constants with an enum, etc.)</msg>
</logentry>
<logentry
   revision="552">
<author>Tomas Muller</author>
<date>2011-06-10 07:09:14</date>
<msg>Course Timetabling Solver: Discouraged Room Constraint
 - now implements WeakeningConstraint</msg>
</logentry>
<logentry
   revision="553">
<author>Tomas Muller</author>
<date>2011-06-14 18:31:21</date>
<msg>Distance Metric: cache distances</msg>
</logentry>
<logentry
   revision="554">
<author>Tomas Muller</author>
<date>2011-06-14 18:32:57</date>
<msg>Course Timetabling Solver
 - added weight on distance student conflicts
   - this means that distance student conflicts can now be weighted differently than "ordinary" student conflicts
   - distance student conflict weight defaults to student conflict weight</msg>
</logentry>
<logentry
   revision="555">
<author>Tomas Muller</author>
<date>2011-06-15 00:05:36</date>
<msg>Course Timetabling Solver: Distribution  (Group) Constraint
 - compute preference min/max using the new weighting schema (revision 551)</msg>
</logentry>
<logentry
   revision="556">
<author>Tomas Muller</author>
<date>2011-06-15 00:25:01</date>
<msg>Course Timetabling Solver: Distribution  (Group) Constraint
 - compute preference using the new weighting schema (revision 551)</msg>
</logentry>
<logentry
   revision="568">
<author>Tomas Muller</author>
<date>2011-07-01 13:37:33</date>
<msg>Optimization Objective Criteria
 - criteria allows the optimization objective to be split into several (optimization) criteria and modeled as a weighted sum of these
   - this should help the course / examination / sectioning solvers to be more versatile, easily allowing to turn on and off different aspects of optimization (or implement new more institution dependent ones)
 - first implementation (including base search and university course timetabling)

Merged from dev_criteria branch, revisions 558 - 567.</msg>
</logentry>
<logentry
   revision="569">
<author>Tomas Muller</author>
<date>2011-07-04 19:31:15</date>
<msg>Solver: avoid empty extensions</msg>
</logentry>
<logentry
   revision="570">
<author>Tomas Muller</author>
<date>2011-07-04 19:31:55</date>
<msg>University Course Timetabling
 - Lecture: added ability to clear value cache</msg>
</logentry>
<logentry
   revision="571">
<author>Tomas Muller</author>
<date>2011-07-04 19:33:25</date>
<msg>University Course Timetabling
 - save / load XML: added ability to have time placements with different date patterns in a domain</msg>
</logentry>
<logentry
   revision="572">
<author>Tomas Muller</author>
<date>2011-07-04 19:42:46</date>
<msg>University Course TimetablinG: Added student lunch break (experimental) criterion
 
 Naive, yet effective approach for modeling student lunch breaks. This criterion is based on {@link StudentConflict} and it creates a conflict whenever there are two classes (that share students) overlapping with the lunch time which are one after the other with a break in between smaller than the requested lunch break. Lunch time is defined by StudentLunch.StartSlot and StudentLunch.EndStart properties (default is 11:00 am - 1:30 pm), with lunch break of at least StudentLunch.Length slots (default is 30 minutes). Such a conflict is weighted by Comparator.StudentLunchWeight, which defaults to Comparator.StudentConflictWeight.</msg>
</logentry>
<logentry
   revision="573">
<author>Tomas Muller</author>
<date>2011-07-07 20:13:05</date>
<msg>Course Timetabling: added Same Weeks distribution constraint
 - given classes must be taught during the same weeks (i.e., must have the same date pattern)
 - when prohibited or (strongly) discouraged: any two classes must have non overlapping date patterns
 - only applicable when alternative date patterns are used

</msg>
</logentry>
<logentry
   revision="574">
<author>Tomas Muller</author>
<date>2011-07-07 20:15:23</date>
<msg>Course Timetabling: branch &amp; bound neighbor selection
 - ensure that the search is stopped shortly after the time limit is reached (can make a huge difference for variables with large domains)</msg>
</logentry>
<logentry
   revision="575">
<author>Tomas Muller</author>
<date>2011-07-07 20:16:20</date>
<msg>Course Timetabling: XML loader
 - added ability to skip purging invalid placements phase (when solver parameter General.PurgeInvalidPlacements is set to false, defaults to true)</msg>
</logentry>
<logentry
   revision="576">
<author>Tomas Muller</author>
<date>2011-08-18 21:17:29</date>
<msg>Course Timetabling Solver
 - student sectioning; allow student swaps between classes with different parents (swap is propagated over parent classes as well).
   - originally, student swaps were only initiated from the top most level or between classes with the same parent
   - which does not seem to work well with courses containing many parent - child relations -&gt; hence this improvement</msg>
</logentry>
<logentry
   revision="577">
<author>Tomas Muller</author>
<date>2011-08-19 17:10:04</date>
<msg>Course Timetabling Solver
 - in the interactive mode
   - time / room preferences: exclude hard constraint violations in the %
   - added time / room violations: number of hard constraint violations (number of classes assigned in prohibited time or room)</msg>
</logentry>
<logentry
   revision="578">
<author>Tomas Muller</author>
<date>2011-08-19 18:36:53</date>
<msg>Course Timetabling Solver
 - in the interactive mode
   - time / room violations: only count prohibited assignments (required assignments are ok)</msg>
</logentry>
<logentry
   revision="579">
<author>Tomas Muller</author>
<date>2011-08-19 18:38:34</date>
<msg>Course Timetabling Solver
 - in the interactive mode
   - time / room bounds: correctly exclude prohibited / required values</msg>
</logentry>
<logentry
   revision="580">
<author>Tomas Muller</author>
<date>2011-08-24 15:07:45</date>
<msg>Course Timetabling Solver
 - student sectioning: fixed NullPointerException introduced by a recent change (revision 576, swaps between classes with different parents)
   - it failed to be able to move a student away (swap with a null student) from a section with a parent class</msg>
</logentry>
<logentry
   revision="581">
<author>Tomas Muller</author>
<date>2011-08-26 07:41:54</date>
<msg>Examination Timetabling
 - load XML: loading of examination period preferences was disabled
   - slipped in by accident in revision 460 (likely due to some testing)</msg>
</logentry>
<logentry
   revision="582">
<author>Tomas Muller</author>
<date>2011-08-26 07:42:49</date>
<msg>Examination Timetabling
 - number of instructor direct conflicts was counted wrong</msg>
</logentry>
<logentry
   revision="583">
<author>Tomas Muller</author>
<date>2011-09-13 14:06:11</date>
<msg>Student Sectioning
 - added dummy reservation (to model by reservation only offerings)
   - this reservation is to be set only on an offering, has the lowest priority, unlimited size (blocks all the remaining space) and it matches no student</msg>
</logentry>
<logentry
   revision="584">
<author>Tomas Muller</author>
<date>2011-09-13 19:06:31</date>
<msg>Student Sectioning: Enrollment
 - added approval attribute
   - to be only used in online student scheduling, keeping information about consent approval</msg>
</logentry>
<logentry
   revision="585">
<author>Tomas Muller</author>
<date>2011-09-22 07:23:40</date>
<msg>Student Sectioning Solver Model
 - Solution Info: added Reservations counter (counting the number of enrollments that are using reservations out of those that can use reservation)</msg>
</logentry>
<logentry
   revision="586">
<author>Tomas Muller</author>
<date>2011-09-22 07:27:04</date>
<msg>Student Sectioning Solver
 - added Linked Sections distribution constraint
   - classes (of different courses) are to be attended by the same students
   - for instance, if class A1 (of a course A) and class B1 (of a course B) are linked, a student requesting both courses must attend A1 if and only if he also attends B1
   - this is a student sectioning constraint that is interpreted as Same Students constraint during course timetabling</msg>
</logentry>
<logentry
   revision="587">
<author>Tomas Muller</author>
<date>2011-09-22 07:29:38</date>
<msg>Student Sectioning Solver
 - reservations tweaks
   - load from XML: enrollments with a reservation need be assigned first to avoid conflicts of other enrollments (due to the unreserved space)</msg>
</logentry>
<logentry
   revision="588">
<author>Tomas Muller</author>
<date>2011-09-22 07:32:53</date>
<msg>Student Sectioning Solver
 - reservations tweaks
   - unreserved space that is computed on a config, a section or an offering can be negative 
     - this is to help sort out the rounding issues when there are course requests with different weights meeting a reservation</msg>
</logentry>
<logentry
   revision="589">
<author>Tomas Muller</author>
<date>2011-09-22 07:35:26</date>
<msg>Student Sectioning Solver
 - reservations tweaks
   - cache available reservations (reservations of the appropriate offering(s) that are applicable to the student of the request) on a course request to speedup the computation</msg>
</logentry>
<logentry
   revision="590">
<author>Tomas Muller</author>
<date>2011-09-22 07:36:02</date>
<msg>JProf -- synchronized initialization to ensure it is called just once</msg>
</logentry>
<logentry
   revision="591">
<author>Tomas Muller</author>
<date>2011-09-22 07:36:43</date>
<msg>Progress -- fixed a JavaDoc issue ( &lt; changed to &amp;lt; )</msg>
</logentry>
<logentry
   revision="592">
<author>Tomas Muller</author>
<date>2011-09-22 07:39:02</date>
<msg>CSVFile -- fixed an issue in parsing a file with quotation marks (a field starting with a comma was parsed incorrectly)</msg>
</logentry>
<logentry
   revision="593">
<author>Tomas Muller</author>
<date>2011-09-23 14:04:07</date>
<msg>Student Sectioning Solver: Reservation Changes
 - reservation limit is now capped by the highest number of students that can enroll into the offering using the reservation
   - so, for instance, if the reservation is set on a class with limit of 10, the reservation limit will capped to 10 (even if it is marked as unlimited)
   - this ensures that other students will be able to get into the offering (but not the class(es) or configuration(s) of the reservation)
 - reservation can be marked as "must be used"
   - individual and group reservations are currently set as "must be used"
   - if a student requests a course and there is a "must be used" reservation for this student (individual or group), student has to enroll into the course using the reservation
    - i.e., he/she cannot use a different or no reservation even if there is a conflict</msg>
</logentry>
<logentry
   revision="594">
<author>Tomas Muller</author>
<date>2011-09-27 16:40:32</date>
<msg>Student Sectioning
 -  enrollment with an individual reservation can overlap with other enrollments of the student
   - like with subparts that can overlap, overlapping time is minimized</msg>
</logentry>
<logentry
   revision="595">
<author>Tomas Muller</author>
<date>2011-10-18 18:09:35</date>
<msg>Online Student Sectioning
 - computation of expected space: consider section sizes</msg>
</logentry>
<logentry
   revision="596">
<author>Tomas Muller</author>
<date>2011-10-18 18:10:11</date>
<msg>Online Student Sectioning
 - added section note</msg>
</logentry>
<logentry
   revision="597">
<author>Tomas Muller</author>
<date>2011-10-21 18:47:10</date>
<msg>CourseRequest#getAvaiableEnrollmentsSkipSameTime
 - computation of available enrollments (one for each time) corrected by moving same time check after the availability check</msg>
</logentry>
<logentry
   revision="598">
<author>Tomas Muller</author>
<date>2011-11-15 09:11:12</date>
<msg>Online Student Sectioning
 - add student status and email time stamp</msg>
</logentry>
<logentry
   revision="599">
<author>Tomas Muller</author>
<date>2011-12-01 09:43:13</date>
<msg>Model: restore from best
 - added ability to provide a custom comparator to define in which order best values are to be restored</msg>
</logentry>
<logentry
   revision="600">
<author>Tomas Muller</author>
<date>2011-12-01 09:44:22</date>
<msg>Student Sectioning: Request.compareTo
 - make sure that requests of different students do not compare as equal</msg>
</logentry>
<logentry
   revision="601">
<author>Tomas Muller</author>
<date>2011-12-01 10:23:41</date>
<msg>Student Sectioning Model: restore from best
 - restore enrollments in an order that is avoiding potential conflicts (e.g., enrollments with reservations should be assigned first)</msg>
</logentry>
<logentry
   revision="602">
<author>Tomas Muller</author>
<date>2011-12-01 10:24:49</date>
<msg>Model: restore from best
 - added ability to provide a custom comparator to define in which order best values are to be restored
   - forgot to check variables that are not assigned but that have best values</msg>
</logentry>
<logentry
   revision="603">
<author>Tomas Muller</author>
<date>2011-12-06 10:09:43</date>
<msg>Student Sectioning
 - include student name, external id and status in the XML</msg>
</logentry>
<logentry
   revision="604">
<author>Tomas Muller</author>
<date>2011-12-06 18:14:01</date>
<msg>Student Sectioning
 - time overlaps (with other courses) are only allowed for individual reservations (not for group reservations, where this flag got accidentally inherited)</msg>
</logentry>
<logentry
   revision="605">
<author>Tomas Muller</author>
<date>2011-12-06 22:58:42</date>
<msg>Student Sectioning Reservation
 - with the new features like by reservation only (on an offering) or allow overlaps (individual reservation) expired reservations can no longer disappear (not loaded)
   - reservations have a n expired flag instead; expired reservations still work as ordinary reservations, except they do not reserve any empty space (i.e., they do not prevent other students to get into the offering / config / section)</msg>
</logentry>
<logentry
   revision="606">
<author>Tomas Muller</author>
<date>2011-12-06 23:39:34</date>
<msg>Student Sectioning Reservations
 - individual and group reservations must be used unless they are expired
   - in other words, expired reservation can be avoided (as it no longer reserves any space)</msg>
</logentry>
<logentry
   revision="607">
<author>Tomas Muller</author>
<date>2011-12-07 20:40:02</date>
<msg>Room Sharing Model
 - changed encoding of free for all and not available spaces
   - this is to allow more than 22 departments in the matrix without intermixing departments and free for all / not available space
     - F (used to encode free for all) can be also interpreted as 23rd department, X (used to encode not available) for 41st department in the sharing
   - should work well for at least 150 departments</msg>
</logentry>
<logentry
   revision="608">
<author>Tomas Muller</author>
<date>2011-12-16 20:50:56</date>
<msg>Following distributions constraints were added:

At Most 5 Hours A Day
 - Classes are to be placed in a way that there is no more than five hours in any day.

Back-To-Back Precedence
 - Given classes have to be taught in the given order, on the same days, and in adjacent time segments.
 - When prohibited or (strongly) discouraged: Given classes have to be taught in the given order,  on the same days, but cannot be back-to-back.

Same Days-Time
 - Given classes must be taught at the same time of day and on the same days.
 - It is the combination of Same Days and Same Time distribution preferences.     
 - When prohibited or (strongly) discouraged: Any pair of classes classes cannot be taught on the same days during the same time.

Same Days-Room-Time
 - Given classes must be taught at the same time of day, on the same days and in the same room.
 - It is the combination of Same Days, Same Time and Same Room distribution preferences.
 - Note that this constraint is the same as Meet Together constraint, except it does not allow room sharing. In other words, it is only useful when these classes are taught during non-overlapping date patterns.
 - 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.

Based on a change contributed by Matej Lukac.</msg>
</logentry>
</log>

