Main Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - Volker Dirr

I guess you still allowed too many hours in StElTo, so it will be impossible in FET.
Please download the new StElTo version. I added in the hours tab a information that calculates the number of hours. You need to allow at least so many hours also in FET. It won't work if you set a lower number of hours in FET.
In normal case FET solves such a table in less then 1 second.
You can attach you latest file here or send me by email if you can't find the bug.
Well, you can place lines like you want. For example line 1 Monday 1st hour. Line 2 Monday 2nd hour, ...
But i recommend to import the data into FET and place it with FET, since it can care about a lot of constraints, like max gaps per week, free days, min and max hours, ...
Especially if you do it for many years.
Thank you! I fixed the bug that I found with your sample set and i also added some new other stuff.
Get the latest version here:
I released a new StElTo version.

You can download the new version here:
Windows 10 or higher:
MacOS 14 or higher for M1, M2, M3:
MacOS 11 or higher for Intel (or ARM):
Linux 64bit:

Get example files here:

Read a short manual:

StElTo changelog:

0.0.1: Main Menu
0.0.2: Prepare languarges
0.0.3: Check for updates
0.0.4: Setup proxy
0.0.5: Setup SQL
0.0.6: Setup basic help menu
0.0.7: Organise internal data
0.0.8: Read basic infromation from kurs42 csv files
0.0.9: Check for incorrect data and minmum lines

0.1.0: Implementing basic algorithm
0.1.1: Algorithm cares about courses
0.1.2: Algorithm cares about students
0.1.3: Algorithm cares about max students
0.1.4: Algorithm cares about min students
0.1.5: Algorithm cares about max higher than the average
0.1.6: Algorithm cares about max lower than the average
0.1.7: It's possible to change the seed

0.2.0: Report added: List of courses (sorted by line)
0.2.1: Report added: List of courses (sorted by subject)
0.2.2: Report added: List of students (sorted by course)
0.2.3: Report added: List of students (sorted by students)
0.2.4: Some more minor statistics added
0.2.5: Some more rare warnings added

0.3.0: Import basic LuPO files
0.3.1: Courses tab added
0.3.2: Subjects tab added
0.3.3: Subjects tab can create new courses
0.3.4: Subjects tab warn about minimum and maximum students
0.3.5: Import tab added. Now it's possible to import different datasets into the SQL database.

0.4.0: Algorithm restarts automatically (in fact there is a bug in my algorithm; i don't know a better solution how to fix it at the moment)
0.4.1: Algorithm cares about maximum of same subjects per line
0.4.2: Algorithm cares about same starting time
0.4.3: Algorithm warns about impossible same starting times (similar teacher)
0.4.4: Algorithm cares about individual maximum of same subjects per line
0.4.5: Algorithm speedup if using maximum of same subjects per line

0.5.0: Algorithm cares about different hours. By default different number of hours will be in different lines.
0.5.1: Max number of lines can be set for each number of hours
0.5.2: New warning about min number of lines (beacuse of students vote)
0.5.3: Subjects with special number of hours can be placed into lines with different number of hours (so mimic the old algorihtm before 0.5.0)
0.5.4: Warning about similar subjects with different number of hours if they might share the same line
0.5.5: Automatic prefix and suffix can be added if you create courses
0.5.6: Improved sorting of results
0.5.7: Changing number of target courses can be done for each subjects manually

0.6.0: It's possible to limit a max number of conflicts (students don't get a course)
0.6.1: Report added: List of conflicts
0.6.2: Report added: List of teachers
0.6.3: Improved import of Kurs42 files (import Schueler.txt)
0.6.4: Votes tab added
0.6.5: Subjects tab and planning tab is seperated
0.6.6: Improved Kurs42 import (care about "LK" and "GK")

0.7.0: Algorithm care about fixed lines of courses
0.7.1: Number of Students (max, min and difference from average) can be modified in hours tab
0.7.2: Number of Students (max, min and difference from average) can be modified in planning tab
0.7.3: Number of Students (max and min) can be modified in courses tab
0.7.4: Improved warnings
0.7.5: It's possible to add or remove votes in the votes tab
0.7.6: It's possible to add comments to datasets
0.7.7: Improved impossible counter

