Table of Contents

Description

Both the description & the jargon employed are described in section-1 of the manual pages; "man/man1/weekdaze.1". To prompt one to the existence of some special meaning, jargon has been distinguished by underscoring.

Configuration

The packaged example configuration-files are largely self-describing, but their structure is more rigorously defined by "dtd/weekdaze.dtd" (which is used in the application by a validating parser). Whilst this DTD may define the permissible structure, it says nothing about the semantics, which is the domain of this document. The corollary is that this document may not detail trivial XML-tags required for purely syntactic purposes, & so it is intended to be read with both the DTD & one of the packaged examples, open for reference.
This application can for greater relational integrity & slightly fewer features, can also read its configuration from a SQL-database. The database-schema for which is defined in "sql/*.sql" & has been structured so that this application can be run from a website, in that it caters for many isolated users, each with many independent timetable-problems.
In the following description, default configuration-values, are where relevant defined in brackets following their identifiers.
Some of the configuration can also be over-ridden by command-line options; see section-1 of the man-pages.

Overview

The top level of the file is divided into:
configVersion
An XML-element containing the ordered list of integers defining the version of the configuration-structure.
executionOptions
Defines the details of the solution-algorithm. This part of the configuration is independent of the specific timetable-problem, & consequently typically persists between problems.
outputOptions
Defines the presentation of the solution. This part of the configuration is independent of the problem, & consequently typically persists between problems.
problemParameters
Defines the problem, & is therefore highly volatile.

executionOptions

This is an XML-element containing the following XML-tags.
randomSeed
This optional XML-attribute takes an integer with which to seed the unique pseudo-random number-generator used for all the application’s random operations. In its absence, the pseudo-random number-generator will be seeded from the operating-system, an unpredictable sequence will result, & the application may produce different solutions to the same problem, each time it is run. The evolutionary lineage resulting from each choice of seed may differ, but since there are conceptually infinite possible seeds & a finite number of solutions to the configured problem, some must ultimately converge. Changing the seed can sometimes produce a radically different & potentially superior solution. This feature is required for performance-testing where repeatability is required, but may also be useful if one wants to generate a similar timetable after a small change to either the configuration or the initial state (see "inputStudentViewTimetable").
Even with the same seed, the pseudo-random sequence depends on the platform on which the application was compiled.
traversalOrder
During the "Initial Deterministic Timetable" (see section-1 of the man-pages), the three-dimensional structure of the timetable is constructed using a raster-scan, which visits each coordinate, sequentially booking lessons. This raster-scan can be constructed using any of the 48 permutations of axis-order & sense of travel along each. Because the axes represent different concepts, their order within the raster, alters the character of the solution. The sense of travel along each axis also alters the solution, though unless any of the criteria defined in "problemParameters" break symmetry, it will merely be a mirror-image.
This optional XML-element permits specification of the raster-scan. The required order of the three axes is specified as a triple, the first XML-element of which defines the "axis" (& optionally the "sense") along which change is slowest, & the last of which represents the axis (& optionally the sense) along which change is most rapid. If the sense of travel along any axis is unspecified then both will be tried.
Since it can be difficult to guess in advance which permutation will result in the best solution (though the 2 permutations matching "(+ObserverId,+TimeslotId,Day)" seem to perform slightly above average), the default is to evaluate them all & select the best according to the weighted mean over the timetable-criteria. The additional time required, is typically small (especially where there’s hardware to support parallel execution) compared to that required by the subsequent improvement of the solution using various evolution-strategies.
inputStudentViewTimetable
As an alternative to defining the "traversalOrder", one can specify the path to a file from which the initial timetable can be read; typically created by a previous call to this application (see ’xml view="StudentView"’, or the command-line option "--outputStudentViewTimetable"). This allows one to adjust the configuration to account for small changes, or to manually amend the solution in an attempt to compensate for some feature which the configuration doesn’t address, whilst retaining some hope that the final solution will be similar to the original. It also gives the user enough rope to hang themselves (i.e. destabilise the application), & though some checks are performed on the validity of the imported student-view timetable, there are probably ways that haven’t been envisaged, & even those that have, can be individually deactivated via the switches in "timetableValidationSwitches".
Whilst tightening a constraint in "problemParameters", will typically require corresponding changes to the imported student-view timetable, until it complies with this new requirement, relaxing a constraint is relatively safe; e.g.:
ResourceAttributeSafe Change
============================
group"meetingTimes"Reduce
location"capacity"Increase
location"facilities"Increase
teacher"service"Expand
teachercourse/"synchronisationId"Remove
teachercourse/"maximumClassSize"Increase or remove
teachercourse/"minimumConsecutiveLessons"Reduce
teachercourse/"requiredFacilities"Reduce
teachercourse/"timeslotRequest"/"ideally"Any
teacher"freePeriodPreference"Any
teacher"groupMembership"Reduce
teacher"specialtyTopic"Any
teacher"maximumTeachingRatio"Increase
student-body"freePeriodPreference"Any
student-body"groupMembership"Reduce
student-body"knowledgeRequirements"Migrate a subject between "core" & "optional" sections
student-body"studentId"sReduce
student-body"teachingRatio"Increase, with compensatory increase in "knowledgeRequirements"
"availability"Increase
evolutionStrategies
The mutation of each candidate timetable involves partial depletion followed by reconstruction. The reconstruction phase can (for any evolution-strategy) be performed by the application using either of two constructors;
deterministicConstructorwhich uses the lesson-criteria in an attempt to select the best lesson to place in each time-slot.
randomConstructorwhich merely selects a lesson randomly, from those which are viable.

The former is far more effective, but the optimum timetable might only be reached by means of some sub-optimal lesson-selections, which can only be taken by the "randomConstructor".
One can define the fecundity (i.e. how large a population of candidate solutions to breed) depending on which constructor is used, for each of the depletion-strategies (defined in section-1 of the man-pages).


  synchronisedCourseByDayMutation,
  synchronisedCourseMutation,
  excessRunlengthMutation,
  homogeneousStudentViewLessonMutation,
  incompleteCourseMutation,
  randomLessonMutation,
  singletonStudentClassMutation,
  splitSessionMutation,
  studentBodyCombinationMutation,
  studentViewTimetableForDayMutation,
  studentViewTimetableForWeekMutation,
  synchronousLessonMutation.

CAVEAT: the default fecundity of 0, deactivates the corresponding evolution-strategy.

N.B.: some of these depletion-strategies will be irrelevant in the context of a given problem; e.g. "synchronisedCourseMutation" where no synchronised courses have been defined; but under these circumstances, the irrelevant depletion-strategy takes a negligible time, so there’s little to be gained from manually zeroing the fecundity of each of the corresponding constructors.

