Hello,
I'm posting these questions here because they relate to my specific situation, and this thread seems like the most appropriate place for them, but please feel free to move this post if necessary.
I'm currently using FET (official version) to generate a schedule with approximately 4,000 activities, approximately 100 teachers, 3 academic years with 6 student groups each and 2 subgroups per group (for a total of 36 subgroups), over 16 academic weeks of 7 days each (112 days total) with 7 time slots per day.
I imported my 4,000 activities via CSV, then began entering my constraints one by one (and I'm entering them teacher by teacher to ensure that the overall schedule makes sense).
Just entering a "teacher's unavailable time" constraint into the FET interface takes a long time given the 112 days per week, so entering all the constraints is very tedious.
I'm therefore considering copying and pasting directly into the FET file, using the constraints I've already entered as a template.
My first question is this:
Are there any forum threads that explain what you need to know about directly importing into the FET XML file? I'm particularly wondering about the correct places to put specific constraints, since simply placing them one after another at the end of the existing file probably doesn't work.
I also have a completely different question about the accumulation of constraints.
Given the large number of constraints, I use a strategy based on constraint priority levels to maintain control and clarity. So for each constraint, I've added a comment such as "level 1," "level 2," and so on, and I start the generation process by enabling only the "level 1" constraints; then, if that works, I add the "level 2" constraints, and so on.
Not all of my teachers have constraints at multiple levels, so it's easier for me to enable "level 2" constraints without disabling the "level 1" ones.
This means that for a single set of activities, I might have, for example, "min days between a set of activities=7" with a weight of 90% ("level 1") and "min days between a set of activities = 7" with a weight of 95% ("level 2"), and "min days between a set of activities = 7" with a weight of 99% ("level 3").
Or, again for the same set of activities, "a set of activities has a set of preferred time slots" with a weight of 99% ("level 1") for a certain range of time slots and "a set of activities has a set of preferred time slots" with a weight of 95% ("level 2") for a certain, more restricted range of time slots, and again "a set of activities has a set of preferred time slots" with a weight of 90% ("level 3") for a certain, even more restricted range of time slots (I assigned decreasing weights so that the combination of these constraints would be logically consistent).
Are such somewhat redundant constraints problematic? Do they take a long time to generate?
Thanks for reading all the way to the end :).
Hello, Anthony!
The board for this post is correct.
1) Please open the fet file with an XML editor or text editor. Search for <Time_Constraints_List> and </Time_Constraints_List>. Between these two are the time constraints, such as: <ConstraintTeacherNotAvailableTimes> ... </ConstraintTeacherNotAvailableTimes>. Please see an example of how this constraint is written in XML. Just add new constraints in this section, anywhere, but not inside an existing constraint.
2) Min days between activities constraints accumulate weight (the weight is stronger on two or more constraints for the same activities). You need to enable level 1, XOR level 2, XOR level 3, not two or more simultaneously. The reason for accumulation is that FET checks each constraint in turn.
You can activate/deactivate all constraints of a level with an advanced filter for comments, select all of them, and click activate/deactivate.
Activities preferred times constraints: for each activity, each cell of a table n_days x n_hours takes the maximum of each constraint as the final weight of not allowed, and FET only checks once the constraint for each activity.
You're welcome! :)
Hello Liviu,
Thank you for your answers and your prompt response. :D
Quote from: Liviu Lalescu on July 12, 2026, 05:38:23 PMHello, Anthony!
The board for this post is correct.
1) Please open the fet file with an XML editor or text editor. Search for <Time_Constraints_List> and </Time_Constraints_List>. Between these two are the time constraints, such as: <ConstraintTeacherNotAvailableTimes> ... </ConstraintTeacherNotAvailableTimes>. Please see an example of how this constraint is written in XML. Just add new constraints in this section, anywhere, but not inside an existing constraint.
I used VScode for the xml files, no pb, I'm just surprise about the "anywhere" but ok.
Quote from: Liviu Lalescu on July 12, 2026, 05:38:23 PM2) Min days between activities constraints accumulate weight (the weight is stronger on two or more constraints for the same activities). You need to enable level 1, XOR level 2, XOR level 3, not two or more simultaneously. The reason for accumulation is that FET checks each constraint in turn.
Does this mean that doing this (which is what I've been doing so far) distorts the intended meaning of the constraints, or does it "only" increase the computation time for the FET generator?
Quote from: Liviu Lalescu on July 12, 2026, 05:38:23 PMYou can activate/deactivate all constraints of a level with an advanced filter for comments, select all of them, and click activate/deactivate.
I know it's possible to filter by the items in the comments, but I now need to distinguish between "level 1" constraints that must remain (since they have no "level 2" equivalents) and "level 1" constraints that need to be disabled (since they are followed by "level 2" equivalents). Need to look into this further.
Quote from: Liviu Lalescu on July 12, 2026, 05:38:23 PMActivities preferred times constraints: for each activity, each cell of a table n_days x n_hours takes the maximum of each constraint as the final weight of not allowed, and FET only checks once the constraint for each activity.
If I understand correctly, it's therefore not a problem to have "multiple versions" of such constraints active simultaneously—is that right?
And does that mean my idea of using decreasing weights for increasingly smaller time ranges is correct after all?
Thanks,
Quote from: GEA_user on July 13, 2026, 02:04:20 PMI used VScode for the xml files, no pb, I'm just surprise about the "anywhere" but ok.
The constraints can be ordered in any way. You can order even in the FET GUI, with Up/Down.
QuoteDoes this mean that doing this (which is what I've been doing so far) distorts the intended meaning of the constraints, or does it "only" increase the computation time for the FET generator?
A1, A2, A3 min 1 days between them, two constraints with 95% and respectively 97%, it is equivalent with 1 - (5% x 3%) = 99.85%, which is very hard to break.
QuoteIf I understand correctly, it's therefore not a problem to have "multiple versions" of such constraints active simultaneously—is that right?
And does that mean my idea of using decreasing weights for increasingly smaller time ranges is correct after all?
You can have multiple preferred times without problems like min days between activities, but I am not sure about your way about your approach with decreasing weights for smaller time ranges.
Hello,
Your explanation of FET's internal mechanism regarding "min days between a set of activities" is very clear; I'll definitely need to improve my strategy for activating/deactivating "level 1", "level 2," ...
I'll illustrate my point about "a set of activities has a set of preferred time slots" with an example:
If "Teacher 1" is scheduled to have 3 activities per week and tells me their preferences for time slots—for example, Monday afternoons from H4 to H6, as well as Tuesday mornings from H1 to H3 and all day Wednesday (H1 to H3 and H4 to H6, with the remaining hour being the lunch break P)—
He also tells me that he would prefer Tuesday morning first (as choice 1), and if that's not possible, Monday afternoon (as choice 2), and finally, if there's really no other option, Wednesday (as choice 3).
So I create the following constraints "a set of activities has a set of preferred time slots" (without specifying any particular activities, but for "teacher 1"):
First, at "level 1": I set Monday afternoon, Tuesday morning, and Wednesday with a high weight of 99%;
then, at "level 2": I set Monday afternoon and Tuesday morning, but with a lower weight of 95% because this is more difficult;
finally, at "level 3": I set only Tuesday morning, but with a weight of 90% because this is even more difficult.
But maybe my strategy is wrong?
Hello,
Activity preferred times adds X (not available) with any weight. The largest value for each slot wins. So, you will come out with: 99% denied in all slots without Mon aft, Tue mor, and Wed; 95% denied on Wed, and 90% denied on Mon aft. Yes, it is a good strategy.
Maybe another method, please think and try a bit: activities occupy min time slots from selection, for all activities of that teacher. Unfortunately, only 100% allowed, but it instructs FET which slots should be occupied with activities of this teacher.
Or maybe combine the above approaches.
I tend to prefer only 100% constraints, because those 99%, 95%, and 90% must be broken to produce a timetable, and might waste time. My only "allowed" <100% is for min days. I admit I don't like especially preferred times with <100%.