• Aucun résultat trouvé

Satisfaction de contraintes

N/A
N/A
Protected

Academic year: 2022

Partager "Satisfaction de contraintes "

Copied!
19
0
0

Texte intégral

(1)

Satisfaction de contraintes

Pierre De Loor – enib – cerv

deloor@enib.fr www.enib.fr/~deloor

Qu’est ce qu’une contrainte

„ Contraintes :

‰

U = R * I

‰

F=1/2 ρ*S*v

2

‰

X=pluie -> Y= eau

„ Distinctions liées à

‰

Domaine (symboles, intervalles, entiers, réels …)

‰

Langage (linéaire, quadratique, extension …)

(2)

Contraintes sur les réels

‰

Problèmes de type « sciences physiques »

‰

Les contraintes linéaires expriment des rapports de grandeurs entre variables continues

„

Algorithme du simplexe / réels ou rationnel

„

Complexité polynomiale (en moyenne)

„

Complexité exponentielle (au pire)

‰

D’autres algorithmes s’attachent à résoudre des contraintes non linéaires (quadratiques,

géométriques).

„

Quad

„

Décomposions sémantiques

Contraintes discrètes

‰

Peuvent potentiellement exprimer tout type de contraintes (peuvent être définies en extension)

„

Configuration d’équipements

„

Conception, raisonnement temporel

„

Ordonnancement de tâches

„

Emploi du temps, puzzles

‰

Complexité exponentielle (NP complet)

‰

Un mécanisme de retour arrière basique est

irréaliste

(3)

Contraintes discrètes avec optimisation : le problème des entrepôts

Client j : demande dj Localisation

possible i : coût fixe fi capacité Mi

Localisation possible

Localisat ion possible

Localisation possible

Localisation possible

n

coût cij

Origines de la programmation par contrainte

Mathématiques

Recherche Opérationnelle

Programmation par Contraintes

Informatique

Intelligence

Artificielle

(4)

Quelques outils associés

„ SICStus Prolog

‰ Domaines Finis (FD), Booleens, Réel

‰ www.sics.se/sicstus

„ CHIP

‰ Solveur en C/C++ hébergé sous prolog

‰ Concept de ‘contraintes globales’ (alldifferent, circuit, element …)

‰ www.cosytec.com

„ ECLIPSe

‰ Prolog avec librairies FD, Réels, ensembles

‰ Intégrations de RO (CPLEX, XPRESS-MP)

‰ www.icparc.ic.ac.uk/eclipse

„ ILOG solver

‰ Solveur en C++ et/ou Java

‰ Ensemble, Réels, FD

‰ ILOG Scheduler est une sur-couche spécialisée dans la planification

„ SWI-Prolog :

‰ CHR = support pour différents systèmes de contraintes, exploité pour de nombreux domaines;

‰ www.swi-prolog.org

„ GNU-Prolog :

‰ FD;

‰ http://pauillac.inria.fr/~diaz/gnu-prolog/

Contraintes arithmétiques et prolog

fact(0,1).

fact(X,Y):- X2 is X-1, fact(X2,Z), Y is Z*X.

?- fact(3,X).

X = 6

?- fact(Y,6).

[WARNING: Arguments are not sufficiently instanciated]

Exception: ( 9) _L168 is _G123-1 ?

fact(0,1).

fact(X,Y):- X2 = X-1, fact(X2,Z), Y = Z*X.

?- fact(3,X).

: :

Call: (11)fact(3-1-1-1, _L195) ? creep

Call: (12) 3-1-1-1==0 ? creep Fail: (12) 3-1-1-1==0 ? creep

(5)

Contraintes sur les réels et CHIP

fact(0,1).

fact(X,Y):- X ^> 0, X2 ^= X-1, fact(X2,Z), Y ^=Z*X.

?-fact(5,X).

X=120 ?

?-fact(Y,120).

Y=5 ?

Contraintes sur les domaines finis en CHIP

crypt :-

[S,E,N,D,M,O,R,Y]::0..9,

alldifferent([S,E,N,D,M,O,R,Y]), S#\=0, M#\=0,

1000*S + 100*E + 10*N + D + 1000*M + 100*O + 10*R + E #=

10000*M + 1000*O + 100*N +10*E + Y,

labeling([S,E,N,D,M,O,R,Y],0,first_fail,indomain), % vu après

writeln([S,E,N,D,M,O,R,Y]).

allSolutions :-findall(_,crypt,_).

(6)

Résolution de CSP discrets

Algorithmes de base

Exemple de CSP discret

„

Variables et domaine

„