0.8.0: It's possible to enable/disable teachers
0.8.1: It's possible to change the teacher name in the courses tab
0.8.2: Algorithm care about rooms
0.8.3: It's possible to enable/disable rooms
0.8.4: It's possible to change the room name in the courses tab
0.8.5: Benchmarks are available (run x times with reduced output; just to measure speed)
0.8.6: Speedup algorithm
0.8.7: Improved checks, reports and warnings (mainly about rooms)

0.9.0: Algorithm care about subjects that occupy 2 lines
0.9.1: Improved checks, reports and warnings (mainly about occuly 2 lines)
0.9.2: Courses that occupy a second line can also setup a fixed line
0.9.3: Same starting time also works with subjects that occupy 2 lines
0.9.4: It's possible to change the number of hours in the hours tab
0.9.5: Import of Kurs42 improved (Imports Kursbelegung.txt)
0.9.6: Algorithm can care about preferred courses
0.9.7: Interface to change preferred courses
0.9.8: Removed gcc 6.3 compiler warnings

1.0.0: It's possible to limit a max number of conflicts (students doesn't get a desired course)
1.0.1: Report about students that don't get a desired course
1.0.2: Import of Kurs42 improved (Imports Blockplan.txt)
1.0.3: Import of Kurs42 improved (Imports Blockung.txt)
1.0.4: Ask for year (form) name if it is not available
1.0.5: Import year (form) name
1.0.6: Improved checks and reports and warnings

1.1.0: Export students.csv (FET)
1.1.1: Export activities.csv (FET)
1.1.2: Export Blockplan.txt (Kurs42)
1.1.3: Export Kursbelegung.txt (Kurs42)
1.1.4: Export Schienen.txt (Kurs42)
1.1.5: Export Kurse.txt (Kurs42)
1.1.6: Export Fachwahlen.txt (Kurs42)

1.2.0: Import of LuPO supports tags
1.2.1: Import of Kurs42 supports tags
1.2.2: Import of FET supports tags
1.2.3: Tags will coulor the votes tab
1.2.4: Tags can be changed in the special tab
1.2.5: Report course spread
1.2.6: Source cleanups

1.3.0: Speed improvement for data sets with fixed lines
1.3.1: Warn if teachers, rooms or students have got the same fixed line
1.3.2: Improved abort reaction (but still not perfect)
1.3.3: Speed improvement for data sets with min or max students in a course
1.3.4: Speed improvement for data sets with max subject per line
1.3.5: Removed gcc 7.4.0 warnings
1.3.6: Removed cppcheck 1.88 warnings

1.4.0: Export Courses.csv files (StElTo)
1.4.1: Export Elections.csv files (StElTo)
1.4.2: Export Hours.csv files (StElTo)
1.4.3: Export Students.csv files (StElTo)
1.4.4: Export Subjects.csv files (StElTo)
1.4.5: Import Courses.csv files (StElTo)
1.4.6: Import Elections.csv files (StElTo)
1.4.7: Import Hours.csv files (StElTo)
1.4.8: Import Students.csv files (StElTo)
1.4.9: Import Subjects.csv files (StElTo)

1.5.0: Warn if teachers, students or rooms have got the same line
1.5.1: Speed improvement for data sets with same lines
1.5.2: Warn if the course size is too small
1.5.3: It's possible to delete and dublicate a dataset
1.5.4: It's possible to delete, modify and add a student
1.5.5: It's possible to delete, modify and add a subject
1.5.6: Dataset will be checked regularly for dublicates
1.5.7: Added a (sadly incomplete) manual in the home directory

1.6.0: Subjects can force desired courses
1.6.1: Improved checks for empty names
1.6.2: Improved GUI
1.6.3: Prepared source for translation
1.6.4: Students won't get subject with different number of hours if they share the same line
1.6.5: Care about their own number of lines if courses share lines with other hours
1.6.6: Updated the manual
1.6.7: Added a delete all courses push button

