Title: La contrainte stretch et son algorithme de filtrage
1La contrainte stretch et son algorithme de
filtrage
Par Michael C. Fernandes
2Plan de la présentation
- Introduction Ă la contrainte stretch
- DĂ©finition de la contrainte stretch
- Calcul des bornes des blocs
- Règles de filtrage de la contrainte stretch
- Quelques résultats et discussion
- Conclusion
3Introduction Ă la contrainte stretch
- Stretch est une contrainte globale proposée par
Gilles Pesant en 2001 - Utile pour déterminer des horaires types dun
ensemble demployés (affectation de  shifts ou
quarts de travail) - Deux types dhoraires sur lesquels stretch peut
sappliquer - Les horaires cycliques
- Un horaire est donné sur ? semaines et les
employés sont divisés en ? équipes de travail - Chaque employé se voit affecté lemploi dune
semaine i puis Ă la fin de la semaine il change
demploi du temps pour celui de la semaine i 1
mod ? - Chacun des employés a donc un horaire identique
mais qui nest pas en phase avec celui des autres
Ă©quipes - Les horaires personnels
- Des horaires oĂą lon doit tenir compte des
restrictions ou préférences individuelles du
personnel
4Introduction Ă la contrainte stretch
- Prend en compte des restrictions sur les
séquences de travail - Spécifie le nombre minimal et maximal de valeurs
identiques consécutives dans une séquence - Lapplication de la contrainte stretch se fait
par son algorithme de filtrage qui procède en
déterminant les intervalles dans lesquels
lexécution dune même activité (un  stretch )
peut avoir lieu
5Introduction Ă la contrainte stretch
- Références
- Article principal
- Gilles Pesant. A filtering algorithm for the
stretch constraint. Dans Principles and Practice
of Constraint Programming (CP 2001), number 2239
in Lecture Notes in Computer Science, pages
183-195. Springer-Verlag, 2001. - Autre article consulté
- Guillaume Rochart, Narendra Jussien, Une
contrainte Stretch expliquée, Journal
Ă©lectronique d'intelligence artificielle 3-31,
2004. http//jedai.afia-france.org/detail.php?Pape
rID31
6DĂ©finition de la contrainte stretch
- Définie sur une séquence de n variables de
décision s0, s1,, sn-1 correspondant à des
quarts de travail consécutifs - Dsi ? T représente le domaine des si où T t1,
t2,, tm est lensemble des m activités
possibles - La sous-suite si, s(i1) mod n, , sj est appelée
un bloc (ou un  stretch ) si si s(i1) mod n
sj mais que s(i-1) mod n ? si et s(j1) mod
n ? sj - LĂ©tendue ou la taille dun bloc allant des
indices i à j est sa longueur qui est donnée par
1 (j - i) mod n - Le  mod n est utilisé pour les horaires
cycliques
7DĂ©finition de la contrainte stretch
- Un patron (ou  pattern ) est défini comme deux
blocs contigus de différents types - Exemple t1, t1, t1, t2, t2 noté t1t2
- La contrainte peut être formulée ainsi
stretch(lts0, s1, , sn-1gt, ?1, ?2, p, ?) - ?1 et ?2 sont des vecteurs de longueur m
représentant les étendues minimales et maximales
des blocs pour chaque valeur de T - p est un ensemble de patrons
- ? est un booléen indiquant si un horaire est
cyclique ou non
8DĂ©finition de la contrainte stretch
- Remarques
- La contrainte nest bien définie que lorsque ?1
?2 - ?1 taille dun bloc ?2
- La valeur vraie pour ? indique un horaire
cyclique dans lequel le successeur de sn-1 est s0 - La valeur fausse pour ? indique une séquence sans
cycle et représente donc un horaire personnel - Lensemble p représente les patrons permis, mais
la contrainte ne sen sert que pour raffiner la
recherche
9Calcul des bornes des blocs
- Les différentes règles de filtrage dépendent du
début et de la fin potentielle dun bloc - Calcul des bornes dun bloc est important pour
déterminer les étendues minimale et maximale dun
bloc - Pour une variable si prenant la valeur tk, nous
avons les intervalles suivants - ßmin, ßmax intervalle pour le début dun bloc
- emin, emax intervalle pour la fin dun bloc
10Calcul des bornes des blocs
- En dautres mots
- ßmin est la valeur minimale de début dun bloc
- ßmax est la valeur maximale de début dun bloc
- emin est la valeur minimale de fin dun bloc
- emax est la valeur maximale de fin dun bloc
11Calcul des bornes des blocs
- La borne ßmax est définie telle que
- ?p ? Ăźmax, i, Dsp tk
- Ds(Ăźmax - 1) mod n ? tk
- Le calcul de la borne Ăźmax
- Lalgorithme calculant la borne Ăźmax parcourt les
variables prĂ©cĂ©dant la variable dĂ©tude jusquĂ
ce quil en atteigne une qui na pas la valeur tk
et retourne la position suivante - Cet algorithme exploite le fait que toutes les
variables voisines instanciées à la même valeur
font partie du mĂŞme bloc
12Calcul des bornes des blocs
- La borne ßmin est définie telle que
- ?p ? Ăźmin, Ăźmax, tk ? Dsp
- ?l, tl ? tk, ?p ? (Ăźmin - ?1) mod n, (Ăźmin - 1)
mod n, tl ? Dsp, cest-Ă -dire quun autre bloc
peut exister à la frontière - Le calcul de la borne ßmin est plus complexe
- On commence par calculer une valeur limite pour
Ăźmin au-delĂ de laquelle Ăźmin ne peut pas se
trouver - On vérifie alors les variables à reculons tant
que la variable courante contient plus dune
activité incluant tk dans son domaine - Si tk ne fait plus partie du domaine ou si la
variable ne contient plus que tk dans son domaine
(sj tk ) ou si on a atteint la valeur limite,
lalgorithme calcule alors Ăźmin en vĂ©rifiant quĂ
sa gauche assez de variables ont une valeur
commune dans leurs domaines afin de constituer un
bloc valide
13Calcul des bornes des blocs
- Lalgorithme pour calculer Ăźmin
14Calcul des bornes des blocs
- Le calcul des bornes est symétrique
- La borne emin est calculĂ©e de manière analogue Ă
Ăźmax - La borne emax est calculĂ©e de manière analogue Ă
Ăźmin - Remarques
- Les différents algorithmes de calcul des bornes
ont une complexité qui est linéaire en la
longueur maximale dun bloc, sauf pour la
fonction find_frontier que lalgorithme de calcul
des bornes ßmin et emax appelle pour vérifier la
validité dun bloc voisin
15Règles de filtrage de la contrainte stretch
- Lalgorithme de filtrage est basé sur la notion
de bloc et est constitué de sept règles nommées
F1 Ă F7 - Lalgorithme de filtrage agit suite Ă deux types
dévénements - Une valeur est retirée du domaine dune variable
du bloc, détruisant potentiellement la validité
du bloc. Il faut alors vérifier la validité de ce
bloc de chaque côté de la variable - Une variable est instanciée. Divers filtrages
sont alors appliqués en se basant sur où se
trouvent le début et la fin du bloc
16Règles de filtrage de la contrainte stretch
- La règle F1 sapplique lorsque le domaine dune
variable du bloc est modifié (une valeur en est
retirée) - On vérifie pour chaque valeur tl retirée du
domaine de la variable si si un bloc avec tl peut
être réalisé à la gauche ou à la droite de si - Si un bloc valide avec tl ne peut être réalisé
avant si, alors la valeur tl est retirée du
domaine de la variable s(i-1) mod n - Si un bloc valide avec tl ne peut être réalisé
après si, alors la valeur tl est retirée du
domaine de la variable s(i1) mod n - Lapplication de lalgorithme garantit que, pour
chaque valeur restante du domaine dune variable,
il y a des valeurs identiques dans les variables
voisines pour réaliser un bloc de longueur
minimale
17Règles de filtrage de la contrainte stretch
- La règle F2
- Si ßmin ou emax nont pas été trouvés (ßmin -1
ou emax -1), alors la contrainte stretch est
violée - Les règles F3 et F4 permettent de découvrir si un
bloc est trop long ou trop court - Règle F3 si étendue(ßmax, emin) gt ?2, alors la
contrainte stretch est violée - Règle F4 si étendue(ßmin, emax) lt ?1, alors la
contrainte stretch est violée
18Règles de filtrage de la contrainte stretch
- Les règles F5 et F6 permettent de savoir
précisément où un bloc commence ou se termine - Il est alors possible de retirer la valeur tk des
variables voisines sur une longueur Ă©gale Ă la
plus petite des longueurs minimales des blocs
voisins potentiels afin de réaliser un bloc
valide - Règle F5 si ßmax ßmin, alors on sait
précisément où le bloc débute - Règle F6 si emax emin, alors on sait
précisément où le bloc se termine - La règle F7 permet de découvrir la ou les
positions qui sont forcément couvertes par un
bloc dans lintervalle Ăźmin, emax quand on a la
longueur minimale dun bloc afin de déduire des
instanciations
19Règles de filtrage de la contrainte stretch
- Remarque sur les règles
- La complexité totale de lalgorithme de filtrage
nest pas reliée au nombre de variables, n
20Quelques résultats et discussion
- Lefficacité de la contrainte a été évaluée
- Sur des problèmes dhoraires cycliques réels
- Sur des problèmes générés par lauteur
- Testée avec sept versions de lalgorithme
- Une version complète
- Une version naïve qui vérifie la longueur dun
bloc - Cinq versions sans certaines règles de filtrage
21Quelques résultats et discussion
- RĂ©sultats obtenus
- La version complète performe beaucoup mieux que
la version naïve - Les règles F1 et F7 apparaissent être cruciales
pour lexécution de la contrainte - Les règles F2 et F4 ont peu deffet sur les
résultats - La règle F4 semble redondante par rapport aux
règles F1 et F7 - La règle F3 est nécessaire pour assurer
lexactitude de lalgorithme
22Quelques résultats et discussion
- Une grande partie du filtrage se base sur les
intervalles ßmin, ßmax et emin, emax calculés
qui peuvent ne pas ĂŞtre les plus restreints
possibles - Une des limitations de la contrainte est quelle
ne considère pas toute la séquence - Une valeur dans le domaine dune variable peut
ĂŞtre inconsistante parce quelle est incompatible
avec les valeurs du domaine dune autre variable
se trouvant plus loin dans la séquence - Un meilleur niveau de cohérence peut être atteint
si on examine une plus grande partie de la
séquence, sinon toute, au prix dun effort de
calcul plus grand (complexité en termes de n)
23Conclusion
- La contrainte stretch est une contrainte globale
introduite par Gilles Pesant - Utile lorsquon a des limites sur le nombre de
valeurs consécutives identiques dans une séquence - Le domaine de laffectation de tâches pour
réaliser des horaires constitue une des
applications de cette contrainte - La contrainte exhibe une complexité algorithmique
basse
24Des questions?