• Aucun résultat trouvé

D(xi) = [0, 2] , ∀xi∈ X C =    c1: x1< x2 c2: x1+ x2≥ 2 c3: x1< x3 Figure4.1 – Exemple de CSP

4.1.2

Les probl`emes d’optimisation sous contraintes

Certains probl`emes de satisfaction de contraintes ont un grand nombre de solutions, certaines ´etant pr´ef´erables `a d’autres. Cette notion de pr´ef´erence est g´en´eralement mod´elis´ee au moyen d’une fonction qui `a toute instantiation associe une valeur de coˆut. Une solution pr´ef´er´ee est alors une instantiation qui minimise (ou maximise) cette fonction.

Un probl`eme d’optimisation sous contraintes (CSOP) est un CSP associ´e `a une fonction objectif f . Cette fonction est souvent mod´elis´ee par une variable dont le domaine est d´efini par les bornes sup´erieures et inf´erieures de f .

Si nous d´efinissons un CSOP d’apr`es le CSP de la Figure 4.1 et la fonction objectif d´efinie par min(x1) alors la solution unique {(x1,1) ; (x2,2) ; (x3,2)}.

4.2

M´ethodes de r´esolution d’un CSP

Les m´ethodes de r´esolution de CSP sont par principe g´en´eriques, elles ne doivent pas d´ependre du pro- bl`eme `a r´esoudre. L’intuition consiste `a explorer de mani`ere implicite l’ensemble des instantiations pos- sibles, en distinguant les instantiations non-consistantes et consistantes, jusqu’`a trouver les solutions du probl`eme ou prouver qu’il n’existe pas de solutions. Nous d´ecrivons dans cette section les principes de base que sont la construction dynamique de l’arbre de recherche et l’utilisation de la propagation et du filtrage pour ´elaguer au maximum l’arbre. Nous discutons ´egalement de l’int´erˆet des contraintes globales et de l’utilisation d’heuristiques de branchement. Finalement, nous d´ecrivons la m´ethode couramment utilis´ee pour r´esoudre des probl`emes d’optimisation.

4.2.1

Construction d’un arbre de recherche

R´esoudre un CSP de mani`ere explicite consiste `a g´en´erer toutes les instantiations totales possibles puis de v´erifier la consistance de chacune. Dans la pratique, cette approche n’est ´evidemment pas envisageable car le nombre d’instantiations est exponentiel. En effet pour un probl`eme compos´e de n variables, chacune ayant un domaine de k valeurs, alors il existe kn instantiations totales. Dans le CSP d´ecrit dans la Figure 4.1, il existe 27 instantiations totales, 3 seulement sont des solutions.

L’algorithme de base utilis´e pour r´esoudre un CSP est l’algorithme de « simple retour arri`ere » (back-

track ) [RvBW06]. Partant de l’instantiation vide, il l’´etend progressivement en choisissant et en instantiant