1.7.0: Datasets with subject conflicts generate faster than previous release
1.7.1: Tags tab added. Tags can force desired courses now
1.7.2: It's possible to delete, modify and add a tag
1.7.3: It's possible to enable/disable the export
1.7.4: Hours export of Kurs42 files can be modified
1.7.5: Updated the manual

1.8.0: Export lists of conflicts text files (StElTo)
1.8.1: Export list of lines text file (StElTo)
1.8.2: Export list of spread text file (StElTo)
1.8.3: Export lists of courses text files (StElTo)
1.8.4: Export lists of students text files (StElTo)
1.8.5: Export list of teacher text file (StElTo)
1.8.6: Export list of room text file (StElTo)
1.8.7: Export list of checks text file (StElTo)
1.8.8: Export list of conflicts text file (StElTo)

1.9.0 Example generator can generate random names
1.9.1 Example generator can generate compulsory subjects
1.9.2 Example generator can generate strict compulsory optional subjects
1.9.3 Example generator can generate loose compulsory optional subjects
1.9.4 Example generator can generate extra optional subjects
1.9.5 Example generator can generate more realistic votes (not all subjects are popular)
1.9.6 Small speed improvements

2.0.0 Algorithm care about students that are not allowed to be placed into the same course
2.0.1 Small speed improvements
2.0.2 Updated to Qt 5.12.8
2.0.3 Removed gcc 9.3.0 warings
2.0.4 Removed cppcheck 2.0 warnings
2.0.5 Removed Java-Style Iterators
2.0.6 Removed ::fromSet

2.1.0: Seed is by default not static at startup
2.1.1: Updated the manual
2.1.2: bugfix: load random names doesn't work with windows
2.1.3: source clean up: use forward declararion in header files
2.1.4: Export Schueler.txt (Kurs42) (not complete, since some data is missing)
2.1.5: Updated to Qt 5.15.2
2.1.6: removed infer 1.1.0 warnings
2.1.7: added a new icon with higher resolution

2.2.0: Updated to Qt 6.5.0
2.2.1: Removed gcc 11.3.0 warnings
2.2.2: Fixed bug report if you import incorrect StElTo.csv files
2.2.3: added Windows batch files to start with an other style
2.2.4: Replaced size() and move() to geometry(). This avoids problems, if the (virtual)-screen is changed
2.2.5: increased minimum size for a dialog
2.2.6: improved dark mode
2.2.7: updated to Qt 6.5.3 (fixed scroll bar for RTL users)
2.2.8: use std::as_const instead of qAsConst
2.2.9: source clean up: use QFileDevice::NoError