randomLessonMutationNTrials [256]
The number of random trials to use in "randomLessonMutation".

randomLessonMutationNTimeslots [3]
The number of lessons to un-book in each random trial during "randomLessonMutation".

studentViewTimetableForDayMutationNDays [all]
The number of days to un-book in "studentViewTimetableForDayMutation". If unspecified, then all valid values will be tried.

studentViewTimetableForWeekMutationNTrials [16]
The number of random trials to use in "studentViewTimetableForWeekMutation".

studentViewTimetableForWeekMutationNTimeslots [4]
The number of lessons to un-book in each random trial during "studentViewTimetableForWeekMutation".

fecundityDecayRatio [0.5]
The factor (in the closed unit-interval [0,1]) by which the fecundity of the breeding-program for future generations, is multiplied (& therefore exponentially reduced), when the population-diversity ratio falls beneath "minimumPopulationDiversityRatio".

Each generation of the evolution of the timetable, involves breeding a population of candidate solutions (of size fecundity), then sparking multiple threads, to evaluate the fitness of each. This scales well on a multi-core machine, but if too many candidates are generated, inefficiency begins to creep in (even if CPU-cores are available to support them); either because more superior solutions are found, than are selected as parents for a subsequent generation; or because some mutations are identical, resulting in duplication of effort. Consequently, the initial fecundity is reduced by a feedback-loop, which monitors the population-diversity ratio of the candidates, & should it be observed to fall beneath a critical threshold, the fecundity of the breeding-program for future generations, is decreased by the specified factor.

minimumPopulationDiversityRatio [0.5]
The population-diversity ratio (in the closed unit-interval [0,1]), beneath which a reduction in the fecundity of the breeding-program for future generations, by a factor of "fecundityDecayRatio", is triggered.

nInitialScouts [1]
Each generation of the evolution of the timetable, involves breeding a population of candidate solutions, from which the best (even when less fit than their parent) few are selected. Each selected scout is used independently to seed the breeding of a sub-generation of candidates from which one fewer scouts are then selected. The resulting family-tree, sprouts fewer branches with each successive generation, & so eventually withers. The best from all the scouts (nodes) in this family-tree, is then compared with the fitness of the original parent; & is either found to be fitter, & consequently used to re-start this process (i.e. this paragraph), or is found to be less fit, & the evolutionary process is terminated.
nInitialScoutsInferiorBreeding-Total ScoutsBehaviour
Generationssessions
Tolerated
==================================================================
00??A variable number of scouts is used. Each candidate comparing equal best, & better than their parent, is selected. This results in monotonically increasing fitness (equivalent to a hill-climbing algorithm), & might result in a very wide search, but is typically effective.
1011Only the best child is selected from the single breeding-session & compared with the parent; no inferior candidates can propagate to subsequent generations. This results in monotonically increasing fitness (equivalent to a hill-climbing algorithm), & has the disadvantage that it can become trapped in a local maximum solution; actually such traps can still be escaped if the variation operations (i.e. mutations) permit large enough steps across the solution-space.
2134The best two scouts are selected from the breeding-session in the first generation; & from each independently bred second generation, the single best scout is selected. This differs conceptually in that one generation of inferior children is tolerated; though to be successful, @ least one of the four scouts (two children & two grandchildren), must be fitter than the original parent.
321015The best three scouts are selected from the breeding-session in the first generation; & from each independently bred second generation, the best two scouts are selected; & from each independently bred third generation, the single best scout is selected. Two inferior generations are tolerated; though to be successful, @ least one of the fifteen scouts (three children, six grandchildren & six great-grandchildren), must be fitter than the original parent.
nn-1X(n) =1+n*X(n-1)Y(n) =n*[1+Y(n-1)]Execution-time is approximately proportional to (X(n) / n), which is approximately (n - 1)!. Though the best scout is never worse than that found from fewer initial scouts, the improvement doesn’t typically justify the additional effort; except that it makes the evolutionary process less prone to premature termination than when using a smaller number of scouts, where there’s a greater chance that none are better than their parent. Such levels result in a wider search of the solution-space, & may be employed in desperation when tackling timetable-problems which have resisted one’s initial solution-attempt; one can see an example of this in section-1 of the manual pages for this product.