une nouvelle variable `a chaque ´etape. L’algorithme v´erifie alors que l’instantiation partielle courante est consistante avec les contraintes du probl`eme. Dans le cas contraire, la derni`ere instantiation faite est supprim´ee et une nouvelle instantiation est alors effectu´ee. De cette mani`ere, l’algorithme construit un arbre de recherche dont les nœuds repr´esentent les instantiations partielles test´ees. Cet algorithme permet de tester l’ensemble des instantiations possibles de mani`ere implicite, c’est `a dire sans toutes les g´en´erer. La Figure 4.2 repr´esente l’arbre de recherche associ´e au CSP de la Figure 4.1 construit par l’algorithme de simple retour arri`ere. Durant la construction de l’arbre de recherche seule 18 instantiations partielles sont test´ees (contre 27 instantiations totales pour une ´enum´eration explicite). L’algorithme de r´esolution a d´eduit par exemple qu’en choisissant la valeur 2 pour x1, toutes les instantiations possibles de x2sont inconsistantes car elles violent la contrainte c1. Il en d´eduit qu’il n’est alors pas n´ecessaire de tester les instantiations possibles pour x3.

(∗, ∗, ∗) x1= 0 ? (0, ∗, ∗) x2= 0 ? ¬c1 x2= 1 ? ¬c2 x2= 2 ? (0, 2, ∗) x3= 0 ? ¬c3 x3= 1 ? (0, 2, 1) x3= 2 ? (0, 2, 2) x1= 1 ? (1, ∗, ∗) x2= 0 ? ¬c1 x2= 1 ? ¬c1 x2= 2 ? (1, 2, ∗) x3= 0 ? ¬c3 x3= 1 ? ¬c3 x3= 2 ? (1, 2, 2) x1= 2 ? (2, ∗, ∗) x2= 0 ? ¬c1 x2= 1 ? ¬c1 x2= 2 ? ¬c1

Figure4.2 – Arbre de recherche pour le CSP d´ecrit dans la Figure 4.1. Les triplet (v1, v2, v3) d´esignent une instantiation respectivement pour les variables x1, x2et x3.

4.2.2

Filtrage et propagation des contraintes

Le filtrage et la propagation des contraintes [RvBW06] permettent d’am´eliorer les capacit´es de r´esolution des CSP en compl´ement de la construction d’un arbre de recherche. Par exemple, la seule analyse de la contrainte c1 (x1≤ x2) et des domaines de x1 et x2 permet de d´eduire que (x1,2) est une instantiation inconsistante. La valeur 2 peut donc ˆetre supprim´ee (ou filtr´ee) du domaine de x1dans notre CSP r´ef´erence (Figure 4.1). De cette fa¸con, l’arbre de recherche sera r´eduit car la branche droite n’est plus `a explorer.

Plus g´en´eralement, `a chaque nœud de l’arbre de recherche, c’est `a dire `a chaque instantiation d’une valeur `a une variable l’algorithme place un ´ev´enement dans une file qui va ˆetre analys´ee par toute les contraintes partageant cette variable. Par un syst`eme de d´eduction locale `a chaque contrainte, des valeurs des autres variables de la contrainte peuvent ˆetre prouv´ees comme inconsistantes. La suppression de ces valeurs des domaines est appel´ee filtrage. `A leur tour, les modifications des domaines peuvent inf´erer de nouvelles inconsistances. Ce principe, appel´e propagation, continue jusqu’`a ce que la file d’´ev´enements soit vide. On atteint alors un point fixe, l’algorithme fait un nouveau choix de variable et de valeur et teste la nouvelle instantiation. Si durant le filtrage d’une contrainte, le domaine d’une variable devient vide, alors l’instantiation courante est inconsistante. Le nœud est ferm´e et l’algorithme passe au nœud suivant s’il existe. Cette op´eration permet d’agir sur les domaines de toutes les variables d’un CSP durant la construction de l’arbre de recherche et r´eduit ainsi le nombre de nœuds composant l’arbre.

En reprenant l’arbre de recherche de la Figure 4.1, la propagation et le filtrage permet d’´elaguer fortement l’arbre. D`es la racine, la propagation des contraintes r´eduit le domaine de x1 `a [0, 1] et les domaines de x2 et x3`a [1, 2]. L’arbre de recherche complet sera compos´e de seulement 6 nœuds.

4.2.3

Contraintes globales

Une contrainte globale est d´efinie par un pr´edicat et porte sur un nombre ind´efini de variables. La contrainte globale allDif f erent (x1, . . . , xi) par exemple, sp´ecifie que toutes ses variables ont des valeurs diff´erentes. Par principe, ces contraintes disposent d’un degr´e de r´eutilisabilit´e sup´erieure compar´e aux contraintes basiques. En effet, ces contraintes sont plus faciles `a exprimer et leur ´ecriture est plus concise. Par exemple, l’expression logique (4.1) d´efinie une conjonction de 3 contraintes de diff´erences, ´equivalente `

a une contrainte allDifferent portant sur 3 variables. Certaines r`egles ne peuvent ´egalement pas s’exprimer autrement que par le biais de contraintes globales. La contrainte de « sac `a dos » (knapsack ) [MT90]

4.3. Les solveurs de contraintes 31