Contraintes et relations

‰

En extension

{a,b,c}

{a,b,c}

{a,b}

{a,b}

{a,b}

X1 X2 X3 X4 x5

Domaines Variables

r1={(a,b),(a,c),(b,c)}

r2={(a,b),(a,c),(b,c)}

r3={(a,b)}

r4={(a,b)}

r5={(a,b)}

v1=(x3,x1) v2=(x3,x2) v3=(x3,x4) v4=(x3,x5) v5=(x4,x5) C1=(v1,r1)

C2=(v2,r2) C3=(v3,r3) C4=(v4,r4) C5=(v5,r5)

Relation Variables

Contraintes

„C1 : (x3=a et x1=b) ou (x3=a et x1=c) ou (x3=b et x1=c) Contraintes

binaires

(7)

Exemple de CSP discret

„

Graphe de contraintes

„

Instanciation partielle

„

A={x1→b,x2 →a,x3 → a}

„

Satisfait C1

„

Viole C2

„

Ne satisfait pas C3

„

Ne viole pas C3

{a,b}

X3

{a,b,c}

X1

(a,b) (a,c) (b,c)

C1 :

(a,b) (a,c) (b,c)

{a,b,c}

X2

{a,b}

X4

{a,b}

X5 C2 :

C4:(a,b) C3:(a,b)

C5:(a,b)

Instanciation consistante

„

Une instanciation est consistante si elle ne viole aucune contrainte (elle peut être partielle)

‰

Vérifier qu’une instanciation est consistante est un problème facile (polynomiale)

„

Une solution est une instanciation complète consistante

‰

Vérifier qu’une instanciation est une solution est un problème facile

„

Un CSP est consistant s’il existe une solution

‰

Vérifier qu’un CSP est consistant est NP-complet

(8)

Instanciation globalement consistante

„

Une instanciation est globalement consistante si elle peut être étendue en une solution.

„

Propriété très utile pour savoir s’il est intéressant de prolonger une instanciation

„

Mais très difficile à établir

„

(La consistance globale d’une instanciation vide est équivalente à la consistance du CSP)

Une instanciation globalement consistante

Une solution Une instanciation globalement inconsistante

Exemple

„

Fabrication d’une voiture

‰ Les portières et le capot sont faits à Lille, mais le constructeur ne dispose que de peinture rose, rouge et noire

‰ La carrosserie est à Hambourg, où l’on a de la peinture blanche, rose, rouge et noire

‰ Les pare-chocs, faits à Palerme, sont toujours blancs

‰ La bâche du toit ouvrant, qui est faite à Madrid, ne peut être que rouge

‰ Les enjoliveurs sont faits à Athènes, où l’on a de la peinture rose et de la peinture rouge

‰ La carrosserie doit être de la même couleur que les portières, les portières de la même couleur que le capot, le capot de la même couleur que la carrosserie

‰ Les enjoliveurs, les parc chocs et le toit ouvrant doivent être plus clairs que la carrosserie

(9)

Exemple

{a,b, c,d}

X3

{a}

X1

(a,b) (a,c) (a,d)

(b,b) (c,c) (d,d)

{a,b,c}

X2

{b,c}

X4

{b,c,d}

X5

(b,c) (b,d) (c,d)

{c}

X6

(b,b) (c,c) (d,d) (b,b)

(c,c) (d,d) (c,d)

pare-chocs portière

toit-ouvrant enjoliveurs

carrosserie

a:blanc, b:rose, c:rouge, d:noir

„

Définition formelle

„

P=(X,D,C)

„

X={x1,x2,x3,x5,x6}

„

D ={

(a),(a,b,c),(a,b,c,d),(b,c),(b,c,d),(c)

}

„

C={

(x1,x3):((a,b),(a,c),(a,d)), (x2,x3):((b,b),(c,c),(d,d))

…}

„

Solutions

„ S1={x1→a,x2→d,x3→d,x4→b,x5→d,x6→c}

„ S2={x1→a,x2→d,x3→d,x4→c,x5→d,x6→c}

capot

Consistance globale d’un CSP

„ Equivalence :

Deux CSP sont équivalents s’ils possèdent les mêmes solutions.

‰ L’un peut être plus simple que l’autre

‰ Exemple : un CSP P’ dont le domaine de x3=(a,d) est équivalent au CSP P précédent

„ Contrainte induite :

Une contrainte est induite si elle est respectée par toutes les solutions

‰ Exemple : x3:((d)) est induite par P

‰ Intérêt : elle peut être ajoutée au CSP et diminuer la difficulté de recherche d’une solution

