• Aucun résultat trouvé

5.3 Vers une m´ethode de sonde dynamique ?

5.3.3 Ne pas r´e´evaluer l’espace d´ej` a visit´e

Sous Prolog, il n’est pas `a notre connaissance possible d’interrompre une fonction d’´eti- quetage et de modifier l’ordre des variables sans que cette fonction ne r´e´evalue l’ensemble des valeurs de ces variables. Autrement dit, lorsqu’on interrompt une recherche, qu’on r´eordonne les variables et qu’on relance la recherche, l’ensemble des solutions est `a nouveau ´evalu´e. Cela as- sure la compl´etude de l’approche, mais aboutit `a r´eit´erer les instanciations faites lors la premi`ere recherche. Pour ´eviter ce d´esagr´ement, nous avons recherch´e une solution algorithmique dans la litt´erature.

Le probl`eme pos´e ici revient `a s´eparer un probl`eme initial en deux sous-probl`emes, selon deux espaces distincts (plus exactement deux ensembles de domaines de valeurs) : celui d´ej`a trait´e, et celui restant `a traiter. Ceci peut ˆetre r´ealis´e `a l’aide d’un algorithme propos´e par Freuder & Hubbe [Freu 95], permettant l’extraction de sous-probl`emes de satisfaction de contraintes. Cet algorithme a initialement ´et´e con¸cu pour simplifier des probl`emes dont on connaˆıt des sous-probl`emes insolubles. L’exemple explicatif donn´e par les auteurs est une instance simple du probl`eme de coloration de graphe, illustr´e par la figure 5.5. Etant donn´e trois sommets

Figure 5.5 – Illustration de l’extraction de sous-probl`emes de satisfaction de contraintes. Exemple tir´e de [Freu 95].

X, Y et Z, pouvant chacun prendre trois couleurs possibles not´ees a, b ou c (figure 5.5.1), le probl`eme est de trouver une instanciation telle que chaque sommet ait une couleur diff´erente des sommets connexes. Bien que trivial dans ce cas, puisqu’il n’existe que 27 instanciations possibles, ce probl`eme est NP-complet et rapidement difficile `a r´esoudre d`es lors que la dimension du probl`eme augmente. Aussi, les auteurs s’appuient sur un constat simple : la mˆeme instance de probl`eme, ne proposant que deux couleurs possibles (par exemple b et c, figure 5.5.2) ne poss`ede aucune instanciation (sur les 8 combinaisons possibles) qui soit r´ealisable. On peut alors utiliser cette information pour extraire du probl`eme initial le sous-probl`eme compl´ementaire au sous-probl`eme insoluble (qui, en cons´equence, ne poss`edera plus que 19 instanciations possibles soit une r´eduction de 35% de leur nombre initial). Dans la majorit´e des cas, comme ici, le sous-probl`eme restant se compose de plusieurs instances distinctes (figure 5.5.3).

Le pseudo-code de la m´ethode de d´ecomposition est donn´e par l’algorithme 8. La figure 5.5 illustre les diff´erentes ´etapes de l’ex´ecution sur l’exemple de la figure 5.5.

Algorithme 8 Algorithme Freuder-Hubbe Requiert: : Probl`eme P , Sous-Probl`eme Ps

1: D´eclarer une liste vide de sous-probl`emes LP compl´ementaires de Ps

2: tant que le probl`eme P ne correspond pas `a Ps faire

3: S´electionner une variable V dans P dont le domaine n’est pas ´equivalent `a celui dans Ps

4: Diviser P en deux sous-probl`emes : 1/ un probl`eme P1 dont le domaine de V correspond

`

a celui dans Ps, et un probl`eme P2 dont le domaine de V est compl´ementaire `a celui dans

Ps

5: D´eclarer P1 en tant que probl`eme courant (P ← P1)

6: Ajouter P2 `a la liste LP

7: fin tant que 8: retourner LP

Dans notre cas, nous avons souhait´e employer cet algorithme afin de s´eparer le sous-probl`eme d´ej`a trait´e du sous-probl`eme restant, lors de l’arrˆet de l’algorithme (condition d’absence d’am´e-

Figure5.6 – Illustration de l’ex´ecution de l’algorithme 8 pour le probl`eme de la figure 5.5.

lioration atteinte). Or, pour connaˆıtre le sous-espace des variables de flot d´ej`a explor´e, il serait coˆuteux d’utiliser un m´ecanisme permettant de conserver la trace de cet espace. Cela consisterait en effet `a mettre `a jour `a chaque instanciation la borne de la variable instanci´ee. Or, en dispo- sant uniquement de la connaissance du probl`eme initial, et de la derni`ere instanciation r´ealis´ee, l’algorithme de Freuder-Hubbe nous permet de dissocier les deux sous-probl`emes. Il suffit en effet de d´eclarer dans l’algorithme 8 la derni`ere instanciation en tant que sous-probl`eme Ps(dit

«insoluble » dans l’exemple des auteurs). La liste de sous-probl`emes LP renvoy´ee contient alors les deux sous-probl`emes, qui sont n´ecessairement distincts. La figure 5.7 montre sur un exemple simple qu’un probl`eme initial (quatre variables dans {0, 1} `a instancier) peut ˆetre d´ecompos´e en un ensemble de sous-probl`emes (ou sous-espaces). Il est alors ais´e de d´eterminer quels sont les sous-probl`emes qui ont ´et´e trait´es, et ceux qui ne l’ont pas ´et´e. On parcourt pour cela, dans l’ordre d’instanciation, les variables d’un sous-probl`eme. Si le domaine de la variable lue est identique `a celui de la derni`ere instanciation, on passe `a la variable suivante. Si le domaine est inf´erieur, alors le probl`eme a ´et´e trait´e. Sinon, il n’a pas ´et´e trait´e.

Cette utilisation d´etourn´ee de l’algorithme de Freuder-Hubbe permet ainsi de d´eterminer simplement le sous-probl`eme restant d’une exploration interrompue, sans avoir `a se pr´eoccuper de la m´emorisation de l’espace visit´e. Une fois les sous-probl`emes restants d´etermin´es, leurs variables sont tri´ees selon une nouvelle solution partielle. Chaque sous-probl`eme doit ensuite ˆetre trait´e s´epar´ement. La recherche se termine lorsque tous les sous-probl`emes ont ´et´e ´evalu´es.