Artificial intelligence timetabling algorithm

    Automatic timetabling is all about keeping the balance between a broad search for timetabling solutions and a smart search for timetabling solutions. Since there are effectively infinite possibilities to construct a timetable, going through all of them is pointless. The strength of an automatic algorithm thus lies in its ability to find good solutions quickly... and that requires intelligence.

    Constraints entry

    Constraints are your requirements from the final timetable. It is vital for the program to be accurately aware of these requirements in order for it to construct a suitable timetable. The program supports a wide range of constraints such as gaps, late starts, number of scheduled periods per day, allowed period range per activity and more. Constraints can be entered before the program has started constructing the timetable but also afterwards. In the latter case, the program knows how to adapt to the recently modified constraints and amend the timetable accordingly.

    Constraints' importance

    When you are entering constraints, there are 3 values that you can define for each constraint: "Minimum", "Maximum" and "Desirable". The Min/Max range is considered by the program as a strict requirement while the Desirable value is considered as a preferred requirement. This allows you to separate the absolutely mandatory constraints from the recommended ones. It is quite important to establish this separation accurately because sometimes the ability to fulfill a constraint requires making a compromise with regard to another constraint so this requires the program to know exactly which compromises are within the allowed limits and which are not.

    "Violations" pane

    When you start the Automatic timetabling mode, the "Violations" pane appears at the right side of the workspace. This pane contains a list of all the unfulfilled constraints that the program has diagnosed in the current timetable. If the timetable is empty, this list will contain all the activities that you have entered because each unscheduled activity is basically considered as a violation. If the timetable is fully or partially constructed and there are new constraints that you have entered or there are constraints which the program was not able to fulfill the last time it ran, the Violations pane will display each of these unfulfilled constraints.

    Ability to resume automation

    Even if the timetable is partially or fully constructed, you always have the option to modify the existing constraints and then run the automation again from that point. The program knows how to take the existing timetable as a starting position and automatically make the necessary adjustments to make it fulfill the new constraints. In fact, this ability can be used as a technique to construct the timetable gradually because you can run the automation multiple times. The reason this can be useful is because it is often very difficult to enter all the constraints correctly from the beginning. You may well find yourself looking at the resulting timetable after the first phase and saying something like "Oh, this also needs to be like this and that". In such cases you can always go back to the constraints entry and enter the additional constraints or you can make a manual change and fixate it, and then run the automatic solver again. Following this process several times is actually the recommended method of achieving the highest quality timetable.

    Critical constraints

    There are 3 constraints' priorities: critical, required and desirable. By default, the "critical" constraint is only the scheduling constraint, meaning that it is considered critical for the program to schedule 100% of the activities in the database. The "required" constraints are the "Min."/"Max." values that you enter in the constraints list and the "desirable" are the values that you enter in the "Desr." column in that list. There is, however, a way to turn any "required" constraint into a "critical" constraint. This makes it clear to the program that it is absolutely first priority to take care of that constraint - even in a higher priority than scheduling any remaining activity. In a way, it affects the decision making process of the program during the automatic phase because then the program does not even consider solutions in which that critical constraint is violated. In order to turn a "required" constraint into a "critical" constraint, you need to append the "!" symbol to the end of the value in the "Min." or "Max." column.

    Combinations Engine

    The program's "Combinations Engine" is a powerful feature for semi-automatic timetabling which calculates possible moves in the timetable just like in a chess game. It can calculate complex options for you to move a cell, schedule a new activity or move an already scheduled activity into an empty cell. These options are not only simple 1-step movements, but rather multi-depth combinations of several steps. Naturally, they take under account conflicts and resource availability and do the "math" for you. When the "Combinations" tab at the bottom of the workspace is selected, clicking on a cell or on an activity presents the relevant combinations in that tab. Double clicking on a combination applies it.

    Fixating cells

    It is possible to schedule an activity and then fixate its cell. A fixated cell will not be moved or deleted during the automatic construction. This allows you to handle two special cases: one, in which some activity's time is simply known in advance; two - when there is a constraint that the program is not aware of or is not a part of the available constraints. In such case you can schedule an activity, fixate it and only then let the program schedule the rest of the activities.

    Multiple desirable values

    As you know, each constraint has a Min/Max range but also a Desirable value. The desirable value has a lesser priority than the allowed min/max range, but it's an important way to convey the preferred timetable characteristics to the program. Well, the program supports not only a single desirable value, but also a range of values. You can use a comma or a dash to specify multiple values. For example, suppose a certain subject should only be scheduled on periods 2-8, but the preferred periods are 3, 4, 5 and 7. To define this you can set the "Period Range" constraint for that subject to have a Min value of "2" and a Max value of "8", and in the Desirable field type: "3-5,7".

    Groups of students

    If the same group of students participates in multiple activities, you can create a group for them and associate that group with all their activities (instead of selecting students individually for each activity). Whenever an activity of the group is scheduled, all the students who participate in the group are scheduled too.


    Groups can be arranged in a hierarchy. The rule is that all the activities appearing in a sub group's schedule automatically appear in the parent group's schedule (as well as in the parent's parent groups and so on). A group can have subgroups while being a subgroup itself. It can even be a subgroup of multiple parent groups. Two subgroups are not considered as conflicting with each other unless they have at least one participant in common.

    Subjects and sub-subjects

    Subjects can also be organized in a hierarchy of top level subjects (themes) with sub-subjects. This way, while looking at the schedule of Mathematics, for example, you can be looking at the schedule of Algebra, Trigonometry and Calculus at the same time.

    Simultaneous sets

    A set unites multiple activities which must be scheduled at the same time. All the activities that belong to the same set are treated as a single inseparable unit. They are scheduled, moved and deleted together both in the interactive and automatic modes.

    Room capacity

    It is possible to leave the room selection up to the program during the automatic timetable construction. Defining the capacity of a room in terms of maximal number of participants that the room can hold makes sure that the program chooses only large enough rooms to host an activity.

    Display students by groups

    Because students can be assigned to groups, the program allows you to list them not only alphabetically by name but in a hierarchical view of groups. At the top level a group's name is displayed, underneath it all its sub-groups and under each sub-group the students who are enrolled to it.

    Custom order of resources

    By default, a list of resources is sorted alphabetically. However, you can sort it by any other property (column) displayed in the list. Moreover, you can define a custom order of resources by rearranging them as you like. This order is then maintained in every list throughout the program.

    Very large databases

    The program is built in such way, that it loads the resources only once when you open the scheduling workspace. It does not refill popup lists later on. This means that even if you have 100,000 students in your database, opening a popup list with all these students takes only one millisecond.

    Looking up resources

    Instead of scrolling a long list to find a resource, you can start typing its name and the program will find it for you. This applies for any popup list of resources. If there are several resources whose names start with what you typed, the first match is highlighted. The program uses a smart in-built sorted dictionary so that highlighting the resource is instantaneous.

    Quantities of equipment

    For each type of equipment it is possible to define the quantity of items of that equipment in stock. During the automatic timetable construction the program will make sure not to schedule more items than what is in stock at a given timeslot. If you try to manually schedule a quantity that is larger than what you have in stock in the interactive mode, the program will warn you.

    Assign colors to resources

    In order to make it easier to distinguish between resources, each resource can be associated with a color. All the cells in which a resource is scheduled will have the assigned color as the background color. It is even possible to define that in instructors' schedules (for example) all the cells will have the background colors of the groups, but in the groups' schedules the cells will have the background colors of the instructors.

    Blocked cells

    The ability to block cells allows you to mark the non-availability of resources on certain days and times. An activity is not allowed to be scheduled at a time in which one of the resources participating in the activity is blocked. During the automatic timetable construction the program will refrain from placing activities at a time in which one of the resources is marked as blocked. In the interactive mode you will be warned by the program if you try to schedule an activity at such a time.

    Planned quantity for activities

    Each activity has a weekly planned quantity of periods. For example, if the quantity is "5", the activity will be scheduled in 5 cells during the week. Each period the activity is scheduled in is counted as one cell. Simply put, the task of creating the timetable is defined as scheduling all the activities according to their planned quantity.

    Notes for cells

    You can add a custom textual note to any cell. A note can be added and edited using the Properties window at the bottom right corner of the workspace.

    Flipped axes

    You can flip the axes of the timetable. By default, the days are in the X-axis and the timescale is in the Y-axis. By flipping the axes you can have it go the other way round. Some institutions are accustomed to such a view of their timetable.

    Abbreviated names

    Each resource can have a full name as well as an abbreviated name. If you are used to short code names for classes or courses (for example), you can tell the program to display the abbreviated names in the schedule instead of the full names.

    Custom columns

    By default, a list of resources has two columns: the resource's name and the associated color. But you can change this. You can tell the program to display other properties of resources in additional columns and also specify the columns' order and widths. This allows you to personalize the layout of resource lists and match it to what you are used to in your institution.

    Multiple optional rooms for an activity

    Each activity can have a selection of possible rooms in which it can be scheduled. This leaves a higher degree of freedom for the program during the automatic construction, because if one of the rooms is occupied at some timeslot, the program will be able to schedule the activity into a different room that may be vacant at that time.

    Assign students either to groups or to activities

    Students can participate directly or indirectly in activities. Directly: students can be assigned to an activity simply by selecting them in the Students property of the activity. This is common for higher education institutions in which students are enrolled to discrete classes (activities). Indirectly: when a group of students participates in multiple activities it is easier to give a name to that group, enroll the students to the group and then simply select that group for the activity instead of re-selecting discrete students for each activity.

    Not necessary to enter student names

    It is perfectly possible to create a timetable without entering any student names at all. In such case, only groups and subgroups are created and the timetable is constructed assuming that no two activities of the same group can be scheduled at the same time. If two subgroups of a group do conflict with each other (have students in common), it is only necessary to create one symbolic student who participates in both of these subgroups in order for the program to avoid scheduling them at the same time. It is also possible to manually enter the total number of students in the group in order for the program to anticipate room capacity when groups are scheduled.

    Length of activities

    Each activity can have a length. The default length is 1 period. If you set the length to 2, for example, all the occurrences of the activity during the week will span over two consecutive periods.

    Custom phrases

    The phrases and terms that are used for the types of resources throughout the program's user interface are customizable. For example, you can rename "Supervisor" to "Teacher", "Instructor" or "Educator" and so on. You can even select an icon of each type of resource. This allows our software to adapt its lingo to what you are used to.

    Rooms' pane

    Moving an activity from one room to another is easy using the "Rooms" pane at the bottom of the timetabling workspace. The "Rooms" pane displays the timetables of all the rooms in which the activity can be scheduled and allows you to conveniently drag and drop the activity between rooms.

    Which activity is free?

    If you have a vacant cell in the schedule and you are wondering which activity can be scheduled in that cell, the program will help you. By clicking on the "Time Tab" at the top of the activities list, a colored stripe will be added to each activity. The color of the stripe determines the availability of the activity. A green color means that the activity is free to be scheduled at the selected time (none of its resources is either scheduled or blocked). A yellow stripe means that at least one of the participating resources is already busy at the time. A red stripe means that one of the resources is blocked.

    Which cell is free?

    In the same manner that you can see which activity is free to be scheduled in an empty cell, you can also see which other already scheduled cells can be moved to that empty cell. This is done by clicking in the top left corner of the empty cell (on the tab). The program will then highlight in green all the cells which can be moved to it. Cells which would create a conflict if moved to the selected empty cell will be highlighted in yellow.

    Where can a cell be moved to?

    When you start to drag a cell, the program highlights with green stripes all the timeslots in which all the cell's resources are available. If any of the resources is unavailable (already booked somewhere else), the stripe will have a yellow color. If any resource is blocked, the stripe will be red.

    Focus on the selected resource's activities

    The activities list is usually a long list. It contains all the activities of all the resources. While working with the timetable, it is often comfortable to narrow down this list to show the activities belonging only to the resource whose timetable you are currently viewing. This is easily possible using a tab at the top of the activities list. Selecting this tab shows only the activities of the resource whose name appears on the tab (and this name switches when you switch between timetables).

    Properties window

    The properties window at the bottom right corner of the screen allows you to modify many resources', activities' and cells' characteristics. Whatever object you click on - its properties are displayed in the "Properties" window. There are no popup windows, dialogs or complicated entry forms anywhere in the program. All the data that you enter is entered in this window.

    Activity's timetable

    The main timetable view allows you to view the timetable of any resource. For example, a timetable of a room or a participant. But what if you need know on which dates and times a specific activity is scheduled? This is also possible using the dedicated "Schedule" pane below the list of activities. That pane shows the timetable of the currently selected activity. First click on an activity in the list and then click on "Schedule" next to the "Properties" pane. You will see the timetable of the activity you clicked on, across all weeks.

    Involved resources' timetables

    The "Schedule" pane at the bottom right corner of the screen is also used for displaying the timetables of resources who are part of the cell that you last clicked on. For example, suppose you are viewing the timetable of a group and you click on a cell. That cell has a teacher, a room, a subject and perhaps other resources. You will see the timetables of each of these resources without leaving the group's timetable inside the "Schedule" pane.

    Which resources are free?

    Just like you can know which activities are free to be scheduled in a vacant cell, you can know which distinct resources are free. By selecting any cell in the timetable (free or not free), and then clicking on the time tab at the top of the Resources list, the program will display a status stripe next to each resource in the list. As before, a green stripe means that the resource is free. A blue stripe means that the resource is scheduled. A red stripe means that the resource is blocked.

    Timetable of multiple resources and days

    The drop down list of resources above the main timetable view allows multiple selections. To select several resources you can click inside the check-box next to each resource's name. The same applies to the drop down list of days. This way you can have the program lay out a timetable of multiple days and multiple resources on one screen.

    Resolving conflicts

    The conflicts window, which appears whenever a conflict (clash) is detected during interactive timetabling, does not merely show the conflicts but also allows you to resolve them. Each pair of conflicting activities has two check-boxes next to each activity. Selecting a check-box marks the activity to be deleted. This is a quick and comfortable way to resolve a conflict in case you prefer one activity to be scheduled instead of the other.

    Total scheduled quantity

    The program collects timetabling statistics for each resource. You can view these statistics by clicking on the "Total" tab above the list of resources. This will display two additional columns in the list of resources: "Total" and "Scheduled". The "Total" column sums up the planned quantities of all the activities in which the resource participates. The "Scheduled" column sums up the actual number of hours (or periods) that a resource is scheduled.

    Smart conflict prediction

    When you are constructing your timetable interactively, you often get into a situation in which there are no free cells left to schedule a certain activity because in each cell one of the activity's resources is already booked somewhere else. To avoid reaching this situation, the program calculates the number of non-conflicting cells left for each activity and sorts the activities according to that number. What you get is that the activities which have the fewest number of vacant possibilities are placed at the top because they need to be scheduled first to avoid conflicts later. The ratio between the planned quantity and the number of vacant cells is depicted by a small pie-chart at the left of each activity. The fuller the circle is, the more critical it is to schedule the activity now, and not wait for later.

    "Changes" mode

    Schools which construct their timetable in advance, often need to make daily changes to resolve various cases of absences, unplanned events, holiday activities and so on. To address this problem, the program has a special "Changes" mode which takes as basis the planned timetable and allows you to make changes to it on specific calendar dates. The program keeps track of the changed cells, logs them and allows you to generate various reports depicting these changes.

    View settings

    The view settings allow you to customize many aspects of how the timetable is presented on screen. First, it allows you to select which properties of each resource are shown in the cells. For example, you can choose to display a resource's name, ID and some other custom property like salutation. For each property you can choose the font, size, horizontal and vertical alignment, angle and word wrapping. You can also set the order in which these properties are displayed.

    Undo and redo

    Having the ability to revert any change you made both in the database of resources and in the timetable itself is extremely useful. You needn't worry about making a mistake. The "Undo" option allows you to go back to the previous state with a single mouse click.

    In-place editing mode

    Although it is perfectly possible to edit all the resources', activities' and cells' properties in the Properties window, there is also an option to edit the displayed properties inside the lists themselves by activating the "Editing" mode. When this mode is active, clicking on any resource or activity allows you to edit its name, color and other properties right there where you clicked, without having to use the Properties window. You can use the Tab key to navigate between fields and the Enter key to open drop down lists. This is extremely convenient in large scale editing scenarios.

    Reports module

    The program is packed with an abundance of reports which you can generate, customize, print and export. You can control which resources are included in a report and which days and times a report should cover. You can also control various display properties such as font, size, word wrapping, splitting of multiple values into separate rows, sorting of columns and many more. Reports contain a summary line and also allow you to manually exclude certain rows from that summary, if required.

    Importing data

    If you have already prepared a database of resources and/or activities, you can easily import it into the program without having to re-enter it manually. You just need to make sure the data is either in text format or in a web-page format. The program has a very powerful import mechanism which allows you to map columns in the input format to the data types familiar to the program and then import all the data appropriately.