„ Consistance globale :

un CSP est globalement consistant si les valeurs imposées par chaque contrainte séparément font partie des solutions.

‰ Intérêt : toute instanciation partielle satisfaisant une contrainte sans violer les autres est globalement consistante et peut être étendue à une solution

‰ P n’est pas globalement consistant

„ Exemple , l’instanciation partielle (x1→a, x3→b)

(10)

Résolution de CSP

„

Problèmes classiques

‰

Trouver une solution (NP-difficile)

‰

Satisfiabilité : Prouver qu’un CSP est consistant (NP- complet)

‰

Trouver toutes les solutions

‰

Exhiber une solution particulière qui optimise un ou plusieurs critères

‰

Estimer ou calculer le nombre de solutions

‰

Trouver pour une variable, un ensemble de valeurs qui se trouve dans toutes les solutions

‰

Etc …

Illustration de la compléxité

„ n variables de cardinalité d

„ m contraintes

„ Générer/tester = m*d^n contraintes à tester au pire

„ Exemple :

‰

n = 20, d = 5 et m = 20

‰

Si le test d’une contrainte prend 10

-6

secondes

‰

Le générer/tester peut prendre 60 ans

‰

Le CSP P précédent : 432 vérifications de

contraintes

(11)

Algorithme du backtrack

„ Tester avant de continuer à générer :

‰

tester toutes les variables instanciées une à une

pare-chocs a X1

portière b c d X2

carrosserie a b c d a b c d a b c d X3

enjoliveurs b c b c b c X4

capot b c d b c d X5

toit-ouvrant c c X6

Solution 59 vérifications au + explications d’inconsistances

3+(4*3+4)+(2*3+2*3+2)+(3+3*2+3*2+3)+(2+1+2+2+1)

Filtrage

„ Simplifier le travail du backtrack

„ Modifier le CSP en un CSP équivalent

‰

Contraintes induites

(12)

Filtrage

„ Arc-consistance de P

{a,b, c,d}

X3

{a}

X1

(a,b) (a,c) (a,d)

(b,b) (c,c) (d,d)

{d,b,c}

X2

{b,c}

X4

{b,c,d}

X5

(b,c) (b,d) (c,d)

{c}

X6

(b,b) (c,c) (d,d) (b,b)

(c,c) (d,d) (c,d)

pare-chocs portière

toit-ouvrant enjoliveurs

carrosserie

capot

X1-X3 : (a,a) impossible

X6-X3 : (c,b) et (c,c) impossibles X2-X3 : pas de problèmes

X2-X3 : (b,b) et (c,c) impossibles X3-X5 : (b,b) et (c,c) impossibles

Procédure AC3

P’’

Backtrack sur P’’

„ P’’ est globalement consistant

‰

L’algorithme est glouton

pare-chocs a X1

portière d X2

carrosserie d X3

enjoliveurs b c X4

capot d X5

1erSolution 15 vérifications au +

(13)

Un CSP arc-consistant et inconsistant

X1 0,1

X2 0,1 X3 0,1

(0,1) (1,0) X1\=X2

(0,1) (1,0) X1\=X3

(0,1) (1,0) X3\=X2

Panel d’algorithmes d’arc-consistance

„ Si m est le nombre de contraintes de cardinalité d

‰

AC3 : O(m*d^3)

‰

AC4 : O(m*d^2) mais complexité spatiale importante

‰

AC5 : O(m*d) mais restreint à certains types de contraintes

‰

AC6 : la meilleure complexité spatiale en O(m*d)

et complexité temporelle en moyenne très bonne

(14)

K-consistance

„

L’objectif est de se rapprocher d’un CSP globalement consistant pour ne plus avoir à faire un backtrack

„

Un CSP est k-consistant si toute instanciation consistante de k-1 variable peut être étendue à une k

ième

variable tout en restant consistante

„

K-consistance forte : un CSP est fortement k-consistant si il est k- consistant et (k-1)-consistant et (k-2)-consistant et …

„

L’arc-consistance est une 2-consistance

„

La 3-consistance forte s’appelle la ‘chemin-consistance’

„

Certains algorithmes établissent ces consistances mais leur complexité est souvent un écueil

Amélioration du Backtrack

„

Heuristiques d’explorations

„ Ordre d’instanciation des variables (first-fail : faire apparaître vite les violations de contraintes)

„ Ordre d’instanciation des valeurs

„ Ordre de vérification des contraintes

„ Ces ordres peuvent être redéfinis durant la résolution

„

Sophistication de l’algorithme

‰ Méthodes rétrospectives

