dimanche 27 février 2005.
Cette FAQ est en cours de traduction. L’original (en anglais) est disponible dans le répertoire doc des sources de FET.
Q : Quelle est la structure des données en entrée de FET ?
R : Etudiants - organisés en ensembles (des promotions, contenant des groupes, contenant des sous-groupes)
Enseignants
Matières ( nom des enseignements dispensés, par exemple Maths, physique, etc...)
Activités : l’association d’un ou plusieurs enseignants, d’une matière et d’un ou plusieurs ensembles d’étudiants. Ceci correspond aux cours, travaux dirigés, travaux pratiques ...
Contraintes : elles peuvent être de deux types soit temporelles (liées au jour ou à l’heure devant être alloués), soit de salles (liées à l’allocation de salles particulières). Elles peuvent également être obligatoires ou non.
ConstraintBasicCompulsoryTime et ConstraintBasicCompulsorySpace sont deux contraintes implicites pour tous les emplois du temps. Elles sont ajoutées automatiquement. Autre contrainte ajoutée automatiquement, ConstraintActivityPreferredTime, quand une nouvelle activité est insérée.
Chaque contrainte a un poids, les contraintes implicites ont la valeur par défaut de 1.0. Vous pouvez modifier le poids des autres contraintes, et vous êtes encouragés à jouer sur ces valeurs. Comment calculer le facteur de conflit d’une contrainte ? Simplement, c’est le nombre de conflits, multiplié par 1 pour les activités bihebdomadaires et par 2 pour les activités hebdomadaires, le tout multiplié par le poids de la contrainte.
PS : il est conseillé de travailler avec des poids entiers pour l’instant (entre 1 et 100).
Nouveau : les données de FET peuvent aussi contenir une liste d’équipements.
Q : Comment fonctionne FET ?
R : Un algorithme génétique simple. Vous pouvez lire mes articles ( sur mon site web http://lalescu.ro/liviu/fet ) à ce sujet.
Pour l’essentiel (allocation des heures) : chaque emploi du temps possible est représenté par un tableau, disons times[i], où i varie de 0 au nombre d’activités moins un. L’emplacement times[i] contient l’heure allouée pour l’activité i.
Ensuite, on applique un algoithme génétique (utilisant des notions comme la sélection, le croisement, la mutation etc...) pour obtenir (on l’espère) une solution proche de la solution optimale.
Q : Comment obtenir un emploi du temps optimal et pourquoi obtient-on des résultats différents chaque fois ?
R : La génération de l’emploi du temps est un processus aléatoire ; si les résultats ne sont pas satisfaisants, veuillez redémarrer et réessayer. Vous pouvez aussi augmenter le nombre de chromosomes (population number : quitter FET, modifier le fichier input/fet.ini et relancer FET). Pour l’instant, le nombre de chromosomes est limité à 8192 mais, si vous avez suffisamment de RAM, vous pouvez l’augmenter (8192 égale environ 180 Mo). Cette variable est stockée dans le fichier src/engine/genetictimetable_defs.h et s’appelle MAX_POPULATION_NUMBER.
Q : Je DETESTE l’interface !
R : La structure et l’organisation des données de FET ont beaucoup de potentiel ; malheureusement, je n’ai pas eu le temps de concevoir l’interface utilisateur correspondante. J’espère que, dans l’avenir, moi ou quelqu’un d’autre aura le temps d’y remédier.
Q : Quelle est l’organisation des étudiants que FET peut prendre en compte ?
R : FET a été conçu pour pouvoir prendre en compte n’importe quelle structure scolaire :
sous-groupes indépendants (sans recouvrement)
groupes se recouvrant (plusieurs sous-groupes), promotions (niveaux) se recouvrant (plusieurs groupes).
Q : Comment travaille-t-on avec des groupes d’étudiants se recouvrant ?
R : Si vous avez des groupes se recouvrant, vous devez définir les plus petits sous-groupes indépendants, qui ne se recouvrent pas avec un autre groupe.
Exemple : vous avez un groupe, matière sport (garçons et filles séparés) et une matière optionnelle, sciences physiques, qu’une partie seulement des étudiants a choisi de suivre (oui, FET peut gérer des matières optionnelles). Il faut alors définir les sous-groupes suivants : garçons qui veulent des sciences physiques, garçons qui ne veulent pas des sciences physiques, filles qui veulent des sciences physiques, filles qui ne veulent pas des sciences physiques. Ensuite, il suffit de définir :
groupe garçons = sous-groupes garçons qui veulent des sciences physique + garçons qui ne veulent pas des sciences physiques
groupe filles = sous-groupes filles qui veulent des sciences physiques, filles qui ne veulent pas des sciences physiques
groupe sciences physiques = sous-groupes garçons qui veulent des sciences physiques + filles qui veulent des sciences physiques.
Vous pouvez alors ajouter des activités pour les groupes ainsi définis :
Activité 1 : enseignant A, groupe filles, matière sport ;
Activité 2 : enseignant B, groupe garçons, matière sport ;
Activité 3 : enseignant C, groupe sciences physiques, matière sciences physiques.
Q : Peut-on ajouter plusieurs groupes d’étudiants et plusieurs enseignants à une même activité ?
R : Oui, vous pouvez créer des activités comportant plusieurs enseignants et plusieurs groupes d’étudiants (promotions, groupes ou sous-groupes).
Q : Que représente le poids des contraintes ?
R : C’est l’importance des contraintes, les unes par rapport aux autres. Pour l’instant, essayez de n’utiliser que des poids entiers. Je n’ai jamais eu à utiliser de valeurs différentes de 1, mais vous pourriez en avoir besoin.
Q : Comment puis-je augmenter la puissance de recherche ?
A : Il faut augmenter le nombre de chromosomes (population number).
Q : Que signifie activité bihebdomadaire ?
R : C’est une activité qui a lieu toutes les deux semaines (ce concept n’est peu-être pas commun, mais je l’ai implémenté dès le début parce que ma faculté en avait besoin). (NdT : ce concept est très utilisé dans les établissements secondaires en France pour tenir compte de volumes horaires non-entiers)
Q : Pourquoi les conflits sont-ils indiqués avec une importance double ?
R : Parce que ces conflits font référence à des activités hebdomadaires. Pour les activités bihebdomadaires, les conflits sont indiqués avec une importance simple.
Q : Comment puis-je contribuer à FET ?
R : Veuillez lire le fichier TODO. Vous pouvez aussi envoyer vos commentaires/suggestions à l’auteur. FET est un logiciel libre et toute donation serait appréciée. Veuillez contacter l’auteur à ce sujet.
Q : Quel est l’algorithme de FET ?
R : Un algorithme génétique simple, appliqué sur un modèle de données simple.
Dans l’avenir, j’espère pouvoir mettre ici une vraie description de l’algorithme. En attendant, voici quelques trucs nécessaires pour comprendre le programme :
L’algorithme génétique et la représentation des données qui sont derrière le programme m’ont l’air vraiment simple maintenant et je pense pouvoir l’expliquer au maximum en deux heures. Le moteur lui-même n’est pas non plus très compliqué à comprendre. Le cauchemar est dans l’interface graphique, la modélisation, la sauvegarde et le chargement des données.
L’allocation du temps (heures) et de l’espace (salles) sont deux phases similaires. Vous pouvez lire mes articles pour comprendre pourquoi il faut d’abord allouer les heures et ensuite les salles.
J’utilise une liste QPtrList pour les enseignants, les matières, les étudiants (promotions, groupes, sous-groupes), les activités et les contraintes. Avant de commencer la simulation, ces informations sont copiées dans des tableaux pour accélérer les calculs. La simulation fonctionne alors en utilisant l’index de ces nouveaux tableaux pour chaque enseignant, matière et activité. Les emplois du temps sont représentés comme des matrices, indexées par les enseignants (ou étudiants ou salles) et les jours et heures et contiennent des entiers, qui représentent les indices des activités.
J’utilise des int16 quelquefois pour des raisons de consommation mémoire.
Avec une population maximale de 8192, la classe Rules a une taille d’à peu près 180 Mo (j’espère ne pas me tromper).
Q : Pouvez-vous détailler l’utilisation des poids pour les contraintes ?
R : Le poids d’une contrainte peut être un nombre réel (double). MAIS : j’ai préféré (pour des questions de vitesse) que la valeur de retour d’une contrainte soit un entier, c’est pourquoi c’est une valeur réelle arrondie à l’entier le plus proche. Pour l’instant, essayez de travailler avec des poids entiers.
Q : Pouvez-vous expliquer pourquoi FET travaille en deux phases, d’abord les heures, puis les salles ?
A : Pour des questions de vitesse. Mais, avec l’allocation en deux phases, la première phase peut aboutir à des solutions qui ne sont pas compatibles avec la deuxième phase (par exemple,avec les données de l’échantillon 12, de Marek Jaszuk, on n’atteint pas de solution optimale pour la deuxième phase, alors qu’il existe une telle solution, trouvée manuellement).
Il y a deux solutions à ce problème :
1 - FET pourrait travailler en une seule phase (mais le temps de calcul serait beaucoup plus long) ou
2 - il faudrait ajouter des contraintes temporelles pour que la solution de la première phase respecte toutes les contraintes spatiales (très compliqué, les contraintes pouvant être obligatoires ou non, et le temps d’exécution est très long).
C’est un problème pour lequel on recherche une solution.
Q : Comment fonctionne ConstraintActivitiesSameTime (même heure pour plusieurs activités) ?
R : Pour les contraintes obligatoires, la solution envisagée est mise en conformité avec la contrainte avant évaluation, de telle façon que toutes les solutions envisagées respectent cette contrainte et qu’il n’y ait pas de conflit signalé. Cette solution est la plus rapide, comme l’a montré le fichier de données de Ian Fantom. Pour les contraintes non obligatoires, la méthode est le signalement de conflits (plus lent, moins bon que la méthode ci-dessus).
Q : Comment fonctionne ConstraintActivityPreferredTime (heure souhaités pour une activité) ?
R : Pour les contraintes obligatoires, la solution envisagée est mise en conformité avec la contrainte avant évaluation, de telle façon que toutes les solutions envisagées respectent cette contrainte et qu’il n’y ait pas de conflit signalé. Cette méthode est plus rapide (prouvé par l’expérience, pas en théorie).
Pour les contraintes non obligatoires, la méthode est le signalement de conflits. La fonction renvoie un facteur de conflit qui augmente avec la distance par rapport à l’heure souhaitée. Ceci peut générer des solutions moins bonnes, si on est intéressé uniquement par un positionnement exact. Dans ce cas, il est préférable d’utiliser ConstraintActivityPreferredTimes (plusieurs heures possibles), avec une seule heure souhaitée.
Exemple : 5 jours dans la semaine, 5 activités, exclusives, une par jour.
Activité 1 : de préférence le lundi
Activité 2 : de préférence le lundi
Activité 3 : de préférence le mardi
Activité 4 : de préférence le jeudi
Activité 5 : jour indifférent
La meilleure solution, avec ConstraintActvityPreferredTime (sans s), contiendra 2 conflits, et une solution pourra être :
Activité 1 le lundi
Activité 2 le mardi (conflit)
Activité 3 le mercredi (conflit)
Activité 4 le jeudi
Activité 5 le vendredi
Si vous utilisez ConstraintActvityPreferredTimes (avec s), vous n’aurez qu’un seul conflit :
Activité 1 le lundi
Activité 2 le mercredi (conflit)
Activité 3 le mardi
Activité 4 le jeudi
Activité 5 le vendredi
Q : Quels sont les avantages de FET par rapport à d’autres applications ?
R : - C’est un Logiciel Libre ;
Il supporte les activités hebdomadaires et bi-hebdomadaires (mon université de Craiova, Roumanie, avait besoin de cette fonctionnalité) ;
Sous-groupes indépendants, groupes indépendants ou non, promotions indépendantes ou non (suffisamment flexible pour permettre n’importe quel type d’organisation des groupes d’étudiants). FET peu même être utilisé pour gérer chaque étudiants individuellement si vous en avez vraiment besoin ;
Possibilité de gérer des activités optionnelles ;
Beaucoup de types de contraintes, avec la possibilité d’en ajouter beaucoup d’autres (merci d’en suggérer !).
Q : Quels sont les inconvénients de FET par rapport à d’autres applications ?
R : Pas très convivial (pas d’aide, interface graphique très primitive) ; Potentiellement buggé. Je n’ai pas assez de fichiers d’exemples pour tester FET (et je déteste faire des tests :-)
Q : Est-ce que FET compile dans d’autres environnement que GNU/Linux ?
R : FET peut être compilé dans des environnements similaires à GNU/Linux. Je fournirai de l’aide pour compiler ce logiciel dans tout environnement libre. Je ne fournirait PAS d’aide pour compiler ce logiciel dans une environnement non-libre (au sens de la GNU/GPL).
Q : Est-ce que FET prétend être le meilleur logiciel d’emploi du temps au monde, comme toutes les autres applications de planification ?
R : Je ne peux pas prétendre ça, parce que je n’ai pas pu comparer FET avec d’autres applications (si vous pouviez m’aider, ce serait génial). Tout ce que je peux dire aujourd’hui, c’est que je n’ai vu aucune application qui gère autant de contraintes et qui présente la même flexibilité que FET, sans parler du fait qu’il s’agit de logiciel libre.
FET est-il le premier logiciel libre de gestion d’emplois du temps (GNU/GPL) ? Hmmm... le premier a été Tablix, comme je l’ai découvert après avoir terminé FET. Mon opinion personnelle est que FET est meilleur. Bien sûr, je peux me tromper.
Q : Quelle est la différence entre l’initialisation « non allouée » et l’initialisation aléatoire ? Quelle est la meilleure ?
R : C’est la méthode utilisée pour initialiser la population de solutions possibles. Il semblerait (résultats empiriques) que l’initialisation « non-allouée » soit meilleure.
Q : Qu’est ce que ConstraintMinNDaysBetweenActivities ?
R : Cette contrainte s’applique à un ensemble d’activités et comporte une constante N. Les activités devront être distantes deux à deux d’au moins N jours. Pour N=1, cette contrainte signifie que les activités ne pourront pas être planifiées le même jour. Pour N=2, les activités devront être séparées par au moins une journée.
Exemple 1 : 3 activités et N=2. Les activités peuvent être placées le lundi, le mercredi et le vendredi (5 jours dans la semaine).
Exemple 2 : 2 activités et N=3. Les activités peuvent être placées le lundi et le jeudi, le lundi et le vendredi ou le mardi et le vendredi (5 jours dans la semaine).
Q : Est-il facile d’ajouter de nouveaux types de contraintes dans FET ?
R : C’est très facile. Je peux implémenter une nouvelle contrainte en quelques heures. Vous trouverez une description de la procédure dans le répertoire doc/how-to-implement-new-constraints
Q : Qu’est-ce que ConstraintStudentsEarly.
R : C’est une contrainte qui impose comme condition de faire débuter les cours des étudiants aussi tôt que possible. Vous devez faire attention avec cette contrainte : si un groupe d’étudiant commence plus tard que la première heure de la journée, vous aurez un conflit.
Q : FET n’arrive pas à résoudre mon emploi du temps ?
R : Essayez d’utiliser une population plus grande. Essayez aussi de refaire d’autres simulations. Si cela ne suffit pas, assouplissez les contraintes sur l’emploi du temps, par exemple en supprimant des contraintes obligatoires ou en les rendant non-obligatoires.