lessonCriteriaWeights
When constructing a timetable the solution-algorithm determines the set of all possible lessons, which may be booked @ a specific time-slot, then selects the best according to the weighted mean of various criteria. One can vary each fractional weight within the closed unit-interval [0,1], which @ the lower bound disables the associated criterion.
These criteria are merely an ad-hoc heuristic, used to construct a viable timetable; after construction, timetables may be compared for fitness using "timetableCriteriaWeights".
This optional XML-element contains the fractional weights (each defaulting to 0) applied to the respective values of these criteria.
CAVEAT: this is rather esoteric & it is probably best merely to copy the criteria-weights, from the most appropriate of the packaged examples. One can use "optimiseLessonCriteriaWeights", to improve the specified weights, but this typically takes more time than it saves.
Criterion-weight
================
areResourcesReusedA lesson is preferred, if the required resources (locations & teachers) are shared with other student-bodies, by temporarily merging them into a single larger student-class.
greatestMinimumConsecutiveLessonsA lesson is preferred, if the course’s "minimumConsecutiveLessons" is larger, since this makes it harder to book later, into the smaller spaces remaining.
greatestRemainingCourseLessonsA course is preferred, if it has greater un-booked lessons, since a course requiring only one lesson can be booked on any day.
greatestSynchronisedCourseSetSizeA course is preferred, if it is a member of a larger set of synchronised courses; it seems prudent to book the most constrained course’s lessons, early.
isCoreKnowledgeRequirementA subject is preferred, if it is categorised by the student, as a "core" knowledge-requirement.
isSpecialistInTopicA teacher is preferred, if their "specialtyTopic" matches the proposed "topic".
matchCourseClassSizeToLocationCapacityA location is preferred, the closer its "capacity" matches the course’s optional "maximumClassSize"; provided it’s sufficient.
maximiseRelativeFacilityUtilisationA location is preferred, the more its "facilities" are used; cf. "minimiseWasteOfScarceFacilities", which tries to make a distinction based on the type of the wasted facility.
maximiseStudentClassSizeOverCourseClassSizeA course is preferred, the more its "maximumClassSize" is filled by the proposed student-class.
maximiseStudentClassSizeOverLocationCapacityA location is preferred, the more its "capacity" is filled by the proposed student-class.
minimiseBookingAtAnotherCoursesSpecifiedTimeA booking-time is preferred, if there’s minimal probability that courses for the student-body’s other knowledge-requirements, will require that time according to "timeslotRequest/specifically"; the probability becomes a certainty for those knowledge-requirements which can only be satisfied by one course.
minimiseBookingOfLocationByOtherTeachersA location is preferred, when booked by the fewest other teachers.
minimiseDeviationFromTimeslotRequestA course is preferred, if it is booked closer to any "timeslotRequest".
minimiseInterCampusMigrationsOfStudentsA course is preferred, if inter-campus migrations of students are minimised.
minimiseInterCampusMigrationsOfTeachersA course is preferred, if inter-campus migrations of teachers are minimised.
minimiseStudentBodyCombinationsA lesson is preferred, when the number of student-body combinations is minimised.
minimiseTeachersLocusOperandiA location is preferred, if the size of teacher’s locus-operandi is minimised; based merely on the number of distinct locations booked, rather than the distance between them.
minimiseWasteOfScarceFacilitiesA lesson is preferred, if the location’s unused "facilities", are commonly available elsewhere; cf. "maximiseRelativeFacilityUtilisation", which treats all facilities equally.
optimiseLessonCriteriaWeights
This XML-element governs the repeated random mutation of the specified lesson-criteria weights, to maximise the weighted mean over the values of heterogeneous timetable-criteria, when evaluating the initial deterministic timetable.
No change is made to lesson-criteria weights which were originally set to zero. If "traversalOrder" has been specified, then the optimisation will be performed on the specified subset of rasters. The resulting weights could be copied to other similar problems, where they may be reasonable initial values.
This optional procedure can only work when it is possible to improve the resulting solution by changing the lesson-criteria weights; if the solution-space is too small to allow the weights of lesson-criteria to drive the solution to a better place, then this process will merely take a long time. It’s also necessary that the weights of timetable-criteria are well chosen, otherwise the weights of lesson-criteria will evolve towards the wrong target. The basis for this optimisation-process is rather flimsy.
AttributeDefaultExplanation
===========================
nTrials0The number of random trials to use when attempting to improve the specified lesson-criteria weights.
changeMagnitude1This positive number governs the size of the random change applied independently to each lesson-criterion weight. The chosen value permits an increase or decrease by a factor of up to 1 + x in the weight of a lesson-criterion.
reductionFactor0.9The factor in the closed unit-interval, by which "changeMagnitude" is multiplied after each success.
useMeanOverRasterScansFalseWhether to accept a proposed set of lesson-criteria weights on the basis of the mean (as opposed to the maximum) over the specified raster-scans, of the weighted mean over all heterogeneous timetable-criteria. Use of the mean over the raster-scans reduces the chance that weighted mean over heterogeneous timetable-criteria for the initial deterministic timetable was a freak result, & as such an inappropriate set of lesson-criteria weights with which to attempt to evolve the solution. Use of the maximum over the raster-scans will result in a good initial deterministic timetable, but it may not perform well during the subsequent evolution.
permitTemporaryStudentBodyMerger [True]
The configured student-bodies may be small, & can therefore be automatically merged into larger student-classes, to more efficiently use the services offered by the available teachers. Such transient mergers persist only for the tuition of a specific course, & those student-bodies may be merged differently or not @ all, during the tuition of another course.
Certain incompatible lesson-criteria weights are zeroed depending on the value of this option;
if "True", then the size of the student-class may grow, so "maximiseStudentClassSizeOverCourseClassSize" & "maximiseStudentClassSizeOverLocationCapacity" are invalid;
if "False", then "minimiseStudentBodyCombinations" & "areResourcesReused" are irrelevant.
When the constraints imposed by "problemParameters" are tight, it may be necessary for the lessons of a single course, to be composed from different combinations of student-bodies; e.g. student-body A may combine with student-body B, to form a student-class to study a specific subject on one day, but may also combine with student-body C to form a different class, to study the same subject on another day. Whilst clearly undesirable, this scenario may be better than one student-body not learning that subject due to lack of resources. See the lesson-criterion "minimiseStudentBodyCombinations".
This boolean switch allows such temporary mergers to occur.
reduceStudentBodyRegister [True]
The efficiency of the application is partially dependent on the number of student-bodies. When the similarity in the requirements of the member-students is driven by some common external process (e.g. a rigid curriculum involving limited subject-choice), one would typically model that by manually partitioning them into student-bodies during configuration. If after configuration, the requirements of some student-bodies are coincidentally identical, then this boolean switch enables their automatic discovery, & merges them to increase the efficiency of the application.
These student-bodies, once composed, persist for the duration of this problem, & will be booked into the timetable as an atomic unit. If as a result, the class-size becomes infeasibly large, then this option can be set to "False", preserving the original configuration.
If "verbosity" is greater than minimum, then any such automatic mergers will be logged to standard error.
removeRedundantCourses [True]
By automatically removing courses from any "teacherProfile", which aren’t required by any student, one can improve the accuracy of the measurement of certain criteria used to evolve the timetable & expose certain anomalies regarding synchronised courses.
If "verbosity" is greater than minimum, then any such courses will be logged to standard error.
removePointlessGroups [True]
Whether to remove groups from the "groupCatalogue", for which zero meetings have been scheduled.
If "verbosity" is greater than minimum, then any such group-id will be logged to standard error.
removeUnsubscribedGroups [True]
Whether to remove groups from the "groupCatalogue", to which neither student-bodies nor teachers have subscribed.
If "verbosity" is greater than minimum, then any such group-ids will be logged to standard error.
timetableCriteriaWeights
The various "evolutionStrategies", are from any current timetable used to breed a population of alternative candidate solutions, from which the best according to a weighted mean over various criteria, can be selected. One can vary each fractional weight within the closed unit-interval [0,1], which @ the lower bound disables the associated criterion.
This optional XML-element contains the fractional weights (each defaulting to 0) applied to the respective values of these criteria.
Criterion-weight
================
maximiseComplianceWithFreePeriodPreferencesA timetable is preferred, when it complies with any "freePeriodPreference" of student-bodies & teachers.
maximiseMeanRatioOfStudentClassSizeToLocationCapacityA timetable is preferred, when the mean over all bookings, of the ratio of the size of the student-class to the location’s "capacity", is greatest.
maximiseMeanStudentClassSizeA timetable is preferred, when the mean size of student-classes, is greatest.
maximiseSynchronisationOfSynchronisedCoursesA timetable is preferred, when the lessons of synchronised courses are consistently synchronised.
maximiseWeightedMeanStudentBodyUtilisationRatioA timetable is preferred, when the mean over all student-bodies, of the time currently booked to the total time in their working-week, is maximised. It doesn’t distinguish between "core" & "optional" knowledge-requirements like "minimiseMeanRatioOfIncompletelyBookedCoreKnowledge" & "minimiseMeanRatioOfIncompletelyBookedOptionalKnowledge", but it does value partially booked courses.
minimiseAverageAbsoluteDeviationFromIdealTimeslotRequestA timetable is preferred more, the closer lessons are booked to any ideal timeslot-request for their course.
minimiseDispersionOfStudentFreePeriodsPerDayA timetable is preferred, when each student-body’s free periods are spread evenly across their working-week.
minimiseDispersionOfTeacherFreePeriodsPerDayA timetable is preferred, when each teacher’s free periods are spread evenly across their working-week.
minimiseDispersionOfTeacherWorkloadA timetable is preferred, when the relative workload between all teachers, is similar.
minimiseMeanInterCampusMigrationsOfStudentsA timetable is preferred, when the average over all students, of the number of inter-campus migrations in a week, is minimised.
minimiseMeanInterCampusMigrationsOfTeachersA timetable is preferred, when the average over all teachers, of the number of inter-campus migrations in a week, is minimised.
minimiseMeanLocationChangesOfTeachersA timetable is preferred, when the average over all teachers, of the number of changes in their location during the week, is minimised; cf. "minimiseMeanLocusOperandiOfTeachers", which merely counts the number of distinct locations used.
minimiseMeanLocusOperandiOfTeachersA timetable is preferred, when the average over all teachers, of the size of their locus-operandi, is minimised; based merely on the number of locations, rather than the distance or the number of changes, between them.
minimiseMeanRatioOfIncompletelyBookedCoreKnowledgeA timetable is preferred, when the average over all student-bodies, of the ratio of incompletely booked "core" knowledge-requirements, to all requirements, is minimised. All incomplete courses are valued equally, regardless of the extent; cf. "maximiseWeightedMeanStudentBodyUtilisationRatio".
minimiseMeanRatioOfIncompletelyBookedOptionalKnowledgeA timetable is preferred, when the average over all student-bodies, of the ratio of incompletely booked "optional" knowledge-requirements, to all requirements, is minimised. All incomplete courses are valued equally, regardless of the extent; cf. "maximiseWeightedMeanStudentBodyUtilisationRatio".
minimiseMeanStudentBodyCombinationsPerLessonA timetable is preferred, when the average number of combinations of student-body per lesson-definition, is minimised; ideally a student-body always studies a subject, in a class composed from the same other student-bodies.
minimiseRatioOfConsecutiveEqualLessonsA timetable is preferred, when blocks of consecutive identical lessons are booked, whose length least exceeds the course’s "minimumConsecutiveLessons".
minimiseRatioOfSeparatedEqualLessonsWithinAnyDayA timetable is preferred, when the lessons of any course, are on any day, booked in one contiguous session.