„ Faire le point après chaque instanciation et remonter leurs conséquences dans l’arbre (élagage)

‰ Backtrack intelligent (conflict based backjumping, graph based backjumping, dynamic backtracking, local changes)

‰ Mémorisation de contraintes

‰ Méthodes prospectives

„ Déclencher, après chaque instanciation, des instanciations annexes pour détecter, à priori, des instanciations non globalement consistantes

‰ Forward-checking, check backward …

(15)

Exemple

„ Heuristiques : ordre d’instanciation (fixe)

„ Ordre (a) : domaine le + petit → {X1,X2,X3,X4}

„ Ordre (b) : degrés d’implication (nb contraintes) →{X2,X4,X3,X1} (par exemple)

„ Ordre (c) dureté des contraintes →{X4,X3,X2,X1} (par exemple)

{1,2,3}

X3 (2)

{1,2}

X2 (2)

{1,2,3,4} X4 (2)

X1 {1}

X3=X4+2 (1/12)

X2.X4>1 (7/8)

X1<=X2 (1) X2<=X3 (5/6)

X2 (1)

Heuristiques sur backtrack

1 X1

1 2 X2

1 2 3 1 2 3 X3

1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 X4

A (domaine)

1 2 X2

1 2 3 4 1 2 3 4 X4

1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 X3

1 X1

B (degrés)

C (dureté)

1 2 3 4 X4

1 2 3 1 2 3 1 2 3 1 2 3 X3

1 2 X2

1 X1

(16)

Méthode rétrospective

Backtrack intelligent : le backjumping

pare-chocs a X1

portière b c d X2

carrosserie a b c d a b c d a b c d X3

enjoliveurs b c b c b c X4

capot b c d b c d X5

toit-ouvrant c c X6

X3 est une variable de conflit (à cause des contraintes entre X6 et X3), Il est inutile de faire un simple backtrack sur X5, car aucune instanciation contenant X3->c ne sera consistante : élagage

{a,b, c,d}

X3 X1{a}

(a,b) (a,c) (a,d)

(b,b) (c,c) (d,d)

{a,b,c}

X2

{b,c}

X4

{b,c,d}

X5 (b,c)

(b,d) (c,d)

{c} X6

(b,b) (c,c) (d,d) (b,b) (c,c) (d,d) (c,d)

Mémorisation de contraintes + backjumping

pare-chocs a X1

portière b c d X2

carrosserie a b c d a b c d a b c d X3

enjoliveurs b c b c b c X4

capot b c d b c d X5

toit-ouvrant c c X6

X3\=b

{a,b, c,d}

X3 X1{a}

(a,b) (a,c) (a,d)

(b,b) (c,c) (d,d)

{a,b,c}

X2

{b,c}

X4

{b,c,d}

X5 (b,c)

(b,d) (c,d)

{c} X6

(b,b) (c,c) (d,d) (b,b) (c,c) (d,d) (c,d)

X3\=c X2\=c

X2\=b

(17)

Re-exploitation de la mémorisation

pare-chocs a X1

portière b c d X2

carrosserie a b c d a b c d a b c d X3

enjoliveurs b c b c b c X4

capot b c d b c d X5

toit-ouvrant c c X6

X2\=b; X3\=b; X3\=c; X2\=c

Méthode prospective Forward-checking

„ Check forward

‰

arc-consistance dégradée, très efficace

‰

Si une variable x1 est instanciée, on réduit seulement les ensembles des variables non instanciées par arc-consistance.

FC(V,A)

Si V=φalors A est une solution Sinon

Soit xi∈V

Pour tout v ∈di faire Push(V-{xi})

si check-forward(xi,v,V) alors FC(V-{xi}, A∪{xi->v}) finsi

Pop(V-{xi}) FinPour Finsi

Check-forward(xi,v,V) Soit consistant=true

Pour tout xj∈V-{xi} tant que consistant faire Pour tout v’dj faire

si{xi->v, xj->v’} est non consistante alors dj<-dj-{v’}

finsi finPour si dj = φ

alors consistant <- false finsi

finPour

(18)

Forward checking

pare-chocs a X1

portière b c d X2

carrosserie b c d X3

enjoliveurs b c X4

capot d X5

toit-ouvrant c X6

V={x1,x2,x3,x4,x5,x6}, A={}

cf(x1,a,V-x1)=true -> d3={b,c,d}

d1= {a}, d2={b,c,d}, d3={a,b,c,d}, d4={b,c}, d5={b,c,d}, d6={c}

