FET Manual
Version 0.9.3
last modified 17.08.2018
FET written by Liviu Lalescu and Volker Dirr
https://lalescu.ro/liviu/
https://www.timetabling.de/
Manual written by Volker Dirr
https://www.timetabling.de/
FET Homepage
https://lalescu.ro/liviu/fet/
FET is free software for automatically scheduling the timetable of a school, high-school or university. It uses a fast and efficient timetabling algorithm. It is free software, open source, licensed under GNU AGPL v3. Get the latest news and version from the official FET homepage (https://lalescu.ro/liviu/fet/).
This is a small manual with hopefully a lot of useful examples.
Important definitions are marked blue.
Useful hints are marked green.
Critical warnings are marked red.
Wise examples are marked yellow.
Liviu Lalescu (https://lalescu.ro/liviu/) started his project at the end of year 2002 as he was working on his diploma. He got his examination in computer programming (software specialization) in June 2003. FET had a very large palette of constraints, but sadly the evolutionary algorithm was only able to solve easy timetables. Even great efforts during the following years in research the genetic algorithm was never good enough to solve complex timetables. In summer 2007 the big breakthrough was done. A new heuristic algorithm (based on recursive swapping of activities) was able to solve difficult timetables in a few minutes.
There are a lot of nice features. FET is able to automatically care about all groups (classes/courses/students), has a very large palette of constraints and of course nice styleable xhtml timetables.
|
|
FET needs a computer that can run Qt. So it is possible to run it for example with Microsoft Windows, Apple MacOS or Linux. Even it is running with a Raspberry Pi 1 computer (it has got only 0,7 GHz and only 0,5 GB RAM), a faster computer is highly recommended. Also a screen size with at least 1280x800 is useful, because lower values will make it difficult to read the activity planning or some other dialogues. But in fact you can also run FET without a screen by using the command line version fet-cl.
Microsoft Windows users should have got Windows 7 or later.
Download the FET executable file from the official FET homepage.
It will extract all need files. Open the new created directory and start fet.
You can move the directory to another location and/or create a link to the executable file.
Checkout the video "How to install FET on Windows?" if you need more detailed explanations.
There is a MacOS version available you can also get a link to the download at the official FET homepage. Please ask in the FET Forum if you need more help about the MacOS version.
Many Linux version have got FET already in their own packet managers. Please read the manual of your OS if you don't know how to use it. You can also check the official FET homepage if you need a link to some of them.
Download the FET sources file from the official FET homepage. Extract that file. You will find a very detailed description in the README file.
Before exploring FET you might need to setup or check 2 things:
Open FET → Settings → Language and select your preferred language.
Open FET → Settings → Select output directory and check that folder.
You will use this folder many times while working with FET. So keep it in mind or change it if you prefer another location.
Even FET is a tidy Qt-application, you should read this manual carefully, because it includes many hints and warnings how to use it correct. Maybe view "Let's run a FET example file!" before continue reading.
Of course it's possible to open and save a file. If you are using FET the first time maybe open a few example files. Check the data and generate a timetable with FET → Timetable → Generate new. Check the generated timetables in FET → Timetable → View
FET doesn't have an option to print in this menu. The timetables will be written into the output directory after a timetable is generated. Please read chapter Print timetables if you want to know how to print a timetable.
Save your dataset regularly. Especially if you add or modify constraints. FET doesn't have an undo option right now. Sometimes it's very difficult to undo the last modification. Also if FET didn't find a solution after several hours you maybe want to undo but already forgot last changes.
The manually saved dataset contains only the Basic data, Activities and Constraints.
Normally it doesn't include the generated timetable solution.
You need to do Timetable → Save data+timetable as ... if you want to save the generated timetable.
But in fact that is normally not needed, since the timetable will be saved automatically in your output directory after generating it.
There is no problem at all if you generated multiple timetable by FET → Timetable → Generate multiple variants.
But be careful if you use FET → Timetable → Generate new. It will overwrite the previous results if the dataset have got the same name.
I highly recommend to save with a new file name as soon as a timetable was generated successful, even if there are still missing activities or constraints! One possibility is to append an increasing number at your file name.
The data contains the Basic data, Activities and Constraints. It normally doesn't include the generated timetable solution. Maybe also view "How to enter basic data?".
The institution name and the comments are optional data.
The institution name will be printed as a caption to all small timetables (but you can still style and hide it easily later).
The comments will be printed at the beginning of the timetables (before table of content).
Use the comment to write about problems, latest added constraint, missing constraint or constraints that should be modified. Don't forget to update regularly the comments. An old comment is as bad as a missing or wrong comment.
Most schools just need days from Monday to Friday.
This terms are printed into the timetable head. Use short cuts to get smaller tables. (MON instead of Monday, TUE ...).
Example 1 | Example 2 | Example 3 | Example 4 | Example 5 |
---|---|---|---|---|
1st Period 2nd Period 3th Period 4th Period 5th Period 6th Period |
Period 1 Period 2 Period 3 Period 4 Period 5 Period 6 |
1 2 3 4 5 6 |
08.05 – 08.50 08.50 – 09.35 10.00 – 10.45 10.50 – 11.35 11.50 – 12.35 12.35 – 13.20 |
08.05 08.50 10.00 10.50 11.50 12.35 |
A Period is a distance in time.
The periods are printed into the timetable. So use shortcuts to get smaller timetables. You can use any phrase as period name.
You have to care about that every period has the same distance (is as long as every other period), because FET take always duration 1 per period.
(Except if you add a period that always get special activities or a break. In example 4 a period 09.35-10.00 can be added and this period always get the constraint break. But that is only a cosmetic intrusion.)
So if you do it like in the example table at the right side an activity with duration 1 take 45 minutes and an activity with duration 2 take 90 minutes.
Activities can not get non-integer duration like 1.5.
If FET cannot find a solution you should think about increasing the number of periods or the number of days. If FET is able to solve your dataset easily and you don't know other constraints to add you should maybe think about decreasing number of periods or number of days. But you should rethink about all constraints again! (Especially Not available teachers, students or rooms constraints.)
Add teachers, subject, activity tags, rooms and buildings here.
Also these names are printed into the timetable. So use shortcuts to get smaller timetables.
You don't need to add the teachers "Target hours" or the "Qualified subjects", but this data will help you to find and avoid bugs. Especially if you work with the activity planning interface.
An activity tag is an optional mark to an activity.
Activity tags are for example lecture (reading), exercise or laboratory. If some activities must (or should) be instructed only in the morning the activity tag might be morning. The idea of this marks is normally not to give additional information to users. This marks are normally used if you want to set constraints just to activities with special activity tags. So they are used only by you (timetable maker) but will be hidden for teachers and students later to get better readable timetables.
Think twice before using activity tags. I recommend to use activity tags only to set constraints. First of all try to set constraints without an activity tags, because it will be easier.
You don't need to add home rooms. Normally every group (class or teacher) has it's own home room. There will never be a room conflict if every group has it's own room. Add only rooms that could have a conflict (arts room, gym, science lab, ...) or if you have more groups than rooms.
Every room can be occupied by one activity at he same time. So only one activity can be placed per room. If you have a huge gym (that maybe can be separated into 3 parts by curtains), then enter 3 rooms for the gym. Call them maybe "Gym-1", "Gmy-2" and "Gym-3".
You don't need to add buildings. Add only buildings if you want to use a buildings constraint (like Max building changes per day or Min gaps between building changes.)
If you need to add different buildings you also need to care about global clear room names. If you have room name "123" in building A, then you can't name a room "123" in building B too. So i recommend to include the building name into the room name. For example room "123" in building A should get the name "A-123".
It's very important to understand the difference between years, groups, subgroups, classes, courses, divisions and categories. But it's not very easy. Please read definitions and all examples.
Year (form): A set of students at the same stage of their schooling. For example a German primary school has years 1 to 4. A year contains (in most cases) several groups (classes).
Group, Class, course and division: A set of students who visit the same activities. So they meet the same teachers to study the same subjects at the same time.
Category: A set of groups that might have activities simultaneously.
Course (division of the second category): A set of students who meet (sometimes) the same activities.
course | subject (duration) |
---|---|
Biology Chemistry Physics |
Biology (4), chemistry (1), physics (2) Biology (1), chemistry (4), physics (2) Biology (2), chemistry (1), physics (4) |
Be careful if you have a (nearly) 100% filled timetable. These activities are necessarily scheduled simultaneously if pupils of these activities have no unused period in their timetable. So if you do the activity planing you have to be sure that the timetable is solvable. In this example the duration of a course is 4+1+2=7. So it's impossible that all physics activities are instructed by the same teacher because physics has total duration 2+2+4=8. But if physics in the physics course is instructed by a different teacher then in the other courses, then this courses are possible.
It doesn't matter in this example if the physics course get only biology duration 1. FET is able to care about that, even the duration is different between the courses.
course | subject (duration) |
---|---|
Christian religion Jewish religion Muslim religion philosophy |
Christian religion (2) Jewish religion (2) Muslim religion (2) philosophy (2) |
There is a third category at most German schools. Compare table at the right.
Your can add more categories of course. Doing more categories will make it easier to care about rooms and the timetables will be very comfortable readable. The only disadvantage of that is that the needed time to generate might be higher since a lot of subgroups will be generated by that. As long as there are not much more subgroups than students in that year all is very fine. If there are more subgroups than students in the year you also don't need to worry as long as your timetable is still fast solvable. But if there are much more subgroups than students or generating your timetable slows down to much you should think about other variants.
1. variant: Enter the correct students structure like explained in chapter "Years, groups and subgroups - Example 3: High School and Universities".-
2. variant: Don't split the students.
Just add both teachers into that activity.
So both teachers can care about a part of that group.
This variant will care only about max one room.
This variant might be also used with a whole year. Just enter all teachers, even they should teach an other subject.
you can Of course the subjects split that activity after there timetable was generated by another tool.
(This is for example very easy if you use substitution and supervision tool TiTiTo.)
If you need more rooms you need to select one of the following variants:
3. variant: Do it like in the second variant. Even if you have got only a few of those activities you don't need to care about that other room now, even if you have got a difficult dataset. There will be normally always another room free, since students are in the gym, science lab, music room, ... . So you can care about that later. If you use TiTiTo you can split those activities into parts, select other free rooms and also change the subject. The tables will look perfectly.
4. variant: If you don't want to use TiTiTo you can also just add an activity with A set of activities has same starting time (day+hour) constraint. The trick is that only the first activity get the whole year while the other activities don't get a students set. The tables won't look perfectly, but acceptable. Generating will be slower but on the other hand you don't need to care about that later manually.
5. variant: Use the already existing subgroups. Add the activities and add the subgroups only. As long as you don't need more than the already existing subgroups it will be easy. Just care that in sum you use all subgroups of that group since gap constraints will be problematic if you don't do that. The tables won't look perfectly, but you may simply hide the subgroup names in the table by modifying the css file.
Maybe you know that (by accident) no students is in Group 10A and 10Bio at the same time. You can delete the corresponding subgroups. You maybe get better timetables by this. But you need to do it only if pupils have unused periods in their timetable. Be careful! This also mean you (maybe) cannot put a students with group 10Bio into 10A later. You maybe get new students (because parents moved house). So I highly don't recommend this!
Students of high schools and universities have got normally a lot of possible courses to select. If you done your course planning already you can easily at the data into FET. If you haven't done your course planning yet, you should check the custom FET MAPR version.
"year","group","subgroup"
"9","9_A","Bart Simpson"
"9","9_Physics","Bart Simpson"
"9","9_Jewish","Bart Simpson"
"9","9_A","Lisa Simpson"
"9","9_Biology","Lisa Simpson"
"9","9_Christian","Lisa Simpson"
If your school administration doesn't have got a csv export you can contact your school administration software developer or me.
Please read chapter CSV Files to get more information.
Before adding activities you should have a planning. Many school do that just with a spreadsheet software like Excel or Calc.
FET also contains a simple Activity planning.
So you already should think about all activities (teachers, students and rooms) before adding them:
Think about students: Has every student the correct number of activities, subjects and duration?
Think about teachers: Has every teacher the correct number of activities, subject, duration and students? (Is the teacher allowed to teach that subject and/or year?)
Think about activities: Is it possible that activities of courses are simultaneously? (Think about teachers and rooms!) Is it possible also with activities that should be simultaneous because of other reasons?
Think about rooms: If you will use room constraints than care in your activity planning about as less room changes as possible, because it will be easier to generate a timetable.
Also think about unwritten rules like this:
- Give a teacher as many activities with the same group as possible, because generating the timetable will be easier and also most teacher will like that (because they can swap activities without any problem themselves, they don't need to learn new names, ...).
- Maybe give a teacher as many activities in the same year (because he can compare students better; he don't need to prepare so much different hours and so he can spend more time on prepare his lessons; he can maybe save some meetings; ...). But be careful sometimes this is a bad rule. For example maybe in the last year must be done final examination in a short time. So maybe the teacher has no time to do all that test in such a short time.
- Students keep a teacher 2 (or 3 years). Example: A class get in year 5 and 6 the same Maths teacher, but that class get another Maths teacher in year 7 and 8 and so on.
If you are doing your timetable with FET the first time I highly recommend the following:
To add an activity you just need to add (double click with the mouse, or select and press enter) students, subject and teachers.
Normally an activity contains 1 teacher, 1 group and 1 subject.
But you can also enter several students and teachers (for example for team teaching), only teachers (for example for forking in the office), only students (for example for lunch) or without teachers and students (for example to care about room constraints).
You must always enter the number of hours that this activity is instructed.
That is a bit tricky, since the total duration is split into several durations.
We will check several examples a bit later.
The Min days between a set of activities constraint is one of the most important constraints.
So this constraint is added by default if you add more then one (sub-)activity.
This constraint need a value for min days, a weight and it has a consecutive flag.
The consecutive flag will force activities to be consecutive if they are at the same time.
It has always 100% weight.
The weight of this constraints is only for the min days value.
Max 2 subactivities can be consecutive at the same day.
It's impossible to have 3 or more subactivities consecutive at the same day.
You can also set the number of students if you use a room capacity constraint.
Value -1 mean the number of students will be computed automatically.
There is also an "Active" flag. You can deactivate a subactivity by that.
You will not need it if you enter activities the first time.
You might need it later if you modify your dataset.
You will see some examples now. There is a table with 6 hours per day and 5 days per week. If the example is impossible it is striked by a red line. If FET tries to avoid such a table it is striked by a yellow line. You can check out these examples also in the video How to add activities?.
Split 1: Duration 1
Split 1: Duration 2
Split 2: Duration 1+1, Min days 1 with weight 95%, consecutive
Split 2: Duration 1+1, Min days 1 with weight 95%, not consecutive
Split 2: Duration 1+1, Min days 1 with weight 0%, consecutive
Split 2: Duration 1+1, Min days 1 with weight 100%
Split 2: Duration 2+1, Min days 1 with weight 100%
Split 2: Duration 2+1, Min days 1 with weight 95%, consecutive
Split 2: Duration 2+1, Min days 1 with weight 95%, not consecutive
Split 3: Duration 1+1+1, Min days 1 with weight 95%, consecutive
Split 3: Duration 1+1+1, Min days 1 with weight 95%, not consecutive
Split 3: Duration 1+1+1, Min days 1 with weight 100%
Split 3: Duration 1+1+1, Min days 2 with weight 95%, not consecutive
Please read section Weights of constraints and Min days between a set of activities.
It's allowed to add pseudo activities. Pseudo activities doesn't include a students set or a teachers set. Sounds stupid, but they are useful to care about some constraints. Compare sections Not available teachers, students or rooms & breaks, Gaps, Preferred time(s) and Preferred room(s).
There are two big possibilities to add activities that take place once every two weeks.
The recommended one is to use one of the following workarounds.
The other one is to do it on a very exact way.
The advantage of the workarounds is a very simple input of the activities.
The disadvantage is that you might not get the best timetable and it's not easy to differ fortnightly activities from regular activities in the printed timetable.
This workarounds based on a simple idea: Just add a fortnightly activity as a regular activity and call the students and teachers that this activity is only instructed every second week.
If students are not allowed to have gaps, then fortnightly activities should get constraint activity ends day or constraint preferred time(s) with first periods as preferd times. If students also need constraint students early, then you should only use constraint activity ends day.
Be careful if you have room problems. In many cases Home room(s) will not care about fortnightly activities. You need to use a Preferred room(s) constraint.
Just do the timetable 2 times with 2 different files. Maybe call one file the "A" week and the other file the "B" week.
Don't forget that you can do this trick only with 2 different weeks.
Several schools use this trick for example for the first half of the year and the second half of the year.
Especially if the activities have got only 1 hour per week.
So they just do it 2 hours per week in the first half of the year and 0 hours per week in the second half of the year.
In best case students have got an even number of those activities; so you can swap them easily without changing the total number of hours of the students.
Team teaching mean two or more teachers instruct one group in the same period.
Be careful if you have room problems. In many cases Home room(s) will not care about team teaching activities. You need to use a Preferred room(s) constraint.
While modifying activities you always change the whole activity. So all subactivities will get the same modification. Sometime it is very useful to change only one of that subactivity.
Don't forget that the subactivities are orderd only in this menu. It doesn't mean that the subactivities are also ordered in the timetable. So the first subactivity can be on the last day while the last subactivity can be on the first day. You must use a constraint if you want to order them in the timetable
An other useful trick in that you might want to activate or deactivate subactivities. In fact this is also possible with the "normal" modify dialog.
weight | average no. of retries |
---|---|
50% 75% 80% 90% 95% 99% 99.5% 99.75% 99.80% 99.90% 99.99% 100.00% |
2 4 5 10 20 100 200 400 500 1000 10000 unlimited |
Every constraint has a weight. A weight of 100% mean that this constraint must be respected.
A lower value mean it should be respected, it's not necessary.
It's pretty difficult to explain the exact function, but a simple illustration is the following:
50% weight mean that in average FET retries two times to place an activity without a conflict.
If FET isn't able to place the activity without a conflict after average 2 times it keeps the conflict and tries to place the next activity.
This is not an exact explanation of the algorithm, because the activities might get unallocated or cycle reopened.
Always save the datafile under a different name (just number them) after adding or modifying a constraint.
Check if your timetable is (still) solvable before adding new constraints. It might be impossible to solve the timetable.
The basic constraints are:
Time constraints (misc) → Basic compulsory time constraints
Space constraints (misc) → Basic compulsory space constraints
This basic constrains must have weight 100% and must always be included in the dataset.
The basic time constraints care about that a teacher never has to instruct two or more activities at the same time. Also students must have maximum one activity per period.
The basic rooms constraints care about that a room will never have included 2 or more activities.
The not available and break constraints are:
Time constraints (teachers) → A teacher is not available
Time constraints (students) → A students set is not available
Space constraints (rooms) → A room is not available
Time constraints (misc) → Break (all teachers+all students not available)
It might happen that teachers, students or rooms are not available.
This constraints must have weight 100%.
If a teacher or student has constraint Not available, then this period is not counted as a gap. If you need to count not available times as possible gaps please use Time constraints → Activities→ A set of activities have a set of preferred times. Select only the needed teacher and set all not available times.
TODO: XXX write about duration, consecutive, grouped and break!
Constraint break is an easy way to say that all teachers and students are not available.
The n days between a set activities constraints are:
Time constraints (activities) → Min days between a set of activities
Time constraints (activities) → Max days between a set of activities
n days between activities does NOT mean: one activity on Monday and one activity on Wednesday. There is one day (Tuesday) between.
n days between activities are calculated by a difference. So if one activity is on Monday (maybe the 14th February) and one activity is on Wednesday (maybe the 16th February) then there are 16-14=2 days between that activities.
Min n days between a set of constraints are added by default as soon as you add a split activity. So please read also section Add an activity.
course | subject (duration) |
---|---|
nature science industrial art foreign language |
biology (2), chemistry (2), physics (2) industrial art (6) French (4), Latin (2) |
If you do your activity planing you must also carefully think about constraint Min days between a set of activities (Normally not in the classes (category 1), but in the courses (category 2 and above)).
Instead of using a min 0 days between activities constraint you should use a same starting day constraint.
By this constraint you set the max days between a set of activities.
In my opinion it is "unneeded" to normal school tables, since there are other much more important constraints that should be added.
But if you enter a dataset with more than just 5 days per week (maybe if you use the 120-days custom FET version) this constraint will be very useful to get "good" spreading of (sub)-activities.
The min hours daily constraints are:
Time constraints (teachers) → Min hours daily for a teacher
Time constraints (teachers) → Min hours daily for all teachers
Time constraints (students) → Min hours daily for a students set
Time constraints (students) → Min hours daily for all students
The max hours daily constraints are:
Time constraints (teachers) → Max hours daily for a teacher
Time constraints (teachers) → Max hours daily for all teachers
Time constraints (students) → Max hours daily for a students set
Time constraints (students) → Max hours daily for all students
Time constraints (teachers) → Max hours daily with an activity tag for a teacher
Time constraints (teachers) → Max hours daily with an activity tag for all teachers
Time constraints (students) → Max hours daily with an activity tag for a students set
Time constraints (students) → Max hours daily with an activity tag for all students
Constraints max and min hours daily are useful if you want a balanced day.
Group | activities per week |
---|---|
1A, 1B 2A, 2B 3A, 3B 4A, 4B |
20, 19 21, 20 25, 24 30, 29 |
Instead of using max periods per day you can use preferred time(s). It's not the same (it's only the same if you also use constraint no gaps and students early), but very similar, faster and (maybe) a little bit more powerful.
You can do it similar to teachers, but think always twice. In my opinion the max periods per day constraint is only useful if your institutions has many periods per day.
The min periods daily constraint for a teacher is (in my opinion) not always useful.
Before using this constraints you should do this:
Use constraint max periods per day to get a more balanced timetable.
Think about using constraint max days per week for every single teacher.
It's maybe much better, because it has a rough effect and the teacher don't need to drive to the institution.
Also talk to the teachers.
If a teacher have got only 1 hour at a day it might be a psychological problem.
A teacher might complain: "I must come to school just for 1 hour."
So imagine now you will move one of his activities at the same day.
In worst case he will get more than 2 new gaps! That isn't better.
Of course you might also move an activity without generating a new gap.
But now also count correct: Does he save driving time to school by that? No!
Is he longer or shorter at school or at home by that? No!
So a min day constraint doesn't help in that point!
You can save driving time to school only by a Max days per week constraint.
You can save hours at school only by Max gaps constraints (or working less hours).
In many schools it is not allowed that activities are omitted. If impeded teachers must be represented by other teachers you might get big trouble if you add to many and to high min periods daily constraint for teachers, because there might be not enough teachers to substitute teachers of that activities. Please read chapter Teachers' Free Periods.
It is now to difficult to generate a timetable? Check constraint Max hours continuously with an activity tag since this is a less strict variant.
The max days per week constraints is:
Time constraints (teachers) → Max days per week for a teacher
Of course if the contract of employment guarantee a max number of days per week, then this is an important constraint.
A timetable is not solvable if you add constraint max days per week with only 3 days and weight 100% if the same teacher instruct a set of 4 or more activities that have constraint Min days between a set of activities with weight 100%. Be careful! Most activities have this constraint (compare Add an activity).
I recommend to check this constraint again after all other constraint are added, most of them already have weight 100% and FET is still able to find a solution.
Most teacher like a free day. Check the teacher statistics. Check if a teacher is able to (maybe) get free day. So the number of periods per day of the teacher must be lower or equal then the number of periods per week of the timetable minus the number of periods per day. Also check if a lower number of working days doesn't controvert to a constraint (especially a constraint Min days between a set of activities). Add constraint Max days per week for a teacher with weight 100% if nothing argue against it. Don't add to many constraint at one time. Maybe begin with the teacher that instruct the lowest number of periods per week. Check if the timetable is still solvable. Add the next teacher if it is still solvable. Remove the constraint if the timetable is not solvable and try to add the following teacher.
In many schools it is not allowed that activities are omitted. If impeded teachers must be represented by other teachers you might get big trouble if you add to many free days, because there might be not enough teachers to substitute that teachers. Please read chapter Teachers' Free Periods.
The min days per week constraints are:
Time constraints (teachers) → Min days per week for a teacher
Time constraints (teachers) → Min days per week for all teachers
Even there are min days constraints for teachers, they are in my opinion never needed. Why should someone force a teacher or student to come to school if they could stay at home?
There are at least 3 variants how you force min days per week already indirectly. You could use similar variants for students.
Variant 1: Just add a max hours daily constraint. If a teacher have got 24 hours per day and you set for example max 6 hours then he will get min 24:5=4 days per week. If you set max 8 hours per day he will get min 24:8=3 days per week. If you set max 5 hours per day he will get min 24:5=4 days per week.
Variant 2: Just use min day constraint with 100% weight. Maybe it is a math teacher and the activity is split into 4 parts with 100% weight. In that case the teacher will get min 4 days.
Variant 3: Add him a "pseudo" activity. If the teacher must come at least 5 days per week than there should be a reason for this. Maybe he should supervise or work in the office. So just give him a "pseudo" activity with 5 sub-activities with 100% weight and maybe the subject "office".
The max gaps constraints are:
Time constraints (teachers) → Max gaps per week for a teacher
Time constraints (teachers) → Max gaps per week for all teachers
Time constraints (teachers) → Max gaps per day for a teacher
Time constraints (teachers) → Max gaps per day for all teachers
Time constraints (students) → Max gaps per week for a students set
Time constraints (students) → Max gaps per week for all students
Time constraints (students) → Max gaps per day for a students set
Time constraints (students) → Max gaps per day for all students
Use weight 100% and start with a high Max gaps per week for all teachers value. Try to solve the timetable and decrease the value step by step. In fact this is always the last optimisation i am doing after all other constraints are fine. So don't use a too low value at the beginning if you didn't enter all other constraints yet.
In many schools it is not allowed that activities are omitted. If impeded teachers must be represented by other teachers you might get big trouble if you add to "good" gap constraints, because there might be not enough teachers to substitute that teachers. Please read chapter Teachers' Free Periods.
It sound fair if you use Max gaps per week for all teachers instead of different values to every single teacher by constraint Max gaps per week for a teacher. But you might think over hasted. For example the chef and it's deputy always have much paperwork in the office. So they don't have really gaps, they can expedient use this "gaps". Also trainee teachers don't have really gaps, because they also have to observe activities from other teachers. The timetable might be solvable if a few teachers have a higher max gaps per week value.
Maybe FET can solve the timetable if all teachers have maximum 2 gaps per week, but it can't solve the timetable if all teachers have maximum 1 gap per week. Maybe it's fair if all teachers that have free days get a constraint max gaps 2 and all teachers that are working every day get the constraint max gap 1.
Don't forget a teacher if you use constraint Max gaps per week for a teacher instead of Max gaps per week for all teachers.
The max hours continuously constraints are:
Time constraints (teachers) → Max hours continuously for a teacher
Time constraints (teachers) → Max hours continuously all teachers
Time constraints (students) → Max hours continuously a students set
Time constraints (students) → Max hours continuously for all students
Time constraints (teachers) → Max hours continuously with an activity tag for a teacher
Time constraints (teachers) → Max hours continuously with an activity tag all teachers
Time constraints (students) → Max hours continuously with an activity tag a students set
Time constraints (students) → Max hours continuously with an activity tag for all students
This constraints can be used to affect the minimum number of gaps per day. If someone get a constraint Max hours continuously with value 3, then it mean he will never teacher more then 3 hours continuously. So if he work 4 hours per day, then he will get at least 1 gap. If he work 5 hours a day, then he will also get at least 1 gaps. If he work 7 hours a day, then he will get at least 2 gaps.
There are still to many hours daily? Check constraint Max hours daily since this is a more strict variant.
The max span per day constraints are:
Time constraints (teachers) → Max span per day for a teacher
Time constraints (teachers) → Max span per day all teachers
Time constraints (students) → Max span per day a students set
Time constraints (students) → Max span per day for all students
The span is the last hour minus the first hour. It doesn't matter if there are activities between or gaps.
The students early constraints are:
Time constraints (students) → A students set begins early
Time constraints (students) → All students begin early
A students day will always start in the first period with an activity if you use this constraint (except you also used a constraint like in section Not available teachers, students or rooms & breaks in the first period). ***xxx TODO recheck. Also write about max beginnings at the second hour
The activity ends day constraints are:
Time constraints (activities) → An activity ends students day
Time constraints (activities) → A set of activities ends students day
This constraint is very important if students have constraint no gaps and not all students of a group (or several groups) visit this activity. Also fortnightly activities maybe need this constraint.
If you need activity starts day, then use An activity has a set of preferred times and choose every 1st period as possible time.
The 2 activities are consecutive constraint is:
Time constraints (activities) → Two activities are consecutive
Constraint consecutive mean that these activities are scheduled at the same day without any gap or another activity between them. A break by a Break Constraint between is allowed.
If both activities contain the same students and teachers it is maybe better to just increase the duration of one activity. Even if the subject is different, since generating a timetable will be faster.
The activity are grouped constraints are:
Time constraints (activities) → Two activities are grouped
Time constraints (activities) → Three activities are grouped
The Two activities are grouped constraint is less strict than the Two activities are consecutive.
The activities will be also at the same day without any gap or another activity between them.
Also a break by a Break Constraint between is allowed.
This time just the order of the activities is not compulsory.
So the second activity might be before the first one.
This constraints might be used to avoid room changes of teachers or students.
If activities contain the same students and teachers it is maybe better to just increase the duration of one activity. Even if the subject is different, since generating a timetable will be faster.
The two activities are ordered constraints is:
Time constraints (activities) → Two activities are ordered
Constraint ordered mean that the first activity must be scheduled before the second activity.
Be careful with this constraint, because it is very restrict the timetable very much.
In my opinion this constraint sounds nice, but ensnare to an unhelpful use.
If you order two activities, then it might happen that listening is on Monday and the practise is on Tuesday.
Sounds correct and maybe also sound like this is needed, but think more carefully. What happen if the activity on Tuesday doesn't take place because of ill teacher,
ill students, holiday, field day, school trip or other reasons. The "needed" order is confused. It is nearly impossible to keep such an order the whole year.
So why adding such a strict constraint if you can't keep the order over the whole year? Just because of the first week? In my opinion that is nonsense.
Even if the first week start with a practise lesson that really doesn't matter. You have enough other things to do in the first lesson (Get to know your students,
check their previous knowledge, give an overview about the year or maybe just do a listing lesson.).
So in my opinion this constraint should be only used if you also use a constraint A set of activities has same starting day (any hours) to that activities.
The Min gaps (hours) between a set of activities constraint is:
Time constraints (activities) → Min gaps (hours) between a set of activities
Constraint Min gaps (hours) between a set of activities mean that there are a minimum number of periods between 2 activities. So this constraint is something like the opposite of constraint consecutive.
The Working in an hourly interval max days per week constraints are:
Time constraints (teachers) → A teacher works in an hourly interval max days per week
Time constraints (teachers) → All teachers works in an hourly interval max days per week
Time constraints (students) → A students set works in an hourly interval max days per week
Time constraints (students) → All students works in an hourly interval max days per week
The preferred time(s) constraints are:
Time constraints (activities) → An activity has a preferred starting time
Time constraints (activities) → An activity has a set of preferred time slots
Time constraints (activities) → A set of activities has a set of preferred time slots
Time constraints (activities) → A set of subactivities has a set of preferred time slots
Time constraints (activities) → An activity has a set of preferred starting times
Time constraints (activities) → A set of activities has a set of preferred starting times
Time constraints (activities) → A set of subactivities has a set of preferred starting times
Preferred times are very powerful and fundamental constraints, you can nearly do everything with them. Especially constraint A set of (sub)-activities has a set of preferred times is very helpful (compare next example). It can care about activities with the same teacher, the same students, the same subject or the same activity tag.
1st Period 2nd Period 3th Period 4th Period 5th Period 6th Period |
allowed allowed allowed not allowed allowed not allowed |
The same starting time constraints are:
Time constraints (activities) → A set of activities has same starting time (day+hour)
Time constraints (activities) → A set of activities has same starting day (any hour)
Time constraints (activities) → A set of activities has same starting hour (any days)
In the easier way you don't need constraint A set of activities has same starting time (day+hour). Just move all needed teachers and students in one activity. But by this they get only one room. But there are at least 3 needful examples:
The not overlapping constraint is:
Time constraints (activities) → A set of activities are not overlapping
Activities with same teachers or same students or same room are never overlapping by default. (compare Basic compulsory time and room constraints). So this constraint is only needed in very special situations.
The Min resting hours constraints are:
Time constraints (teachers) → Min resting hours for a teacher
Time constraints (teachers) → Min resting hours for all teachers
Time constraints (students) → Min resting hours for a students set
Time constraints (students) → Min resting hours for all students
Some school start already early (maybe at 08:00) but also ends pretty late (maybe at 22:00).
Especially school with working adults or room problems.
In those schools it will be bad if teachers or students have got the last activity in the last time slot at 22:00 and need to visit the school already the next day in the first time slot at 08:00.
You can avoid those problems by using a Min resting hours constraint.
If you want to set a Min resting hours constraint with just 1 resting hour you might try Working in an hourly interval max days per week constraints. It is a bit more complicated to add this constraint, but it might be faster to generate a timetable. You need to set a constraint for Monday the last and Tuesday the first hour with max 1 working hour. Then need to set a constraint for Tuesday the last and Wednesday the first hour with max 1 working hour. Repeat this up to Thursday the last and Friday the first hour with max 1 working hour. Please let us know if this variant generate faster or slower results if you generate a lot of timetables.
TODO xxx ***
TODO xxx ***
The home rooms constraints are:
Space constraints (teachers) → A teacher has a home room
Space constraints (teachers) → A teacher has a set of home rooms
Space constraints (students) → A set of students has a home room
Space constraints (students) → A set of students has a set of home rooms
Home rooms are the default rooms. They are allocated if there is no Preferred room(s) constraint.
Many institutions have home rooms to groups or teachers. You don't need to add home room constraints if every group (or teacher) have it's own home room. So you don't need to add home room constraints because you already know that there will never be a conflict. Add home rooms constraints only if some groups (or teachers) share rooms or if you want to display them into the timetable.
FET didn't allocate a home room if an activity contains more then 2 teachers or students sets. Use a Preferred room(s) constraint for that activities if you need to allocate a room.
Don't use teachers home room constraints and students home room constraints at the same time.
Read chapter preferred rooms before you add home rooms.
You counted the number of home room periods of every teacher and wrote down a list of teacher that could share a home room. But which teachers should share a single home room?
Check if teachers that instruct in the same special room can share a home room. For example teacher T1 instruct math and physics and teacher T2 instruct history and physics. Physics is instructed in the lab. Math and history is instructed in the home room. So if teacher T1 instruct physics, then the lab is used by T1. So T2 will never be able to instruct physics at the same time as T1, but that also mean the home room of T1 is free and T2 can use that home room.
Be careful if you share a special room with another institution and so you also use A room is not available at the same time. For example you have a huge gym that has 3 room but you can't use it every day because also another school use it. Teacher T3 instruct math and sports and teacher T4 instruct history and sports. So this teachers can maybe never share a home room, because they must use the gym at the same time.
Sometimes (especially if you just need the last link of 2 teachers) it's the best if the teachers with the lowest number of home room periods share a room.
Please check constraint A set of activities occupies max different rooms if there are still a few teachers left and you are not sure what room will be the best as home room.
The same starting time constraints are:
Space constraints (subject) → A subject has a preferred room
Space constraints (subject) → A subject has a set of preferred rooms
Space constraints (subject+activity) → A subject+activity tag have a preferred room
Space constraints (subject+activity) → A subject+activity tag have a set of preferred rooms
Space constraints (activity) → An activity has a preferred room
Space constraints (activity) → An activity has a set of preferred rooms
Preferred room constraints have a higher priority then home room constraints. This constraints are normally used for special rooms.
Space constraints (activity) → A set of activities occupies max different rooms
Be careful with this constraint. Use it only if you have got an easy timetable and if it is needed. It might be more clever if you add more detailed preferred room constraints instead of using this constraint. It might be better if you just generate the timetable without any additional constraint and modify later manually rooms if so see possible swaps.
Space constraints (activity) → A set of activities are in the same room if they are consecutive
Be careful with this constraint. Use it only if you have got an easy timetable and if it is needed. It might be more clever if you add more detailed preferred room constraints instead of using this constraint. It might be better if you just generate the timetable without any additional constraint and modify later manually rooms if so see possible swaps.
The buildings constraints are:
Space constraints (teachers) → Max building changes per day for a teacher
Space constraints (teachers) → Max building changes per day for all teachers
Space constraints (teachers) → Max building changes per week for a teacher
Space constraints (teachers) → Max building changes per week for all teachers
Space constraints (teachers) → Min gaps between building changes for a teacher
Space constraints (teachers) → Min gaps between building changes for all teachers
Space constraints (students) → Max building changes per day for a set of students
Space constraints (students) → Max building changes per day for all students
Space constraints (students) → Max building changes per week for a set of students
Space constraints (students) → Max building changes per week for all students
Space constraints (students) → Min gaps between building changes for a set of students
Space constraints (students) → Min gaps between building changes for all students
Changing a building need much time. Even if the buildings are not far away. You can limit the number of building changes by this constrains. You need to enter the building names in FET → Data → Buildings. Then you must set the buildings to each room in FET → Data → Rooms.
If the buildings are far way you might need much time to travel to the other building. Use one of the Min gaps between building changes to ensure that there will be enough time to travel.
This constraints can be also used for floors or rooms (if you don't need one of the Min gaps between building changes at the same time for real building changes). Just set the floor or room name as building name.
Check the teachers, subjects and students statistics before generating a timetable. You can check if all activities are (hopefully) added correct. It's also useful to check the statistics if you want to add some constraints. (like max days per week or max gaps)
Checking the teachers and subjects statistics is normally unneeded if you work with the Activity planning. But you should check the other statistics even if you use the activity planning.
Checking the students statistics. While the number of hours per year and group are a bit confusing sometimes I highly suggest to check the number of hours per subgroup. You can see bugs here that are not so easy visible in the activity planning. Those bugs often occur because of an incorrect or changed students structure.
Checking the activities room statistics will help to to find activities without a room.
Checking the teachers subjects qualification statistics will help to to find teachers in wrong activities.
Some of the advanced statistics are very similar to the Activity planning view. So it is partly unneeded to check it work with the activity planning view, but a quick view will never be wrong.
There are also some statistics about the generated timetable. Of course they are only visible as soon the timetable is generated. You can find them in the FET results folder.
You can also have a look at the video Let's check the statistics! to get some more information.
XXX
The activity planning is a small sheet to help you doing the planning. It doesn't support all feature and constraints that are needed for a full planning. That is nearly impossible, since a lot of different school systems uses a lot of different pedagogic rules for the planning. So you need to care about rules like this yourself:
But this planning gives you a nice overview about your whole dataset and you can see some some statistics much easier than in the default activities view. So it is easier so check things like:
To get the best assistance by this sheet I highly recommend to do two things before working with it:
Checkout the following videos to learn more about the activity planning interface:
Maybe not every timetable is solvable. Remove constraints if FET fail to find a solution. Contact the author if you know that a solution is possible. Don't add to many constraints at one time, check regularly if the timetable is still solvable and always save with a new file name.
There are two different ways to generate timetables:
timetable → generate new
timetable → generate multiple variants
Generating a timetable is very random process. So it might happen that generating a timetable just need a few seconds and generating a timetable with the same dataset need the next time several minutes. I can't say how much time is needed to your timetable, but I know datasets that need several hours to solve even on a modern computer.
Don't wonder if the number of placed activities stop or even decrease sometimes. That is normal. Just try some sample files. They are all solvable.
In normal case you only need to generate a single timetable if you add all needed constraints with weight 100% because you will get a perfect solution. But why can you generate multiple timetables? In my opinion that is only needed in 2 worst cases:
If you generated a single timetable by timetable → generate new,
you can view the timetables by:
timetable → view (students)
timetable → view (teachers)
timetable → view (rooms)
*** you can lock activities here *** who need it? Good example?
I recommend to view the timetables with a web browser.
They are saved in html format.
If you don't have got a too slow computer of too less free disk space you should also think about increasing the html level up to level 5 since you will be able to see all similar names if you move with the mouse over a name.
You can change the html level in FET → Settings → Timetables → HTML level for generated timetables.
On Linux systems they are stored in ~/fet-results/
and
on Windows systems they are stored in fet-results
directory in the User directory.
If you can't find it please check FET → Settings → Select output directory.
I recommend to do six things:
conflicts.txt
file in the result directory.
Teachers' Free Periods
file in the result directory. (compare Teachers' Free Periods)
It's very important to do the first two suggestions before the semester starts. Normally an institution has a meeting before the next semester begin, so you should do it at the latest at this meeting! Of course this two hints means that you have to work a little bit more before you can release a timetable, but you will have much more trouble and work if you release a buggy timetable.
Be critical yourself. Did you care about the hints that are described in chapter Prearrangement? So you ask the teachers for constraints before releasing a timetable and released an unofficial timetable first?
If you didn't care about that you have bad luck. Add the needed constraints and care about new constraints (see below). Don't forget to care about this hints this time!
If you care about that that hints you should inquire why you need to change the current timetable.
If a teacher forgot to tell you a constraint and you see that it's not necessary, I recommend to be stiff. Don't be to amiable and courteous. Don't add his constraint and don't generate a new timetable. I recommend that, because first of all be sure that you might get a new bug by solving another one. Especially because there are new constraints you currently don't know (see below). You will get a lot of trouble if you don't care about them! Secondly other teachers will also come later and ask for new constraints, but maybe you will not be able to care about them and/or you get new bugs by that. So if you care about a teacher who didn't care about you (You already asked him to tell you missing constraints and asked him to check the unofficial timetable!) you will just have a lot of work and a lot of trouble in the college. All other teachers just will be dissatisfied and some might think that you give special privileges to a few teachers. Only by being strict the other teacher will respect you deadlines in the future. Of course necessary constraints must be added.
Maybe you wonder why I am talking about new bugs,
because you followed my recommendation and set weight of all constraints to 100% and FET found a solution without any conflict.
But by this "only" the whole timetable is fair and conflict free.
Some teachers maybe don't view the whole timetable, they maybe just see their personal timetable and that might be not as good as before.
Example: The first time you added all constraints with 100% weight.
Then you added constraint max gap per week and reduced that value step by step.
FET was able to solve the timetable with max 5 gaps per week, but it wasn't able to solve it with 4 gaps per week.
So you released timetable with max 5 gaps per week.
Some days later you changed the running timetable (You added or changed some constraints).
Fortunately FET was still able so solve the timetable with max 5 gaps per week.
So the "whole" timetable is fair and you released it.
But some teachers might be angry, because they got in the old timetable only 1 or even 0 gaps by accident.
In the new timetable they have more (up to 5) gaps. So you see the problem?
Some guy might be angry, but adding a constraint with a lower max gaps per week to that teachers is not good,
because it's not fair to the other teachers and also the timetable will be much more difficult (or even impossible) to solve.
That is why I recommend to "Never change a running timetable" if it is not necessary.
If you have got a very difficult dataset and your timetable is already running maybe check if you can keep the current one even it is not perfect. Maybe you can move a few activities manually to fix a critical bug and keep that solution even it mean there will be some minor bugs.
If you must regenerate the timetable you must care about new constraints, not only the missing one! Some teachers get free periods or even whole days free (by accident). This teacher maybe already have some other (private) activities that you don't know! They might have consultation to a doctor, don't have a babysitter for their children, ... . So ask all teachers if they have compulsory free periods now. Add this constraints (as a rule A teacher is not available). Also add the missing constraint. Hopefully FET is still able to find a solution. If not you must think about increasing the number of max gaps or maybe also removing some constraints.
Mr. Coverwood | |||
---|---|---|---|
MON | TUE | WED | |
1 | 5a math |
5a math |
--- |
2 | --- | --- | --- |
3 | 6b math |
--- | --- |
4 | --- | --- | 5a math |
5 | --- | --- | --- |
6 | 7c math |
6b math |
--- |
In many schools it is not allowed that activities are omitted. There are many reasons why an activity might be omitted: A teacher is maybe ill, is on a school trip with his class, visit a further education, ... .
If impeded teachers must be represented by other teachers you might get big trouble if you add to "good" gap constraints, to many "min days per week" or to strict "min hours per day" constraints to teachers. The problem is that there might be not enough teachers to substitute that teachers. Of course the number of free periods to every teacher is still the same, but especially many teachers with free days mean that you need a very loyal college. That constraint increase chance that teachers must represent at their free day other teachers! So you might get trouble by that, mainly if you can inform that teachers only a few minutes or hours before he must represent an activity. The teacher is maybe not at home, because he do other things at his free day. So always check the "Teachers' Free Period" timetable before you release an (unofficial) timetable.
There are different teachers' free periods visible in the table.
In the “Less detailed” table are 5 different kinds of teachers' free periods: single gaps, boarder gaps, big gaps, must stay longer and must come earlier.
In the “detailed” table are also this kinds of teachers: must stay much longer, must come much earlier, free day and not available.
Mr. Coverwood | |||
---|---|---|---|
MON | TUE | WED | |
1 | 5a math |
5a math |
must come much earlier |
2 | single gap |
border gap |
must come much earlier |
3 | 6b math |
big gap |
must come earlier |
4 | border gap |
big gap |
5a math |
5 | border gap |
border gap |
must stay longer |
6 | 7c math |
6b math |
must stay much longer |
"must come earlier": The teacher must come 1 period earlier to school as normal. So it's imported to tell that teacher as early as possible that he must driver earlier as normal to school.
"must come much earlier": The teacher must come 2 or more periods earlier to school as normal. So it's imported to tell that teacher as early as possible that he must driver earlier as normal to school.
"must stay longer": The teacher must stay 1 period longer as normal.
"must stay much longer": The teacher must stay 2 or more period longer as normal.
Gap: The teacher must not come earlier and must not stay longer, because he already instructed students at that day and will instruct (other) students later that day.
"single gap": The teacher has an activity directly before AND directly after that free period.
"border gap": The teacher has an activity directly before OR directly after that free period. (So he has one gap directly before OR directly after that free period.)
"big gap": The teacher has a free period (gap) directly before AND directly after that gap.
Maybe you wonder why teachers that have a break are missing in this table. Pretty easy. If that period is a break, you will never need to substitute teachers of an activity, because all teachers have free at that time.
I recommend to check the "Less Detailed" table before you release a timetable.
Only if you have a very loyal college you maybe need to check only the "Detailed" table.
Fist of all you need to check every period of the week.
Have a look if there are enough teachers per period.
If you see a period with only one teacher it mean that you can substitute only one ill teacher at that period.
So if two teachers are ill at the some day you are not able to substitute both activities.
If there is an empty period, then you can't even substitute a single activity at that time.
If you need a substitution for an activity, you must choose a teacher in the "Teachers' Free Period" table. It's difficult to say which teacher you should use. I tried to order the teachers by a general rule. But in some cases it's better to choose another teacher first. Maybe it's better to choose a teacher that instruct the same group first. Maybe it's better to choose a teacher that instruct the same subject. Maybe it's better not to choose the first teacher, because he already instruct so many periods this day or week.
Maybe after some time you understand better this timetable and want to hide the descriptions in that timetable, because they just flood the timetable with unneeded information (because you are ale to differ the free periods by the different colours.). You can hide the descriptions by Hide Elements with css.
Your can use the "Less Detailed" table for daily work. Use the "Detailed" table only in emergency (because in the "Less Detailed" table are not enough teachers to substitute all teachers). Advanced Users should think about using a software that helps you planning substitutions. Good software also give you much more information, not only the explained points above. For example team teaching teachers could be used to do the substitution or similar stuff. Maybe have a look at TiTiTo or similar tools.
There is a simple print menu to print the timetables. Sadly the tables doesn't look perfect with it. The default tool to print a timetable is a web browser, not an office program (like LibreOffice Writer or Calc), because the timetables are saved in html format and the import filters of office tools are not very good at the moment. So you should open your working directory and print the saved html files.
Every web browser has different advantages. Some have nicer printed tables, some highlights the text faster, ... .
So please try at least 2 of this web browsers:
- Mozilla Firefox https://www.mozilla.org/firefox/
- Opera https://www.opera.com/
- Google Chrome https://www.google.com/chrome/
- Microsoft Edge https://www.microsoft.com/windows/microsoft-edge
In the easiest case you just have to open a timetable file with a web browser and print it by selecting File → Print.
A page-break is done after every table if you saved the html files at least with html level 2 (FET → settings → html level). But that doesn't mean that every table is on a single page! (compare next hint)
If a timetable doesn't fit on a single paper you can do three things:
- make the tables smaller (see below)
- make the paper larger (Reduce borders in the printer settings, crop the borders in the page settings of your web browser or use a larger printer.)
- maybe choose landscape format (in your printer settings)
You can make the tables smaller by:
- a web browser
- styling the html file with css
- editing the html file manually (not easy)
You can (maybe) reduce (and increase) the size of tables very easily with a web browser.
Sadly every web browser hide this feature at different places.
- Open the print preview of your web browser and check if you can toggle the scale.
- Go to something like File → Page Setup or File → Print → Options
and check if you can do something like Fit to Paper Width, Shrink to Fit Page Width,
proper size automatically or choose another scale.
You can reduce (and increase) the size of tables easily with css by:
- reducing font size
- collapse borders
- hide elements (maybe hide caption, activity tags, rooms, table foot, ...)
You can reduce the size of tables with html by:
- removing unneeded columns or rows
There are two different ways to print multiple table on a single page:
- by css
- by printer driver
If you have enough space to print always two timetables on a single page then you need a page-break
after every second table.
Open the css file with an editor. You can see in the beginning the following lines:
table {
page-break-before: always;
text-align: center;
}
table.modulo2 {
}
Just remove the declaration page-break-before: always;
from selector table
and paste it into selector table.modulo2
. So it should look like this:
table {
text-align: center;
}
table.modulo2 {
page-break-before: always;
}
Check the print preview. Check every single page! The size of tables is not always the same. So there are maybe 2 larger tables that doesn't fit on a single page. Read *** to understand how solve that problem.
I recommend to check the print preview of your web browser first. There shouldn't be much free space on a page. So one or two timetables should use nearly the whole page. Now check if your web browser or printer support to print several pages on a single sheet. Have a look if you can set something like that in File → Print → Properties or in File → Page Setup. If your printer doesn't support printing several sheets an a single sheet you can check if your pdf print driver support that. So print (save) into a pdf file first and print that pdf file.
css means cascade style sheet. This is the easiest way to style the timetables. For example you can change colour and font size or hide elements. Your timetables must be saved with html level 5 to get access to all features (FET → settings → html level).
Edit a css file with an editor. Don't do that with an office software. Linux user can use one of the enclosed editors (Kate, Kwrite, ...) Windows user can work with notepad++.
Open the css file. The file is in the same directory as the html files. If you have a good editor you should see that the css text is displayed in different colours. That syntax highlighting is done automatically by your editor and it will help you reading and searching bugs.
First of all you can see lines that start with /*
and end with /*
like this:
/* CSS Stylesheet of german_sample.fet
Stylesheet generated with FET 5.4.18 */
That is a comment. This text is just to you. The web browser don't read that lines.
Second of all you can see many statements like this:
table {
page-break-before: always;
text-align: center;
}
table.modulo2 {
}
Here are two statements. A statement start with a selector, followed by opening curly brace, maybe a declaration and a closing curly brace.
In this example the selector table
has a declaration.
But the selector table.modulo2
hasn't a declaration.
If you already know html, you will remark that the name of selectors are similar
to html element names or classes, because this selectors will affect that elements.
If you don't know html, you will need to understand what this statement affect in the html file.
You can check it pretty easy. Just write color: red;
into ONE declaration.
So it should look like this:
table {
page-break-before: always;
text-align: center;
color: red;
}
table.modulo2 {
}
Save the css file and reload the html file. As you already imagine tables are coloured red in the html document now.
Remove color: red;
out of the declaration of the css file and paste it in the next declaration.
Save the css file again and reload the html file again.declaration
You will see that only every second table is red now.
Repeat this until with (all) other selectors until you understand the affect of all selectors.
You already know how to colour an element.
You can also set a background colour by backgound-color
. Just do it like this:
td.teacher, div.teacher {
background-color: gray;
color: blue;
}
If you add this lines into the selector td.teacher, div.teacher
then all teacher names are written with blue colour on gray background.
Css know this colours: black, gray, silver, white, purple, fuchsia, maroon, red, olive, yellow, green, lime, navy, blue, teal, aqua and orange.
A nice feature to reduce the size of tables is to hide some elements.
For example to hide all activity tags just write display:none;
into selector span.activitytag
.
So it should look like this:
span.activitytag {
display:none;
}
You can change the caption of the table. Of course all styles you learned to far are possible, but there are also X special ones: You can set the caption at XXX
The tables might be a bit too big for the paper. You can save a bit space by collapsing the table borders. So instead of 2 lines at the border you will get only 1 lies at the border.
Search the following lines and add border-collapse: collapse;:
table {
text-align: center;
page-break-inside: avoid;
}
So it should look like this:
table {
text-align: center;
page-break-inside: avoid;
border-collapse: collapse;
}
The html-files use the default font of your webbrowser. You can change the fontsize and fontstyle. xxxx
The height or width of a single cell is not always the same. Hight and width are calculated automatically. By default it tries to use less space, because large tables should fit on a single page. You can set a minimum height and width. The best place do do it are the already existing th.xAxis and th.yAxis in the CSS file. Modify them so That they look for example like this:
th.xAxis {
width: 8em;
}
th.yAxis {
height: 8ex;
}
If you edit the css file it might happen that you do some mistakes. To avoid and find bugs turn on syntax highlighting of you editor and check the css file with a css validator. ( for example https://jigsaw.w3.org/css-validator/ )
There are a lot of settings in the menu. Most of them should be self-explanatory. Only the random seed might be blurry for some users. Maybe checkout the video "Let's check the FET settings!". It is more detailed about different look of timetables, but on the other hand this manual gives you more information about the random seed.
"Search for updates on startup" is a nice feature. Enable it and FET will always point out to newer versions on startup.
"Language" allows you to change the language to your preferred one.
I recommend to create 2 folders.
The folder with your fet files and the folder with the fet results.
Setup the fet results folder by the option "Select output directory" in the settings.
The results will be written into that folder as soon as you generate a timetable.
There will be a folder with the generated file name.
In this folder will be a lot of files. Most of them are HTML files and they will be opened by your web browser as soon as you click on them.
You can check them all separately, but it might be easier if you open the "index".
This will give you a tidy overview about most files in this folder.
The soft conflicts list will show broken constraints if you use weights with less then 100%.
The students and teachers statistics give you information about the generated timetable.
Check these statistics after you generated the timetable. It will helps you to find bugs.
You might notice that you won't need all that files in the fet-results folder. So it might be recommended to disable some of them in the settings. You will save disk space and the folder won't look too crowded.
Another interesting setting is the HTML level of generated timetables.
Many users will only need level 2. If you design the timetables yourself with CSS you might need a higher level.
There are 2 other nice levels:
Level 5 add a small javascript program into the HTML files. If you generate that timetables you will have a nice feature.
As soon as the mouse is over a name all similar names will be highlighted. This might helps you too read the timetable.
If you need a similar feature on paper you might choose HTML level 7. The tables will be pretty colourful with that.
"Print detailed timetables" means that there might be printed more than just one activity into a single time slot. All slots with more than one activity will be replaced by three question marks if you disable this feature.
The teachers' free timetables contain very much information. You can use this table if you need substitution for other teachers. Normally less information is still fine. If you disabled that feature the not available teachers, teachers with free days and teachers that need to stay much longer or need to come much early won't be printed.
The "print activity tags" is needed by the timetable maker. He can find bugs easier if he can see the tags. The other teachers normally never need to see the tags; the timetables become too large and teachers and students are confused.
You can mark not available times and breaks. This might helps you to understand bugs.
Divide the HTML timetables with time-axis per day is a nice feature if you print large tables. You will notice that printing those tables don't fit on a single page if you print that tables. The trick is to split those tables with this feature.
Duplicating names on the right might help reading the tables if you have got large tables. But don't forget the small disadvantage: The timetables grow a bit and might not fit on a single page.
"Print activities with same starting times" will of course print activities with a same starting time constraint into the same slot.
You can enable or disable following stuff in the interface:
You can care about the random seed and you can enable some special constraints and warnings here.
As you know timetabling is pretty difficult. If you want to do a timetable you will start of course and place the activity with fixed times.
But how to go on next. You need to select the most difficult activity (View initial order of the placing the activities while generating a single new timetable).
But where so you want to place it? Monday the 1sh hour? Friday the last hour? Or somewhere else?
That decision is done by a random generator.
In fact a "real" random generator isn't available on the most computer systems.
"Random" generators are in fact not random on computers, in fact there are calculated by an algorithm.
It is not easy to code a good random generator.
The FET random generator need to number (seeds) as input for the algorithm.
If you restart generating a timetable (with exactly the same dataset) with the same seed then the same "random" numbers will be calculated and you will get exactly the same final table.
In normal case that is not good, since:
The last point doesn't sound like a disadvantage in the first moment.
But as you know generating a timetable might take many hours or days if you start "wrong".
So in worst case you always need to wait many days to get a final result.
That is of course not practically.
You might never get a fast result, even you might nearly always get a fast result if you just start planing the first activity in another slot.
That is why the random set is set always different as soon as you start FET. (It simply use the system time to set the seed).
In normal case you will never need to change the seed.
But you might have noticed that the seed is saved in the html-results folder.
Generating the exact same timetable is pretty helpful if we (the developers) get a bug report, since we can exactly reconstruct the problem.
Help is always needed. You can find hints and warnings not only in this manual.
Please also read the help text in FET itself.
You can also check out my YouTube channel and the FET Forum.
But also we need help.
So please tell us mistakes, nice examples or other suggestions.
Help other guys in the forum, help coding, do translations or think about donating.
Yours
Volker Dirr
There are a few videos hosted on YouTube:
You can import data by CSV (comma separated values) files. This files support only a few basic data. You can't import an export a whole dataset with it. You still need the fet (xml) file to do that. But by the CSV files you will be able to do an easy import and export of some basic stuff. I recommend to export a fet sample file to get a better overview about it.
If you import activities it will automatically add unknown subjects, teachers and activity tags. But it can't automatically add students, since FET need to know the students structure. So you need to import (or setup) the students before importing activities.
The default used filed separator is "," and the default used text quote is """. I recommend to keep this values. I also recommend to keep the default header file, since the import will be easier with that. In fact the csv files can have other separators and text quotes. Even the number of fields and the order of the filed can be different. But in that case you always need to setup the correct setting as soon as you import such an unknown file format.
Save the csv files with UTF-8 coding.
There is one special separator for some fields. If you use "+" it will separate a filed. You are able to add 2 teachers into a single activity by writing "Jan+Tina". So please avoid sign "+" in teacher names, students names and activity tag names!
Checkout video "How to add activities by CSV?" to get more information.
Let's have a look at the header and 3 examples:
"Year","Number of Students per Year","Group","Number of Students per Group","Subgroup","Number of Students per Subgroup"
"5",0,,,,
"5",0,"5a",0,,
"5",0,"5a",0,"5aMF",0
Don't use sign "+" in the name, since this will be misinterpreted as separator of names if you import activities.
Please read "Example 3" in Years, groups and subgroups to get more detailed examples.
Let's have a look at the header and 1 example:
"Teacher"
"Agnes"
Don't use sign "+" in the name, since this will be misinterpreted as separator of names if you import activities.
Let's have a look at the header and 1 example:
"Subject"
"D"
Let's have a look at the header and 1 example:
"Activity Tag"
"late"
Don't use sign "+" in the name, since this will be misinterpreted as separator of names if you import activities.
Let's have a look at the header and 1 example:
"Room","Room Capacity","Building"
"001",1000,""
Let's have a look at the header and 3 examples:
"Students Sets","Subject","Teachers","Activity Tags","Total Duration","Split Duration","Min Days","Weight","Consecutive"
"5a","M","Tanja",,4,"1+1+1+1",1,100,1
"5a","D","Jan",,4,,1,100,1
"5a","E","Max+Moritz",,,"2+1+1",1,100,1
Field | Header | Type | Comment |
---|---|---|---|
1 | Students Sets | String |
Can be empty Can contain year, groups and subgroups name or names (separated by +) |
2 | Subject | String | Must contain a subject name |
3 | Teachers | String |
Can be empty Can contain teacher name or names (separated by +) |
4 | Activity Tags | String |
Can be empty Can contain activity tag name or names (separated by +) |
5 | Total Duration | Integer |
Can be empty if field 6 is not empty Should contain total number of hours per week |
6 | Split Duration | String |
Can be empty if field 5 is not empty If field 5 is not empty the sum must be equal to field 5 Should contain duration of sub-activities separated by + If it is empty it will be interpreted as a sequence of 1s Example: It will be "1+1+1+1" if field 5 has got value 4 |
7 | Min Days | Integer |
Can be empty Set the value of constraint min days to this activity |
8 | Weight | Double |
Can be empty Set the weight of constraint min days to this activity Must be >=0 and <=100 |
9 | Consecutive | String/Boolean |
Can be empty Set the consecutive flag of constraint min days to this activity Allowed values are: yes, y, true, t, 1, no, n, false, f, 0 |
You can export this file only. You can't import such a csv file.
Let's have a look at the header and 1 example:
"Students Sets","Subject","Teachers","Total Duration"
"10a","Chemistry","Jana","2"
You can export this file only. You can't import such a csv file.
Let's have a look at the header and 2 examples:
"Activity Id","Day","Hour","Students Sets","Subject","Teachers","Activity Tags","Room","Comments"
"69","Wednesday","5","5a","Biology","Anita","","403",""
"199","Monday","5","6a","Sports","Stacy","1,3,5","H3",""
"199","Monday","6","6a","Sports","Stacy","1,3,5","H3",""
You maybe wonder that I wrote 2 examples and it look like 3 examples. Please notice that activities with duration larger than 1 will be split into several lines. So if you have got an activity sport with duration 2 it will be split into 2 lines.