The evolution-algorithm uses the weighted mean of these criteria, to select from candidate timetables, in a search for the optimum. This raises the question of whether it’s valid to compare the observed value of criteria which represent utterly different concepts; how can a criterion which has the dimensions of time, meaningfully be included in a weighted mean with another criterion which has dimensions of length ? To make these criteria comparable, they’re all represented as dimensionless quantities, mapped into the closed unit-interval [0,1]; e.g. by dividing by their maximum theoretical value. This should reduce the question of what weight to apply to each, to the simple question of their relative significance to the user, in the context of the current problem; the most important could be set to 1, & the others proportionately less.
Regrettably this seldom results in the desired outcome, because within a typical population of candidate solutions, the observed value of some criteria may range across the entire unit-interval, while the observed value of others may be constrained to a minuscule portion. Consequently, within the domain of this population of candidates, relatively large gains are possible for some criteria, typically @ the expense of others, irrespective of the user-defined significance of the corresponding concepts. The same parasitic effect may also result between criteria, even when the values typically found in the candidate population, range across spans of similar length, but do so in different profiles, creating zones of sensitivity to the underlying concept they measure. Whilst one may compensate for the former effect, by adjusting the weight applied to specific criteria, that regrettably decouples the weight, from the user-defined significance of the concept being measured; compensating for the latter effect would require a more complex mechanism that a single weight, & so far this hasn’t been addressed. Some criteria may result in contrary views on the fitness of a timetable; e.g. "minimiseRatioOfConsecutiveEqualLessons" downgrades a timetable when the number of consecutive equal lessons exceeds the course’s "minimumConsecutiveLessons", whereas "minimiseMeanLocationChangesOfTeachers" prefers the lack of a change to a teacher’s location & "minimiseMeanInterCampusMigrationOfStudents" prefers the lack of any requirement to migrate to another campus.
Consequently, it is probably best to start by merely copying the criteria-weights, from the most appropriate of the packaged examples. If some aspect of the resulting timetable isn’t acceptable, set "verbosity" to "Deafening", to discover which criteria benefited from the evolution, & ask whether you can afford to sacrifice some of the concepts they measure.

zeroInappropriateOptions [True]
If this boolean flag is True, then the weights of various lesson-criteria & timetable-criteria, & the fecundities of various evolution-strategies, which are either unsuitable for or inappropriate to, the specified problem-parameters, will automatically be zeroed.

outputOptions