fc(V-x1,{x1->a}) -> xi=x2, v=b cf(x2,b,V-x1-x2)=true->d3={b}, d5={b}

fc(V-x1-x2,{x1->a,x2->b}) -> xi=x3, v=b cf(x3,b,V-x1-x2-x3)=false

fc(V,{}) -> xi=x1, v=a

fc(V-x1,{x1->a}) -> xi=x2, v=c cf(x2,c,V-x1-x2)=true->d3={c}, d5={c}

fc(V-x1-x2,{x1->a,x2->c}) -> xi=x3, v=c cf(x3,c,V-x1-x2-x3)=false

fc(V-x1-x2,{x1->a,x2->d}) -> xi=x3, v=d cf(x3,d,V-x1-x2-x3)=true->d4={c,b}, d5={d}

fc(V-x1,{x1->a}) -> xi=x2, v=d cf(x2,d,V-x1-x2)=true->d3={d}, d5={d}

fc(V-x1-x2-x3,{x1->a,x2->d,x3->d}) -> xi=x4, v=b cf(x4,d,V-x1-x2-x3-x4)=true

fc(V-x1-x2-x3-x4,{x1->a,x2->d,x3->d,x4->b}) -> xi=x5, v=d cf(x5,d,V-x1-x2-x3-x4-x5)=true

fc(V-x1-x2-x3-x4-x5,{x1->a,x2->d,x3->d,x4->b,x5->d}) -> xi=x6, v=c cf(x6,c,φ)=true

{a,b, c,d}

X3 X1{a}

(a,b) (a,c) (a,d)

(b,b) (c,c) (d,d)

{a,b,c}

X2

{b,c}

X4

{b,c,d}

X5 (b,c)

(b,d) (c,d)

{c} X6

(b,b) (c,c) (d,d) (b,b) (c,c) (d,d) (c,d)

Bilan sur les algorithmes de résolutions

„

Il existe peu de comparaisons expérimentales entre les algorithmes.

„

Il est actuellement impossible de prévoir l’efficacité d’un algorithme face à un problème donné.

„

Dans les cas généraux les méthodes prospectives fonctionnent en moyenne mieux

„

Des méthodes hybrides existent (forward checking + mémorisation de contraintes + backtrack intelligent)

„

On peut définir des classes de CSP plus simples à résoudre (classes polynomiales : complexité polynomiale)

„

De nombreux travaux portent sur la résolution de CSP

dynamiques qui implique la résolution partielle de CSP

(19)

Bibliographie

„ Cohen J. (1990) Constraint logic programming languages. Communication of the ACM, Vol. 33, n°7, July 1990, P. 52-68.

„ Colmeraurer A. (1990) An introduction to Prolog III. Communication of the ACM, Vol 33, n°7, July 1990, p. 71-90.

„ Cras J.-Y. (1993) A review of industrial constraint solving tools (1993).

„ Fron A. (1994) Programmation par contraintes. Addison-Wesley - 1994.

„ Hentenryck P.V. (1989) Constraint satisfac tion in logic programming. MIT Press - 1989.

„ ILOG (1999) ILOG Solver : reference manual 4.4. ILOG -- 1999.

„ CHIP, System Documentation, (3 tomes), 1996.

„ Laurière J.-L. (1978) A Language and a program for stating and solving combinatorial problems. Artificial Intelligence, Vol 10, n°1, 1978, p. 29-127.

„ Jean-Marc Alliot, Thomas Schiex : Intelligence artificielle et informatique théorique, Cepadues.

„ ICAPS-04 : Tutorial on Constraint Satisfaction for Planning and Scheduling

„ Fages F. (1996) Programmation Logique par contraintes, Edition Ellipses.

Références

Documents relatifs

[r]

[r]

Donc une matrice ayant une entrée nulle ou négative sur la diagonale ne pourra pas être décomposée par Cholesky sans permutation.. • Si   est symétrique, avec une

Mais en y réfléchissant, si les scientifiques tentent de cloner les animaux domestiques morts ils pourraient très bien tenter de faire la même chose avec l’espèce

Une consistance est une propriété qui doit être assurée à chaque étape de la recherche de la solution dans.. l’objectif de couper l’arbre

Il faut choisir un solvant extracteur non miscible avec l’eau et dans lequel l’huile essentielle d’eucalyptus y est très soluble.. Ce solvant doit être le moins dangereux pour

Définir la fréquence puis donner la relation entre la période et la fréquence (1pt) 4.. Calculer sa fréquence f, qui est celle des battements

la  souffrance  est  une  composante  fondamentale  de  l’existence  comme  le  destin  ou  la  mort.  Pour