2.3.0: MacOS and Linux versions are available now
2.3.1: It's possible to select an other export directory
2.3.2: Import GPU015.txt files from gp-Untis (Beta only at the moment. Must be improved.)
2.3.3: critical bugfix while importing csv files
2.3.4: it's possible to remove hours
2.3.5: removed gcc 13.2.0 warnings
2.3.6: It's possible to set the max number of courses in a line
2.3.7: Improved csv import and export
2.3.8: Displays the needed total number of hours per week of a timetable
German / Deutsch / Re: Tipps zur Fehlersuche
July 13, 2024, 09:59:27 AM
Dann sind vermutlich mehrere unmögliche Dinge im Datensatz.
Kann man so schlecht allgemein sagen. Mir am besten einmal die aktuellen Daten zuschicken.
Entweder hier im Forum anhängen oder mir oder Liviu per E-Mail zuschicken. (Meine E-Mail: siehe

Das R hänge ich mal an. Danke.
Please view your "hours" tab.
Currently you have:
3 lines with 7 hours ( = 3*7 = 21 )
7 line with 1 hour ( = 7*1 = 7 )
4 lines with 4 hours ( = 4*4 = 16 )
2 lines with 2 hours ( = 2*2 = 4 )

Sadly you tried to place the hours with 2 hours into the slots with 1 hour. That is impossible. I should check this better and warn the user about this.
Please set always in "Place into" the same value as in "Hours" (Or, if you want to share the slots, place the hours with value 1 into 2. (So not like you done it, placing the 2 into 1. That doesn't fit))

So currently you need in worst case in FET 21 + 7 + 16 + 4 = 48 hours per week (~10 hours per day).

But you can reduce the "max lines" values and it is still solve able.
Reduce it to this:
2 lines with 7 hours ( = 2*7 = 14 )
1* line with 1 hour ( = 1*1 = 1 ) In fact you don't have a vote with 1 hour, so this will be empty
4 lines with 4 hours ( = 4*4 = 16 )
4 lines with 2 hours ( = 2*2 = 8 )

So you need in worst case in FET 14 + (+-1) + 16 + 8 = 38 hours per week (~8 hours per day).

You can also decrease the values for "Max Lower" and "Max Higher" with your current data set. You can reduce them nearly all to 0. Only for the hours with value 2 it look like you need value 1.
Thank you. I found a critical bug while importing the csv files.
Did you write the csv files yourself OR did you modify them?
If not, I need to hunt one more critical bug.

Can you please attach the database? see StElTo -> Settings -> Database -> SQLite (There is the file name and location of the data base. Probably database.dat in your StElTo directory)
You should set the number of lines as low as possible.
I will read your file after lunch.
How many lines did you allow in StElTo?
I guess you allowed too many lines there.
Can you also please attach the StElTo database?
A bit difficult to explain.
Have a look at this timetable:

A line contains at least one (bot normally more) hours in the timetable. In a line the students have a selected subject. It doesn't matter where the line is (so the day and hour doesn't matter). You can place the lines manually or by FET later.
You can also translate line a little bit like "an hour of a chosen subject of the student". Each line contains a chosen subject/activity of an student.
Maybe just download it and try an example (you can download an example or generate an example in the example generator)

"hours" are "only" needed if you want to place the "timetable".
If you only want to know if your data set is solve able, then you need to know the lines only.
As soon as i generate a data set with StElTo, it will tell you something like:
In line 1 is student A with subject S1 and student B with subject S2 and ...
In line 2 is student A with subject S3 and student B with subject S3 and ...
You you know that each student can have the selected subject.
Just try it.
If you don't get the difference between "hour" and "line" yet, then just place "1" and hour. In that case "hour" and "line" is the same.
Tips and Tricks / Re: ChatGpt & Fet
July 08, 2024, 10:25:19 AM
You mean for the algorithm? No.
Or do you mean ChatGPT should help to use the FET (So the GUI, interface, how to add constraints, ...)? I didn't tried. If ChatGPT read the manual and the forum (that might be done) it might have learned how to use FET. I didn't tried it. But i am sure you will get better support by the forum and not by ChatGPT. Maybe try it and report your results.
General Stuff / Re: Anable splite
July 04, 2024, 01:43:43 PM
About your first post:
Instead of deleting you can do this trick:
Just set an sub(activity) to "inactive". (Yes, this trick works only if you want to decrease. It doesn't work if you want to increase).

I don't understand your second post. Can you please explain more detailed?
Let's assume you have got an activity split into 1+1+1+1.
So there are 4 sub activities.
If you add a constraint with "component number 1", then this constraint will only affect the first sub activity, but not the 3 other ones.

About the second question: If you have only activities with duration 1, then there is no difference.
If you have activities with duration 2, then there is a difference.

For example: You allow only the first hour. All other hours are not allowed.
If you do that with "preferred time slots", then it is impossible to place an activity with duration 2.
If you do the same with "preferred starting times", then it is allowed to place activities with duration 2 (or more) in the first hour.
use an activity that is split into 2+2+1+1 with 100% weight.
Then there are a lof of different preferred time constraint possible.
Impossible to say witch one is the "best" in your case, since I don't know your data set.
maybe us constraint prefered time slots for subactivities with duration 2.