This is an XML-element containing the following XML-tags.
fileFormats
An XML-element, containing a repeatable XML-element "fileFormat", each of which is qualified by an XML-attribute named "filePath" (a value of "-" will be interpreted as standard output), & contains an XML-element named either; "XHTML", which contains an optional XML-element "style"; or "xml", which contains an optional XML-attribute "view".
Mmm, it might be easier to comprehend if you look @ the DTD & one of the examples.
"style" in turn contains the following XML-tags, which relate purely to the XHTML-output (rather than to any xml-output).
displayViews [[LocationView,StudentView,TeacherView]]An XML-element containing a list of XML-elements each called "perspective", each of which contains a single XML-attribute "view" (see below), which defines whether to display the timetable from that perspective. The three-dimensional matrix which defines a timetable, is inverted so that the axis which identifies the various student-bodies, is replaced by either one defining location-ids or one defining teacher-ids. The remaining two axes, representing the day of the week & the time-slot within each day, are displayed in all views. The same data are contained in each view, it’s merely re-indexed.
cssURLReferences the cascading style-sheet defining the required style. It can either be a fully qualified URL or a path into the local file-system. This XML-attribute is optional; in its absence, the packaged CSS-file will be referenced, which though adequate to render the packaged examples, will need to be tailored to appropriately depict (via a dedicated background colour or image) new topics as they’re added to the curriculum.
mergeDuplicateTimeslotsContains an XML-element called "timeAxes", which defines boolean XML-attributes tagged by "byDay" & "byTimeslotId", defining whether adjacent identical time-slots are merged. This reduces repetition, draws attention to duplicate lessons, & uses the limited space efficiently. This XML-element is optional; the default is "True" for both XML-attributes.
displayAxisLabelsContains an XML-element called "timeAxes", which defines boolean XML-attributes tagged by "byDay" & "byTimeslotId", defining whether to label the axes of the output timetable. This XML-element is optional; the default is "True" for both XML-attributes.
displayRuntimeLog [False]This boolean XML-attribute defines whether to display the runtime-log.
displaySupplementaryInformation [True]This boolean XML-attribute defines whether additionally to display statistics, & summarise deviations between the solution & the configured requirements.
weekend [["Saturday", "Sunday"]]An XML-element containing those days which constitute the weekend, & which are rendered differently.
generateLessonColourFromAn optional XML-attribute, which specifies a data-source (one of "Lesson", "Subject", "Topic", "Level" or "ResourceIds"), from which to automatically generate an HTML-colour for the lesson when ultimately displayed. In the absence of any specification, the colour may be defined by the CSS-file specified via "cssURL".
minimumContrastRatio [1/16]An optional XML-attribute, which defines the minimum acceptable contrast-ratio between the foreground lesson-colour generated according to "generateLessonColourFrom" and the complementary background-colour.

"view" has a value of; "LocationView", "StudentView", or "TeacherView"; depending on which view of the resulting timetable to export. The precise format of the XML, is formally described by the corresponding packaged file; "dtd/locationViewTimetable.dtd", "dtd/studentViewTimetable.dtd", or "dtd/teacherViewTimetable.dtd".

outputConfigFilePath
An optional path to a file, into which the unprocessed configuration, still formatted as XML, should be written (overwriting any existing contents); this can be useful to confirm that the specified input configuration has been interpreted correctly. An accidentally miss-spelled XML-tag can only slip through the application’s validation, if the DOCTYPE-declaration (which references "dtd/weekdaze.dtd") is removed from the top of the configuration-file.
CAVEAT: the configuration written, deliberately doesn’t include any command-line options (even though they may override the configuration); a feature which is exploited to avoid writing the argument of the command-line option "--outputConfigFilePath", which would otherwise create a self-overwriting configuration-file.
nDecimalDigits [3]
Defines the integral precision to which auxiliary floating-point data (see "verbosity") are logged; it has no effect on the precision of the calculations performed by the application.
studentBodyMnemonicSeparator [" / "]
Defines a string to be used as a separator when automatically joining the "mnemonic"s of student-bodies with identical "studentProfile"s; this is only relevant when "reduceStudentBodyRegister" is "True". The specified string must conform to the XML-standard for character-data; i.e. it can’t contain either ’&’ or ’<’.
verbosity [Normal]
A string which defines the quantity of ancillary information which is logged to standard error.
LevelOutput
===========
SilentThe lack of output might leave the user wondering whether anything is actually happening; it is, though it can take a long time.
NormalThe default-level. Delivers a progress-report on the reading, parsing & validation of the XML-configuration & any "inputStudentViewTimetable". Prints a "." as each evolution-strategy is completed.
VerboseProvides more detail when reading xml. Reports statistics (to a precision governed by "nDecimalDigits") on the values of criteria as the solution evolves.
DeafeningEnhances the statistics reported by "Verbose".

The latter two levels are unlikely to be intelligible to most users, but allow one to adjust criteria to drive the solution in the desired direction.

problemParameters

