Bref contexte théorique des fonctions d'ajustage

Tablix utilise une simple somme pondérée pour calculer la valeur d'ajustage d'un emploi du temps.
Ceci est implémenté avec une boucle "for" dans la fonction table_fitness() du fichier modsup.c. En pseudo-code, cela ressemble à :

POUR chaque fonction d'ajustage partiel définie par les modules chargés FAIRE
        APPELER la fonction d'ajustage partiel
        MULTIPLIER le résultat avec le poids de ce module
        AJOUTER le résultat au total d'ajustage de cet emploi du temps
FIN FAIRE

Au plus la valeur d'ajustage est faible, au meilleur est l'emploi du temps. Un emploi du temps parfait, qui n'a aucune erreur devrait avoir une valeur d'ajustable nulle.

Chaque module définit généralement un fonction partielle d'ajustage. Cette fonction, dans la plupart des cas, retourne le nombre d'erreurs d'un certain type dans l'emploi du temps. Il y a des cas où ce n'est pas possible (par exemple lorsqu'un module calcule une dispersion d'évènements). Dans ce cas, la fonction doit retourner les valeurs plus faibles pour les meilleurs emplois du temps. Il n'est pas obligatoire qu'un emploi du temps avec une valeur d'ajustage nulle existe, bien que ce soit souhaitable (un module ne peut pas être déclaré obligatoire si sa fonction d'ajustage ne retourne jamais 0).

Il est important que la valeur retournée par la fonction d'ajustage partiel ne dépende que d'un type d'erreur dans l'emploi du temps. Parce que l'utilisateur peut définir quels modules seront utilisés par le noyau, cela lui permet de personnaliser les recherches de solutions. En affectant différents poids aux différents modules, il peut concentrer la puissance de calcul pour réduire un type spécifique d'erreur. Cela ne serait pas possible si une valeur d'ajustage dépendait de plusieurs types d'erreurs. L'expérience montre également que les fonctions d'ajustage partiel qui ne sont pas orthogonales (si une valeur d'une fonction d'ajustage influence fortement la valeur d'une autre) causent parfois des instabilités dans l'algorithme génétique.

L'algorithme génétique donne les meilleurs résultats lorsque les fonctions d'ajustage sont continues. Cela signifie que la valeur d'ajustage doit diminuer graduellement lorsque l'emploi du temps s'améliore (a moins d'erreurs). Un exemple d'un des pires cas de fonction d'ajustage serait une fonction qui retournerait 0 pour un emploi du temps parfait et une valeur fixe pour les autres cas de figure.