This is an XML-element containing the following XML-tags.
problemValidationSwitches
A set of boolean switches governing various runtime-checks on the remainder of the problem-parameters. Should any of these obstruct the specification of unusual but intention requirements, they can individually be set to "False"; the results cannot be guaranteed, but it may provide the required silver bullet.
Each XML-attribute is optional; "True" will be inferred from any omission. The identifiers of these, prefix any error-message generated from the failure of the corresponding check.
checkAvailabilityOfAnyGroupMemberCheck that @ least one member, can attend each meeting of a group.
checkCapacityOfLocationsForMeetingsCheck that any location, specified for the meetings of a group, has adequate "capacity".
checkCoursesForSynchronousSpecifiedTimesCheck that no courses, required to satisfy a student’s knowledge-requirements, specify the same booking-time.
checkDuplicateMeetingLocationIdsCheck that when more than one group requires the same location, that their meeting-times are mutually exclusive.
checkDuplicateOwnLocationIdsCheck that when more than one teacher claims a single location as their own, that their working-weeks are mutually exclusive.
checkForAlternativesToSynchronisedCoursesEnsure that students can migrate easily between synchronised courses, by prohibiting any teacher from offering an alternative course outside the set of synchronised courses, but with an identical subject to one of the member-courses.
checkForDuplicateStudentIdsCheck that no "studentId" has been defined in more than one student-body.
checkForIdleStudentsCheck for student-bodies who require zero subjects, but have allocated one or more time-slots for teaching.
checkForIdleTeachersCheck for teachers who offer zero courses, but have allocated one or more time-slots for teaching.
checkForInvalidMeetingTimesCheck that all the timeslot-ids, used to define the meeting-times of groups, are within permissible bounds.
checkForMultipleCoursesPerTeacherPerSynchronisationIdCheck that no teacher offers more than one course with the same "synchronisationId".
checkForNonExistentFacilitiesCheck for the existence in @ least one "locationProfile", of all the "requiredFacilities" for each course.
checkForNonExistentGroupIdsCheck the existence of all "groupId"s, referenced by student-bodies or teachers.
checkForNonExistentMeetingLocationIdsCheck the existence of all "locationId"s, required for the meetings of groups.
checkForNonExistentOwnLocationIdsCheck the existence of all personal "locationId"s, claimed by teachers.
checkForOverloadedStudentsCheck for student-bodies who have allocated zero time-slots for teaching, but have requested one or more subjects.
checkForSingletonSynchronisedCoursesCheck for teachers offering a course which is a singleton set of synchronised courses.
checkForStudentsRequiringMultipleSynchronisedSubjectsCheck for any student-body requiring more than one subject from any one set of synchronised courses.
checkForStudentsWithUnrealisableFreePeriodPreferenceCheck for any student whose "freePeriodPreference", can never be realised because of the meeting-times of groups of which they’re members.
checkForSynchronisedCoursesWithDifferentIdealTimeslotsCheck that synchronised courses don’t define "timeslotRequest"s with different ideal timeslot-ids.
checkForSynchronisedCoursesWithDifferentLessonsPerWeekCheck that synchronised courses don’t define different "requiredLessonsPerWeek".
checkForSynchronisedCoursesWithExcessLessonsPerWeekCheck that synchronised courses don’t define a greater "requiredLessonsPerWeek", than the number of time-slots when all the interested student-bodies & required teachers are simultaneously available.
checkForSynchronisedCoursesWithExcessSpecifiedTimesCheck that synchronised courses don’t have fewer "requiredLessonsPerWeek" than the number of booking-times specified by the union of their "timeslotRequest"s.
checkForSynchronisedCoursesWithExcessTimeslotRequestsCheck that synchronised courses don’t specify via "timeslotRequest"s, both ideal timeslot-ids & precise booking-times; these are intended to be alternatives.
checkForSynchronisedCoursesWithoutSuitableLocationsCheck for synchronised courses which lack sufficient locations offering the "requiredFacilities", which are simultaneously available to the teachers & all interested student-bodies.
checkForSynchronisedCoursesWithUnavailableSpecifiedDaysCheck for synchronised courses which specify times, on days when not all the interested student-bodies & required teachers, are available.
checkForTeachersWithUnrealisableFreePeriodPreferenceCheck for any teacher whose "freePeriodPreference", can never be realised because of the meeting-times of groups of which they’re members.
checkIfStudentBodiesExceedTeachersCheck that there are sufficient teachers, for the number of student-bodies, available on each day.
checkIfStudentBodySizeExceedsCapacityOfAllLocationsCheck whether each student-body can be accommodated within the largest available location.
checkIfStudentBodySizeExceedsLocationCapacityCheck whether all student-bodies can be accommodated within the locations, available on each day.
checkIndependenceOfStudentTimeslotsRequestsAndMeetingsCheck that student-bodies are members of groups which specify meeting-times (even those which don’t mandate attendance), which match any of the specified booking-times of courses they must attend.
checkIndependenceOfTeacherTimeslotsRequestsAndMeetingsCheck that teachers are members of groups which specify meeting-times (even those which don’t mandate attendance), which match any of the specified booking-times of courses they must attend.
checkLocationsAvailabilityToSupportCoursesCheck that there are sufficient locations, simultaneously available to at least one student-body & at least one teacher, to support the total number of time-slots required for the courses offered by all teachers.
checkLocationsForSynchronousSpecifiedTimesCheck there are enough locations in which to book lessons of courses offered by different teachers, which specify the same booking-time.
checkMeetingLocationsAvailabilityCheck that any location required for a group, is available @ all meeting-times.
checkMinimumConsecutiveLessonsCheck that a course’s "minimumConsecutiveLessons" doesn’t exceed the number of time-slots per day.
checkNullGroupIdCheck for null identifiers in the "groupCatalogue".
checkNullLocationCatalogueCheck whether the "locationCatalogue" is empty.
checkNullStudentBodyRegisterCheck whether the "studentBodyRegister" is empty.
checkNullTeacherRegisterCheck whether the "teacherRegister" is empty.
checkOwnLocationsAvailabilityCheck for teachers who’ve got their own location, that it’s simultaneously available on @ least one day.
checkRequiredLessonsPerWeekCheck that no course is offered, which requires more lessons per week, than the teacher works.
checkSimultaneousAvailabilityOfGroupMembersCheck that all the members of each group which both meets & mandates attendance, are simultaneously available.
checkStudentsAvailabilityForMandatoryMeetingsCheck that students are available for the meeting-times of the groups of which they’re members.
checkStudentsAvailabilityForSpecifiedTimesCheck that no course, required to satisfy a student’s knowledge-requirements, specifies a time, on a day when they’re unavailable.
checkStudentsForMultipleLevelsOfSameTopicCheck that the knowledge-requirements of each student-body, don’t specify more than one level in any topic.
checkStudentsForSynchronousMeetingsCheck that students aren’t members of groups with synchronous meeting-times.
checkStudentsLowerWorkloadBoundCheck that students request sufficient subjects to fill their working-week to the required extent.
checkStudentsUpperWorkloadBoundCheck that students don’t request more subjects than can be booked in their working-week.
checkSubjectExistenceCheck that all subjects requested by students, are included in the services offered by teachers.
checkSuitableLocationsForKnowledgeRequirementsCheck that there are suitable locations for each knowledge-requirement of each student-body.
checkTeachersAvailabilityForMandatoryMeetingsCheck that teachers are available for the meeting-times of the groups of which they’re members.
checkTeachersForSynchronousMeetingsCheck that teachers aren’t members of groups with synchronous meeting-times.
checkTeachersUpperWorkloadBoundCheck that teachers don’t commit to more meetings than they’ve time to attend.
checkTeachingCapacityBySubjectCheck that there’s sufficient teaching-capacity, to satisfy the demand by students for each subject. CAVEAT: This check is very lax. To maximise the efficiency with which teachers are used, it is typically assumed that any student-body which can be temporarily merged into a student-class, (see "permitTemporaryStudentBodyMerger"); no subsequent account is taken of whether both teachers & locations, can cope with the size of the resulting student-class. Additionally, an error is raised only when the demand for a subject exceeds the total supply, without any account of whether some of the teachers, are simultaneously required to support the other courses in their service.
checkTimeslotIdBoundsCheck the range of timeslot-ids defined, is sufficient.
checkTimeslotRequestsCheck that all "timeslotRequest"s reference either a valid timeslot-id or valid times.
timetableValidationSwitches
A set of boolean switches governing various checks used to validate an imported student-view timetable. Should any of these obstruct the specification of unusual but intention initial state, they can individually be set to "False"; though under these circumstances the stability of the application cannot be guaranteed.
Each one is optional; "True" will be inferred from any omission. The identifiers of these, prefix any error-message generated from the failure of the corresponding check.
checkBookedSubjectsAreRequiredCheck that all subjects for which there’s a booking, are required by the student-body.
checkBookedSubjectsHaveServiceCheck that all subjects for which there’s a booking, have been offered as a course, by the referenced teacher.
checkSynchronisedCoursesCheck that all the teachers of a set of synchronised courses, have booked synchronous lessons.
checkExistenceOfLocationIdsCheck that all "locationId"s referenced in an imported studentViewTimetable, exist in the "locationCatalogue".
checkExistenceOfStudentBodiesCheck that all student-bodies referenced in an imported studentViewTimetable, exist in the "studentBodyRegister".
checkExistenceOfTeacherIdsCheck that all "teacherId"s referenced in an imported studentViewTimetable, exist in the "teacherRegister".
checkForBookingMeetingClashCheck for lessons booked @ the same time as a meeting, with a common resource-requirement.
checkForMisplacedLessonsCheck for lessons booked @ locations lacking either adequate capacity or the facilities for their course.
checkForOverbookedSubjectsCheck for student-bodies for whom more lessons have been booked, in a specific subject, than the course’s "requiredLessonsPerWeek".
checkForOverloadedStudentBodiesCheck for student-bodies for whom more lessons have been booked, than allocated for tuition in one week.
checkForOverloadedTeachersCheck for teachers for whom more lessons have been booked, than allocated for tuition in one week.
checkForResourceConflictsCheck for times when resources have been allocated in more than one location.
checkMinimumConsecutiveLessonsCheck for lessons which have been booked in run-lengths shorter than their course’s "minimumConsecutiveLessons".
checkResourceAvailabilityCheck that resources have been booked only on days when they’re going to be available.
checkTimeslotsPerDayCheck that all days have the correct number of time-slots.
timeslotIdBounds
Defines using two XML-elements, the closed interval bounding the range of integral timeslot-ids, @ which lessons can be booked in each day.
Because this range is defined not merely by its length, but by minimum & maximum bounds, one can arrange to start from one’s preferred origin.
The solution-algorithm has neither awareness of the time-span between adjacent time-slots, nor does it assume that these gaps are of equal duration. There are some undesirable consequences of this design-choice; e.g. one may not want to book swimming immediately after lunch; or a double lesson spanning lunch-time; but the gap between two time-slots, in which lunch occurs, is undefined. Elsewhere in the configuration-file; one can arrange either to avoid this problem completely, by defining "lunch" as a group, of which all people are members, & the meetings of which are then scheduled in time-slots, rather than invisibly between them; or one can bias the algorithm towards more desirable solutions, by requesting either the ideal timeslot-id within any day, @ which to book a lesson in a course, or by specifying the precise times within any week, @ which some of the lessons of a specific course should be booked.
CAVEAT: the configuration for both "groupProfile" & "teacherProfile", can reference specific timeslot-ids, & may need to be corrected after any alteration to the bounds.
locationCatalogue
A non-null map indexed by unique alphanumeric "locationId" (potentially its room-number), of "locationProfile"s, in which is defined; its availability; its capacity to cater for students; the facilities it offers to support various courses.
teacherRegister
A non-null map indexed by unique alphanumeric "teacherId" (potentially their name (with spaces removed) or employee-id), of "teacherProfile"s, in which is defined; their availability; the proportion of their working-week devoted to teaching; the service they offer; references to the groups of which they’re members.
studentBodyRegister
A non-null map indexed by "studentBody" (composed from a unique alphanumeric "mnemonic" & a list of mutually exclusive "studentId"s), of "studentProfile"s, in which is defined; their availability; their "stream" (which can also denote their academic year); their knowledge-requirements; references to the groups of which they’re members.
The students are grouped into student-bodies, each member of which has an identical "studentProfile". This increases the application’s efficiency, & may, when the similarity in the requirements of members of each student-body is driven by some common external process (perhaps that they’re members of the same "stream" in the same academic year), reduce the maintenance of the configuration. If the similarity is merely coincidental, they can be placed in separate student-bodies, & the application will, given the option "reduceStudentBodyRegister=True", discover ad-hoc student-bodies, to improve efficiency.
groupCatalogue [{}]
A map indexed by unique alphanumeric "groupId", which may be referenced by any number of "studentProfile"s & "teacherProfile"s, of "groupProfile"s. Each "groupProfile" defines a set of regular meeting-times, which reserve coordinates in the timetable, blocking the subsequent booking by any member of the group, of a simultaneous lesson; see below. E.g. lunch, staff-meetings, or morning assembly.

locationProfile

An XML-element containing the following XML-tags.
capacity
Quantifies the ability to cater for students, & which may correspond merely to the number of desks.
facilities [{}]
An XML-element containing strings, each representing some facility which might support the tuition of a course.
The format of these strings is constrained only by the requirement that they’re coordinated with the "requiredFacilities" of a course.
campus [""]
A string used to group proximate locations, between which intraday migration is trivial. If the institution for which the timetable is required, has some locations @ its disposal which are sufficiently remote from its centre to require considerable transit time, then one may choose to partition them into separately named campuses.
Locations must still have a unique location-id irrespective of the campus into which they’ve been partitioned.
CAVEAT: the configuration doesn’t quantify the distance (or time) between campuses, so no attempt can be made by the application, to minimise the total daily distance travelled (or the journey-time), rather the total campuses visited per day is minimised.
availability [["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]]
An XML-element containing those days when the location is available for use.
CAVEAT: there’s currently no concept of a location being available for fractions of a day.

teacherProfile

An XML-element containing the following XML-tags.
service [{}]
An XML-element containing the courses they can teach, each composed from of the following XML-tags.
subjectDefines the topic-string & the level @ which it is being taught. A course’s level is merely an arbitrary string. It’s free-format, but may represent both the academic year & the learning-capability expected of students before they express interest. The value must match those defined in the "knowledgeRequirements" of students.
requiredLessonsPerWeekDefines the regular integral number of lessons required per week. CAVEAT: there is no facility to vary this from week to week; should it do so, a different timetable must be generated. Typically an integral multiple of "minimumConsecutiveLessons".
requiredFacilitiesAn XML-element defining a set of strings, which must be a subset of the "facilities" offered @ any location @ which the course is ultimately booked.
timeslotRequestOptionally defines either the ideal timeslot-id within any day, @ which to book a lesson in this course (ideally timeslot-id), or specifies the times each week, @ which some of the lessons of this course should be booked (specifically [ time, time ... ]. CAVEAT: all student-bodies enrolled on this course, must form a single student-class @ the specified time, so either a suitably large location must be available, or another teacher must offer the same subject). If there are no special requirements then omit this XML-element, i.e. accept the default.
minimumConsecutiveLessonsOptionally defines the minimum integral number of consecutive periods which must be booked for this course; defaulting to 1. This constrains the booking of lessons in topics which either can’t be conducted in a shorter time-span, or for which either long preparation or long clean-up makes short sessions infeasible. The specified value represents an ideal, but if "requiredLessonsPerWeek" isn’t an integral multiple of this value, then on @ least one occasion, "minimumConsecutiveLessons" must be exceeded.
maximumClassSizeOptionally defines the maximum integral number of students with whom the teacher can cope, for the tuition of this course. In the absence of this XML-attribute, the "capacity" of the location in which the class is held, is the only limiting factor on class-size.
synchronisationIdOptionally identifies by means of a shared string, a set of courses offered by different teachers, whose lessons must be synchronised. In the absence of this XML-attribute, the lessons for this course need not be synchronised with those of any other course. Students may select only one member from such sets, but may migrate to a different member without disrupting the structure of the timetable.
locationId
References a location which is considered to be theirs.
Any location referenced must be separately defined in the "locationCatalogue".
This XML-attribute is optional, because the teacher may not have any such location.
availability
An XML-element, containing those days when the teacher is contracted to be available.
CAVEAT: there’s currently no concept of a teacher being available for fractions of a day.
maximumTeachingRatio
Defines the maximum floating-point ratio in the closed unit-interval [0,1], of available time, which can be allocated to teaching. The remaining time, can by inference, be allocated to either meetings or administration.
groupMembership [{}]
An XML-element referencing those "groupId"s of which the teacher is a member.
specialtyTopic
Defines the topic-string with which the teacher has greatest familiarity.
This XML-attribute is optional, because the teacher may not have any specialty topic.
Any topic referenced must be amongst the subjects offered in their "service".
freePeriodPreference
Optionally defines a preference, for the position within each day when the teacher is available, of unallocated time-slots, i.e. those which are neither booked with a lesson nor reserved for a meeting.
The position of free time-slots in a teacher’s timetable, is dependent on those in students’ timetables; e.g. if the latter are required to attend morning assembly, then those teachers who don’t, will either have a staff-meeting @ that time, or a free time-slot.
Valid values are; /(Pre|Terminal|Post)/, where:
Preference
==========
PreA preference for unallocated time-slots to precede the first lesson or meeting of the day.
TerminalA preference for unallocated time-slots either to precede the first or to follow the last, lesson or meeting of the day.
PostA preference for unallocated time-slots to follow the last, lesson or meeting, of the day.

studentProfile

An XML-element containing the following XML-tags.
stream [""]
A student’s stream is merely a string. It’s free-format, & may also represent their academic year. This concept is probably redundant, since the subjects (defined by both topic & level) required by each student, implicitly define a more precise topic-specific capability. If the stream of student-bodies with intersecting subject-requirements, match, then they may be temporarily merged into classes, for the tuition of each of those subjects. If one wants to allow; an able student to learn a subject with students from a higher year; or students of the same year, but different academic ability, to be able to play sports together; it is necessary to render this concept void, by for example accepting the default value (a null string), for all such students. Voiding this concept, won’t then explicitly prevent undesirable temporary mergers between students in different years, when playing a sport, but this scenario never arises if they require sport-related subjects of an appropriate level to their physical development.
knowledgeRequirements
Partitioned into two XML-elements, defining the "core" & "optional" subjects that the member-students want to learn. Each subject is defined by the "topic"-string & the "level"-string @ which it should be taught. These values must match one of the "subject"s, defined in the courses, offered as a part of a teacher’s "service".
availability
An XML-element containing those days when each member of the studentBody, is available. Typically they’d have no choice, but some students may have special needs.
CAVEAT: there’s currently no concept of a student being available for fractions of a day.
teachingRatio [1]
Defines the floating-point ratio in the semi-closed unit-interval (0,1], of available time, which can be allocated to tuition. The remaining time, can by inference, be allocated to either meetings or free-study. A student’s work-load associated with; "core" knowledge-requirements shouldn’t overflow, & all knowledge-requirements shouldn’t underflow; this ratio.
CAVEAT: if the required ratio can’t be represented precisely as a decimal, then one probably ought to configure with sufficient precision to limit the rounding-error to less than one lesson per week, & then bear in mind that rounding-up will give the student one fewer free-period per week.
groupMembership [{}]
An XML-element, referencing those "groupId"s of which each student is a member.
freePeriodPreference
Optionally defines a preference, for the position within each day when the student-body is available, of unallocated time-slots, i.e. those which are neither booked with a lesson nor reserved for a meeting. Students would not normally be allowed to arrive late or depart early, so this feature is of little practical value. The values are the same as for teachers; see above.

groupProfile

An XML-element containing the following XML-tags.
meetingTimes [{}]
An XML-element containing the times when the group regularly meets.
CAVEAT: there is no facility to model a group which meets irregularly.
locationId
A string which references a location @ which to meet; see "locationCatalogue".
This XML-attribute is optional, because there may be no requirement to meet physically; perhaps because it’s a teleconference.
mandatesAttendance [False]
A boolean switch which defines whether group-members are required to attend all meetings.
E.g. one could enrol all teachers in a group for morning-assembly, but if some are part-time, then attendance can’t be mandatory.
CAVEAT: there is no facility to define a group, for which only some meetings are mandatory.

Files

File-nameTime-slotsStudentXHTML-outputXML-outputConfiguration-features
xml/*.xmlper daybodiesxhtml/*.xhtmlxml/*.xmlgenerateLessonColourFromcampusfacilityNamefreePeriodPreferencegroupIdmaximumClassSizeminimumConsecutiveLessonsspecialtyTopicsynchronisationIdtimeslotRequest
============================================================================================================================================================================================================
example_0113timetable_01studentViewTimetable_01Y
example_0222timetable_02studentViewTimetable_02YYYY
example_0332timetable_03studentViewTimetable_03YYYYY
example_05511timetable_05studentViewTimetable_05YYYYYYY
example_05_153timetable_05_1studentViewTimetable_05_1YYYYYY
example_08811timetable_08studentViewTimetable_08YYYYYYYY
example_131311timetable_13studentViewTimetable_13YYYYYYYYY
example_212111timetable_21studentViewTimetable_21YYYYYYYYY
template0

CAVEAT: should any of these files be relocated, then its "DOCTYPE"-declaration, will need to be corrected to reference weekdaze.dtd.

File-nameContents
dtd/*.dtd
=================
locationViewTimetableThe formal description of the XML-format for the resulting timetable as seen from the perspective of locations.
studentViewTimetableThe formal description of the XML-format for the resulting timetable as seen from the perspective of student-bodies.
teacherViewTimetableThe formal description of the XML-format for the resulting timetable as seen from the perspective of teachers.
weekdazeThe formal description of the XML-format for the input configuration-file.

File-nameContents
sql/*.sql
=================
weekdazeCreateDefines the database-schema; all the tables & all the rows.
weekdazeTriggersDefines extra rules required to preserve relational integrity as data is inserted.
weekdazeExamplesDefines a set of example timetable-problems (the same as those defined in XML).

Author

Written by Dr. Alistair Ward.

Copyright

Copyright © 2013-2015 Dr. Alistair Ward

This program is free software: you can redistribute it &/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/ >.

See Also


Table of Contents