Programmation logique et contraintes · pr edicat queens en posant que L est une liste de N el emen...

15
“Fages” — 2005/1/13 — 9:43 — page 1 — #1 Programmation logique et contraintes Fran¸ cois Fages Mots-cl´ es : Programmation par contraintes, r´ esolution de contraintes, propagation de contraintes, logique, d´ eduction, calcul symbolique, arithm´ etique d’intervalles, optimisation combinatoire, ordonnancement, proc´ edures de recherche, heuristiques. esum´ e: La programmation logique avec contraintes est porteuse d’un grande ambition pour la programmation : celle d’en faire essentiellement une tˆ ache de mod´ elisation, par des ´ equations, des contraintes, des formules logiques. A la suite de diff´ erents travaux pionniers men´ es dans les ann´ ees 70, ce courant de programmation est n´ e au mi- lieu des ann´ ees 80 d’un rapprochement de la programmation logique, des techniques de propagation de contraintes issues de l’intelligence artificielle, et de celles de programmation lin´ eaire issues de la recherche op´ erationnelle. Les succ` es rencontr´ es tr` es rapidement en r´ esolution de probl` emes combinatoires, y compris dans des probl` emes clas- siques de recherche op´ erationnelle comme en ordonnancement par exemple, ont induit une forte vitalit´ e industrielle et acad´ emique dans ce domaine. Les enjeux sont aujourd’hui d’aller vers une plus grande automatisation, qui n’at- teint pas encore celle des outils de programmation lin´ eaire en nombres entiers par exemple, ainsi que d’explorer continuellement de nouvelles applications. 1 Introduction Il est possible de pr´ esenter les id´ ees essen- tielles de la programmation par contraintes ` a tra- vers un petit exemple combinatoire, introduit par Bezzel en 1848 : celui de placer N reines sur un ´ echiquier N ×N sans qu’elles soient en prise, c’est- ` a-dire sur la mˆ eme colonne, ligne ou diagonale. Ce probl` eme se mod´ elise par la relation queens(N,L) dans le programme logique avec contraintes sur les nombres entiers et les listes suivant : queens(N,L):- length(L,N), domain(L,1,N), safe(L), labeling(L). safe([]). safe([X|L]):- noattack(L,X,1), safe(L). noattack([],_,_). noattack([Y|L],X,I):- X=/=Y, X=/=Y+I, X+I=/=Y, I1=I+1, noattack(L,X,I1). La premi` ere clause du programme efinit le pr´ edicat queens en posant que L est une liste de N ´ el´ ements (repr´ esentant les reines par ligne) ` a valeurs dans [1,N ] (repr´ esentant leur position dans les colonnes). La liste doit satisfaire la re- lation safe(L) de non-prise ainsi que la rela- tion pr´ ed´ efinie labeling(L) d’instanciation des variables. Les contraintes de non-prise sont pos´ ees ecursivement pour chaque paire de variables par le pr´ edicat noattack et s’expriment par des in´ equations not´ ees X=/=Y. A l’ex´ ecution de ce programme, les contraintes d’in´ equations sont utilis´ ees de fa¸ con active pour retirer des valeurs du domaine des variables avant leur ´ enum´ eration. La figure suivante montre l’ef- fet de ces contraintes sur le domaine des variables apr` es le placement des deux premi` eres reines (en lignes) dans un ´ echiquier 8×8: L’´ enum´ eration des valeurs possibles des va- riables (labeling(L)) se fait en d´ eveloppant un arbre de recherche. Les calculs symboliques ef- fectu´ es par les contraintes ont pour effet de eduire le nombre de choix ` a explorer et de stop- per imm´ ediatement l’exploration lorsque le do- maine d’une variable devient vide. Ils permettent ´ egalement de guider les choix par des heuris- tiques en choisissant d’´ enum´ erer en premier les va- riables qui ont le plus petit domaine. La figure 1.1 montre l’arbre de recherche explor´ e par le pr´ edicat labeling pour ´ enum´ erer les 92 solutions au probl` eme des 8-reines, ainsi que l’arbre explor´ e en ajoutant la contrainte V 0 <V 7 entre la premi` ere 1

Transcript of Programmation logique et contraintes · pr edicat queens en posant que L est une liste de N el emen...

Page 1: Programmation logique et contraintes · pr edicat queens en posant que L est une liste de N el emen ts (repr esen tant les reines par ligne) a valeurs dans [1;N] (repr esentant leur

“Fages” — 2005/1/13 — 9:43 — page 1 — #1i

i

i

i

i

i

i

i

Programmation logique et contraintes

Francois Fages

Mots-cles : Programmation par contraintes, resolution de contraintes, propagation de contraintes, logique, deduction,

calcul symbolique, arithmetique d’intervalles, optimisation combinatoire, ordonnancement, procedures de recherche,

heuristiques.

Resume : La programmation logique avec contraintes est porteuse d’un grande ambition pour la programmation :

celle d’en faire essentiellement une tache de modelisation, par des equations, des contraintes, des formules logiques.

A la suite de differents travaux pionniers menes dans les annees 70, ce courant de programmation est ne au mi-

lieu des annees 80 d’un rapprochement de la programmation logique, des techniques de propagation de contraintes

issues de l’intelligence artificielle, et de celles de programmation lineaire issues de la recherche operationnelle. Les

succes rencontres tres rapidement en resolution de problemes combinatoires, y compris dans des problemes clas-

siques de recherche operationnelle comme en ordonnancement par exemple, ont induit une forte vitalite industrielle

et academique dans ce domaine. Les enjeux sont aujourd’hui d’aller vers une plus grande automatisation, qui n’at-

teint pas encore celle des outils de programmation lineaire en nombres entiers par exemple, ainsi que d’explorer

continuellement de nouvelles applications.

1 IntroductionIl est possible de presenter les idees essen-

tielles de la programmation par contraintes a tra-vers un petit exemple combinatoire, introduit parBezzel en 1848 : celui de placer N reines sur unechiquier N×N sans qu’elles soient en prise, c’est-a-dire sur la meme colonne, ligne ou diagonale. Ceprobleme se modelise par la relation queens(N,L)

dans le programme logique avec contraintes surles nombres entiers et les listes suivant :

queens(N,L):- length(L,N), domain(L,1,N),

safe(L), labeling(L).safe([]).

safe([X|L]):- noattack(L,X,1), safe(L).

noattack([],_,_).

noattack([Y|L],X,I):-X=/=Y, X=/=Y+I, X+I=/=Y,

I1=I+1, noattack(L,X,I1).

La premiere clause du programme definit lepredicat queens en posant que L est une listede N elements (representant les reines par ligne)a valeurs dans [1, N ] (representant leur positiondans les colonnes). La liste doit satisfaire la re-lation safe(L) de non-prise ainsi que la rela-tion predefinie labeling(L) d’instanciation desvariables. Les contraintes de non-prise sont poseesrecursivement pour chaque paire de variablespar le predicat noattack et s’expriment par desinequations notees X=/=Y.

A l’execution de ce programme, les contraintesd’inequations sont utilisees de facon active pour

retirer des valeurs du domaine des variables avant

leur enumeration. La figure suivante montre l’ef-fet de ces contraintes sur le domaine des variablesapres le placement des deux premieres reines (enlignes) dans un echiquier 8×8 :

L’enumeration des valeurs possibles des va-riables (labeling(L)) se fait en developpant unarbre de recherche. Les calculs symboliques ef-fectues par les contraintes ont pour effet dereduire le nombre de choix a explorer et de stop-per immediatement l’exploration lorsque le do-maine d’une variable devient vide. Ils permettentegalement de guider les choix par des heuris-tiques en choisissant d’enumerer en premier les va-riables qui ont le plus petit domaine. La figure 1.1montre l’arbre de recherche explore par le predicatlabeling pour enumerer les 92 solutions auprobleme des 8-reines, ainsi que l’arbre explore enajoutant la contrainte V 0 < V 7 entre la premiere

1

Page 2: Programmation logique et contraintes · pr edicat queens en posant que L est une liste de N el emen ts (repr esen tant les reines par ligne) a valeurs dans [1;N] (repr esentant leur

“Fages” — 2005/1/13 — 9:43 — page 2 — #2i

i

i

i

i

i

i

i

2 Programmation logique et contraintes

Fig. 1.1 – Arbres de recherche explores pour trouver toutes les solutions au probleme des 8 reines,sans et avec la contrainte d’elimination de symetrie V 0 < V 7.

et la derniere variable de la liste, de facon a casserune symetrie. L’utilisation active des contraintespour elaguer et diriger l’exploration de l’arbre derecherche permet d’obtenir des temps d’executionqui sont inferieurs de plusieurs ordres a ceux obte-nus par des algorithmes classiques d’enumerationet de test a posteriori des contraintes. Le pro-gramme ci-dessus permet par exemple de pla-cer 200 reines sur un echiquier 200×200 en 80millisecondes, alors qu’un programme classiqueverifiant les contraintes apres enumeration (in-versant labeling(L),safe(L)) serait limite a desproblemes de taille inferieure a 15.

D’un point de vue general, l’essence de laprogrammation par contraintes est de modeliserle probleme a resoudre par des relations surdes variables mathematiques, et de calculersur ces structures d’information partielle, sansnecessairement fixer de valeurs precises. Onpeut alors s’interesser a la programmation parcontraintes de differents points de vue : fon-dements en logique mathematique, algorithmesde resolution, procedures de recherche, langagesde programmation, applications, historique,... Lesquatre sections suivantes de ce chapitre traitentdes quatre premiers points dans cet ordre, les ap-plications et certaines references historiques etantmentionnees au cours du texte. Cependant ces sec-tions sont relativement independantes les unes desautres, et tout autre plan de lecture est possible.

2 Fondements logiques

Une contrainte est une formule logique du pre-mier ordre que l’on interprete dans une structuremathematique fixee. Ce domaine d’interpretation,note D, qui represente le “domaine du discours”,est en general une combinaison de structureselementaires, numeriques : nombres entiers na-turels, nombres reels,..., ou symboliques : mots,listes, termes (arbres etiquetes), structures dedonnees, etc. Dans un systeme de contraintesC = (L,D), on fixe egalement le langage descontraintes L, qui determine l’ensemble des for-mules logiques autorisees. Ce langage est supposeclos par conjonction, c’est-a-dire que la conjonc-tion d’un nombre fini de contraintes est tou-jours une contrainte. En revanche l’utilisationdes autres connecteurs logiques et des quantifi-cateurs est optionnelle et peut etre limitee a desformes simples. Le probleme de decision auquelon s’interesse est celui de la satisfiabilite d’unecontrainte, c’est-a-dire l’existence d’une valuationdans D des variables pour laquelle la formule estvraie. La decidabilite de ce probleme de satisfia-bilite depend autant du domaine d’interpretationD que du langage precis de contraintes L.

2.1 Syntaxe

Soit V un ensemble de symboles de variableset SF un ensemble de symboles de constantes et

Page 3: Programmation logique et contraintes · pr edicat queens en posant que L est une liste de N el emen ts (repr esen tant les reines par ligne) a valeurs dans [1;N] (repr esentant leur

“Fages” — 2005/1/13 — 9:43 — page 3 — #3i

i

i

i

i

i

i

i

Fondements logiques 3

de fonctions, donnes avec leur arite, c’est-a-direnombre d’arguments (les constantes sont d’aritenulle). En logique du premier ordre, les variablesne sont pas autorisees en position de fonction.L’ensemble des termes T est le plus petit en-semble contenant les variables et les constantes,qui soit clos par application des symboles de fonc-tion en respectant les arites : f(M1, ..., Mn) ∈T pour tout f ∈ SF d’arite n et tous termesM1, ..., Mn ∈ T . Par exemple, les expressionsarithmetiques sont formees sur des symboles deconstantes numeriques et les symboles de fonc-tion +,−, ∗, ... habituellement notes en positioninfixee. Les expressions de listes sont formeessur un symbole de constante pour la liste vide,note [] en programmation logique, et un sym-bole de fonction binaire pour la construction decellules de liste, note [ | ]. Pour plus de com-modite, on autorise certaines abreviations syn-taxiques, comme par exemple la notation sim-plifiee [X,Y,Z] pour representer la liste a troisvariables [X|[Y|[Z|[]]]].

Les contraintes et les formules logiquessont formees en considerant un ensemblesupplementaire de symboles de predicats SP

donnes avec leur arite, suppose contenir l’egalitebinaire = et les constantes vrai et faux. Lespropositions atomiques sont formees par appli-cation d’un symbole de predicat a des termes :p(M1, ..., Mn) pour tout p ∈ SP , M1, ..., Mn ∈ T .L’ensemble des formules logiques sur l’alphabet(V, SF , SP ) est le plus petit ensemble contenantles propositions atomiques, et clos par applica-tion des connecteurs logiques ¬, ∧, ∨, etc. et desquantificateurs ∃ et ∀.

Un langage de contraintes sur l’alphabet(V, SF , SP ) est un sous-ensemble des formules lo-giques, suppose clos par conjonction et par re-

nommage des variables. Par exemple, le langagedes contraintes pourra etre limite aux seules pro-positions atomiques et a leurs conjonctions. C’estle cas des langages de contraintes arithmetiquesusuels, sans quantificateurs, formes avec lessymboles de predicats =,≤, .... Les contrainteslineaires sont encore une restriction de ce lan-gage, qui n’autorise pas les produits entre va-riables. A l’inverse, l’expressivite d’un langage decontraintes peut etre augmentee en considerantcertaines formules quantifiees, ou bien en aug-mentant l’alphabet des symboles de fonction etde predicat. On peut par exemple autoriser laquantification existentielle de tete, comme dans∃x∃y x + y + z ≤ 5 qui exprime la projectionde la contrainte x + y + z ≤ 5 sur l’ensemble devariables d’interet {z}, ou bien ajouter des sym-boles pour representer les listes de nombres etle predicat unaire alldifferent qui exprime quetous les nombres d’une liste sont differents.

2.2 Semantique

Une fois fixes les alphabets de symboles V , SF ,SP , une formule logique du premier ordre s’in-terprete dans une structure mathematique S =(D, [ ]), formee d’un domaine de valeurs D,d’elements distingues [c] ∈ D pour chaque sym-bole de constante c ∈ SF , d’operateurs [f ] :Dn → D pour chaque symbole de fonction f ∈SF d’arite n ≥ 1, et de relations [p] : Dn →{vrai, faux} pour chaque symbole de predicatp ∈ SP d’arite n ≥ 0. Par exemple, les ex-pressions arithmetiques s’interpretent dans les do-maines numeriques N, Z, Q, R, ... munis de leursoperations et relations usuelles. Une valuationρ : V → D est une interpretation des symbolesde variables par des valeurs du domaine D. Lesvaluations s’etendent aux termes par morphisme :

– [x]ρ = ρ(x) si x ∈ V ,– [f(M1, ..., Mn)]ρ = [f ]([M1]ρ, ..., [Mn]ρ) si

f ∈ SF est d’arite n ≥ 0.

Dans le cas des expressions arithmetiques, lesvaluations consistent simplement a effectuer lesoperations.

Une proposition atomique p(M1, ..., Mn) estvraie dans une interpretation I = (D, [ ]) et unevaluation ρ si et seulement si [p]([M1]ρ, ..., [Mn]ρ)vaut vrai. La valeur de verite dans I et ρ d’uneformule logique (ou contrainte) φ est determineepar les tables de verite des connecteurs logiqueset les regles des quantificateurs : [∃xφ]ρ = vraissi [φ]ρ[x→d] = vrai pour un certain d ∈ D,[∀xφ]ρ = vrai ssi [φ]ρ[x→d] = vrai pour toutd ∈ D. Si la formule φ ne contient pas de variablelibre (c-a-d. non liee par un quantificateur), sa va-leur de verite est independante de ρ et on dit queI est un modele de φ si φ est vraie dans I, note|=I φ.

Lorsque la formule φ contient des variableslibres, ce qui est le cas general des contraintes,on dit que φ est satisfiable dans l’interpretationI s’il existe une valuation ρ qui rende φ vraie. Cetest de satisfiabilite est l’operation centrale en pro-grammation par contraintes. En programmationlogique, l’interpretation I n’est pas fixee pour tousles symboles (elle ne l’est pas notamment pour lessymboles de predicats definis par les regles du pro-gramme) et la question centrale est celle de l’exis-tence d’une interpretation I et d’une valuation quirendent la formule vraie.

2.3 Decidabilite et deduction

Supposer que la satisfiabilite des contraintesest un probleme decidable dans une interpretationI revient, d’un point de vue logique, a sup-poser que la structure I peut etre axiomatiseepar une theorie T complete pour le langage descontraintes. Ce point de vue est fructueux car

Page 4: Programmation logique et contraintes · pr edicat queens en posant que L est une liste de N el emen ts (repr esen tant les reines par ligne) a valeurs dans [1;N] (repr esentant leur

“Fages” — 2005/1/13 — 9:43 — page 4 — #4i

i

i

i

i

i

i

i

4 Programmation logique et contraintes

il permet, d’une part, d’etudier la decidabilitedes langages de contraintes, et d’autre part, dededuire d’une axiomatisation de la structure cer-tains algorithmes de satisfaction de contraintescomme nous le verrons dans la section suivante.

Nous ne detaillerons pas ici de systeme dededuction particulier pour la logique du premierordre, mais supposons un tel systeme donne (voirpar exemple Shoenfield 67). On note ` φ lorsquela formule φ peut etre deduite dans le systeme dededuction logique, c’est-a-dire en appliquant lesregles d’inference du systeme (comme par exemplela regle d’affaiblissement qui permet de deduireA ∨ B a partir de A pour toutes formules A etB) aux axiomes logiques du systeme (comme parexemple l’axiome de tiers exclus A ∨ ¬A pourtoute formule A). Le theoreme de completudede Godel (1930) exprime l’adequation des no-tions de deduction et de verite dans toutes les in-terpretations : pour toute formule close φ, ` φ siet seulement si |=I φ dans toute interpretation I.

Une theorie logique T est un ensemble de for-mules closes que l’on s’autorise comme axiomessupplementaires pour effectuer les deductions.Une theorie est complete si pour toute formuleclose φ, soit T ` φ, soit T ` ¬φ. Une in-terpretation I est un modele de T si |=I φ pourtout φ ∈ T . Si T est une theorie complete et I estun modele de T , on a donc equivalence entre laverite dans le modele, |=I φ, et la deduction dansla theorie, T ` φ. Dans ce cas, tous les modelesde T (il continue d’en exister de toute cardina-lite par le theoreme de Lowenheim-Skolem) sontelementairement equivalents c’est-a-dire indistin-guables par des formules du premier ordre. C’estla situation recherchee pour decider de la satisfia-bilite des contraintes, car elle permet de ramenerla question de la satisfiabilite de toute contraintec ayant X comme ensemble de variables libres :|=I ∃Xc, a un probleme de deduction : T ` ∃Xc.

L’arithmetique de Presburger est un premierexemple de theorie complete qui fut donne en1929. Cette theorie concerne la structure additivedes nombres entiers naturels (N, 0, s, +, =) et estformee des axiomes suivants :

1. ∀x x = x,

2. ∀x∀y x = y ⇒ s(x) = s(y),

3. ∀x∀y∀z∀v x = y ∧ z = v ⇒ (x = z ⇒ y =v),

4. ∀x∀y s(x) = s(y) ⇒ x = y,

5. ∀x 0 6= s(x),

6. ∀x x + 0 = x,

7. ∀x x + s(y) = s(x + y),

8. φ[0/x] ∧ (∀x φ ⇒ φ[s(x)/x]) ⇒ ∀x φ

pour toute formule close φ.

Les trois premiers axiomes sont ceux de l’egaliteen logique (on peut en deduire que = est une re-lation d’equivalence), les deux suivants exprimentle principe de decomposition des egalites sur lestermes formes avec 0 et successeur, et les deuxsuivants definissent l’addition par recursion. Ledernier axiome est en fait un schema d’axiome(denotant une infinite d’axiomes) qui exprimele principe de recurrence sur les entiers. Danscette presentation, le principe de recurrence estnecessaire pour prouver par exemple les formules∀x x 6= s(x) ou ∀x x = 0 ∨ ∃y x = s(y). Ilest cependant possible de donner une presentationcomplete de l’arithmetique de Presburger n’utili-sant pas le principe de recurrence. La completudede cette theorie signifie que la satisfiabilite descontraintes lineaires avec imbrication quelconquede quantificateurs est decidable sur (N, 0, s, +, =).La complexite en temps de ce probleme est cepen-dant redhibitoire, doublement exponentielle dansle pire cas.

L’arithmetique de Peano ajoute a cettetheorie deux axiomes pour definir la multipli-cation par recursion, de facon similaire auxdeux axiomes de l’addition. Cependant le fa-meux theoreme d’incompletude de Godel (1931)montre que cette theorie n’est pas complete etque toute extension coherente de l’arithmetiquede Peano est necessairement incomplete. Lastructure des nombres entiers avec multiplica-tion (N, 0, 1, +, ∗, =) n’est donc pas axiomatisable,et la satisfiabilite des contraintes arithmetiquesentieres avec quantificateurs est un problemeindecidable. De facon quelque peu surprenante,la situation est differente dans les nombresreels (R, 0, 1, +, ∗, =,≤), et on pourra s’etonnerdu resultat de Tarski de 1948 qui montre lacompletude de la theorie du corps ordonne desreels. Ce resultat montre la decidabilite de lageometrie elementaire, et les travaux ulterieursde Collins (1975) fournissent une procedure dedecision de complexite doublement exponentielleen le nombre de variables.

3 Resolution de contraintes

Dans une situation ideale en programma-tion par contraintes, le probleme de satisfiabi-lite des contraintes est non seulement decidable,mais le test incremental de satisfiabilite, quiest l’operation elementaire effectuee a chaqueetape d’execution, a une complexite algorithmiqueamortie (c’est-a-dire sommee sur une executionet divisee par le nombre d’etapes) idealementconstante ou sous-lineaire en le nombre de va-riables et de contraintes. En pratique, commenous le montrons dans cette section et les sui-vantes, on pourra aussi considerer des langagesde contraintes indecidables, des lors que l’on

Page 5: Programmation logique et contraintes · pr edicat queens en posant que L est une liste de N el emen ts (repr esen tant les reines par ligne) a valeurs dans [1;N] (repr esentant leur

“Fages” — 2005/1/13 — 9:43 — page 5 — #5i

i

i

i

i

i

i

i

Resolution de contraintes 5

dispose d’algorithmes de deduction d’informa-tions partielles de faible complexite algorith-mique, qui, combines a une procedure de rechercheenumerative pour les domaines finis, ou dichoto-mique pour les domaines infinis, permettent dedeterminer partiellement les cas d’insatisfiabilite,d’elaguer l’arbre de recherche, et de cerner l’en-semble des solutions. Qui plus est, meme lorsquele langage des contraintes est decidable, de tellesmethodes de deduction incompletes (dans le sensou elles ne permettent pas de detecter tous lescas d’insatisfiabilite) peuvent etre preferees a unalgorithme exact, pour des raisons de complexitealgorithmique ou de simplicite de programmation.

3.1 Resolution complete par systemes desimplification de contraintes

Un domaine de contraintes important pour lesstructures de donnees, est celui de l’algebre destermes du premier ordre, aussi appele domaine deHerbrand. Nous allons illustrer sur cet exemple lamethode generale de resolution de contraintes quiconsiste a normaliser un systeme de contraintespar des regles de simplification preservant soitl’ensemble des solutions soit la satisfiabilite seule-ment.

Dans l’algebre des termes, l’egalite estl’egalite syntaxique et exclut toute autre relationd’equivalence entre termes. C’etait a l’origine leseul domaine de contraintes considere dans le lan-gage de programmation logique Prolog introduitpar Colmerauer et Kowalski au debut des annees1970. La theorie forte de l’egalite a ete donneeet montree complete par Clark en 1978 (CET,Clark’s Equational Theory). Elle est constitueedes axiomes et schemas d’axiomes suivants :

1. ∀x x = x,

2. ∀x1, ..., xn x1 = y1 ∧ ... ∧ xn = yn ⇒f(x1, ..., xn) = f(y1, ..., yn) pour tout f ∈SF ,

3. ∀x1, ..., xn x1 = y1 ∧ ... ∧ xn = yn ⇒p(x1, ..., xn) ⇒ p(y1, ..., yn) pour tout p ∈SP ,

4. ∀x1, ..., xn, y1, ..., yn f(x1, ..., xn) =f(y1, ..., yn) ⇒ x1 = y1 ∧ ... ∧ xn = yn

pour tout f ∈ SF ,

5. ∀x1, ..., xn, y1, ..., ym f(x1, ..., xm) 6=g(y1, ..., ym) pour tous f, g ∈ SF , f 6= g,

6. ∀x M 6= x pour tout terme M contenantstrictement x.

Les trois premiers axiomes sont ceux de l’egalitestandard en logique, les deux suivants exprimentle principe de decomposition des egalites dansl’algebre des termes, le dernier, aussi appele testd’occurrence, exprime l’absence de solution auxcontraintes de la forme x = f(x) dans les termes

finis. Le dernier schema d’axiome est necessairepour obtenir une theorie complete (il avait eteoublie dans les travaux de Malcev en 1961),on obtient notamment une theorie complete destermes infinis en remplacant simplement ce der-nier schema d’axiome par sa negation essentielle-ment.

L’interet de cette presentation axiomatique del’algebre des termes est que l’on peut en deduireun algorithme de resolution des contraintesd’egalite, par une simple orientation des axiomesen un systeme complet de simplification descontraintes. La methode est assez generale dansla mesure ou elle peut s’appliquer a des structurestres diverses. Elle consiste a definir des formesdites resolues des systemes de contraintes, pourlesquelles la question de la satisfiabilite est tri-viale, et ensuite a trouver une orientation desaxiomes qui permette de transformer tout systemede contraintes en une forme resolue. Dans lecas present, un systeme de contraintes est uneconjonction d’egalites entre termes, M1 = N1 ∧...∧Mn = Nn, que l’on cherche a resoudre par sub-stitution des variables (probleme d’unification), etl’on prend comme formes resolues, les systemes dela forme x1 = M1 ∧ ... ∧ xn = Mn, ou n ≥ 0 et{x1, ..., xn} ∩ (V (M1) ∪ ... ∪ V (Mn)) = ∅, V (M)designant l’ensemble des variables apparaissantdans le terme M . En effet dans ces cas, la sub-stitution des variables xi par le terme Mi fournitune solution triviale. La demarche consiste donc atrouver un ensemble de regles de simplification dessystemes de contraintes qui preserve l’ensembledes solutions et aboutisse toujours a une formeresolue. Le systeme de regles suivant a ete donnequasiment sous cette forme par Herbrand dans sathese en 1928, puis redecouvert en 1965 par Ro-binson dans l’algorithme d’unification a la base deson principe de resolution en demonstration auto-matique.

1. f(M1, ..., Mn) = f(N1, ..., Nn) ∧ Γ

−→ M1 = N1 ∧ ... ∧ Mn = Nn ∧ Γ,

2. f(M1, ..., Mn) = g(N1, ..., Nm) ∧ Γ

−→ faux si f 6= g,

3. x = x ∧ Γ −→ Γ,

4. x = M ∧ Γ −→ x = M ∧ Γ[M/x]

si x 6∈ V (M), x ∈ V (Γ),

5. x = M ∧ Γ −→ faux si x ∈ V (M), x 6= M .

Les deux premieres regles de decomposition desegalites sont de simples orientations des deuxaxiomes de decomposition de CET, la troisiemeregle correspond au premier axiome d’egalite,la quatrieme consiste a effectuer un remplace-ment d’egal par egal, elle est justifiee par lestrois axiomes de l’egalite standard et restreintedans son application de facon a ne pas boucler

Page 6: Programmation logique et contraintes · pr edicat queens en posant que L est une liste de N el emen ts (repr esen tant les reines par ligne) a valeurs dans [1;N] (repr esentant leur

“Fages” — 2005/1/13 — 9:43 — page 6 — #6i

i

i

i

i

i

i

i

6 Programmation logique et contraintes

indefiniment. La derniere regle est une orientationde l’axiome de test d’occurrence. Comme toutesles regles decoulent des axiomes, elles preserventl’ensemble des solutions du systeme.

Une fois montree la terminaison de ce systemede regles de simplification (en montrant ici quele couple forme du nombre de variables en formenon resolue suivi du nombre de symboles dansle systeme de contraintes, decroıt strictementdans l’ordre lexicographique, a chaque applica-tion d’une regle), il suffit de remarquer, en rai-sonnant par cas, que les formes irreductibles sontforcement soit faux soit des formes resolues. Onen deduit, d’une part, que le calcul des formesirreductibles par application successive des reglesfournit un algorithme de decision de la satisfia-bilite des contraintes d’egalites entre termes, eten fait un algorithme de resolution dans la me-sure ou les formes resolues calculees donnent ex-plicitement la forme la plus generale des solutions,et d’autre part, que la theorie CET est completepour le fragment existentiel conjonctif correspon-dant au probleme d’unification.

CET est en fait une theorie complete per-mettant de decider de la verite d’une formulelogique close quelconque dans le domaine deHerbrand si l’on suppose l’alphabet SF infini(dans le cas fini, SF = {f1, ..., fk}, il faut ajou-ter l’axiome ∀x∃y1, ..., yn x = f1(y1, ..., yn1

) ∨... ∨ x = fk(y1, ..., ynk

)). Vorobyov a cependantmontre en 1996 que ce probleme avait une com-plexite stupefiante, non elementaire, c’est-a-direnon bornee par une tour quelconque de fonc-tions exponentielles ! Le fragment existentiel quinous occupe pour les problemes d’unification aquant a lui une complexite algorithmique lineaire,qui s’obtient en representant les termes par desgraphes etiquetes, et en controlant l’ordre d’ap-plication des regles suivant une strategie de par-cours du graphe particuliere. Des formes res-treintes de contraintes avec negation et quanti-ficateurs, comme par exemple ∀y ¬x = f(y), neposent pas non plus de problemes de complexiteet ont ete introduites dans le langage Prolog IIpar Colmerauer au debut des annees 1980.

Les principes de resolution de contraintespar regles de simplification s’appliquent ade nombreux autres domaines. L’algorithmed’elimination de Fourier (1824) en est un exemplesur les nombres reels. Cet algorithme per-met de decider de la satisfiabilite d’un en-semble d’inegalites lineaires sur R, c’est-a-diregeometriquement, de la non-vacuite d’un po-lyhedre dans Rn. Dans cet algorithme, on ditqu’une inegalite (ou par extension un systemed’inegalites) est en forme normale si elle est del’une des trois formes t ≤ x, x ≤ t, t ≤ 0, ou t estune expression lineaire et x une variable n’appa-

raissant pas dans t. Pour une contrainte s ≤ t onnote s ≤ t

xsa forme normale par rapport a x, que

l’on obtient par simple manipulation algebrique.L’algorithme de Fourier consiste a appliquer lesregles suivantes :

1. Γ −→Vn

i=1

Vm

j=1 si ≤ tj ∧ Γ′ si Γx

=Vn

i=1 si ≤ x∧Vm

j=1 x ≤ tj∧Γ′ ou x 6∈ V (Γ′),

2. s ≤ t ∧ Γ −→ Γ si s, t ∈ R et s ≤ t,

3. s ≤ t ∧ Γ −→ faux si s, t ∈ R et s > t.

La premiere regle elimine une variable et preservela satisfiabilite du systeme. Les deux autres reglespreservent l’ensemble des solutions. Clairement,les regles terminent et un systeme est satisfiable siet seulement s’il se simplifie en le systeme vide. Decet algorithme general, on peut deduire d’autresalgorithmes de projection des contraintes, dedetection des contraintes d’egalite implicites, ainsique plusieurs theoremes de la programmationlineaire dont le theoreme fondamental de dualite.

Dans le cas des contraintes booleennes,il est possible de definir des formes cano-

niques, c’est-a-dire des representants uniquesdes classes d’equivalence des contraintes modulol’equivalence logique. Les formes canoniques per-mettent donc de decider non seulement de lasatisfiabilite des contraintes, en verifiant que laforme canonique n’est pas faux, mais aussi del’equivalence logique entre deux contraintes entestant simplement l’egalite de leurs formes ca-noniques. Les diagrammes de decision binaires(BDD, Binary Decision Diagrams) introduits parBryant en 1985, sont des formes canoniques pourles contraintes booleennes. Il s’agit de graphesobtenus en fixant un ordre d’enumeration desvariables et en effectuant un partage maximumdes sous-graphes. Les sommets sont etiquetes pardes contraintes booleennes, et les sommets du ni-veau i ont pour successeurs deux sommets cor-respondants a la simplification de la contraintepar la valuation xi = 0 (faux) et xi = 1(vrai) respectivement. La racine est etiqueteepar la contrainte booleenne d’origine, et les deuxsommets du dernier niveau sont etiquetes parfaux et vrai. Les BDD sont tres utilises pourrepresenter les contraintes booleennes dans desdomaines aussi varies que la conception de cir-cuits, la verification de programmes ou la pro-grammation par contraintes.

3.2 Resolution incomplete par reduction dedomaines

Si on abandonne l’idee de fournir une methodede resolution complete pour le langage descontraintes, il demeure neanmoins possible dededuire des informations partielles sur le do-maine des variables, en examinant les contraintesindependamment les unes des autres. Cette idee,

Page 7: Programmation logique et contraintes · pr edicat queens en posant que L est une liste de N el emen ts (repr esen tant les reines par ligne) a valeurs dans [1;N] (repr esentant leur

“Fages” — 2005/1/13 — 9:43 — page 7 — #7i

i

i

i

i

i

i

i

Resolution de contraintes 7

introduite en Intelligence Artificielle au milieu desannees 70 par Mackworth notamment, a ete re-prise avec un grand succes en programmation parcontraintes car elle s’applique a des contraintes denatures tres diverses.

Pour definir les algorithmes de filtrage, aussiappeles algorithmes de propagation de contraintes,on introduit la notion de domaine reduit r(xd1

1 , c)

d’une variable x1 de domaine d1, note xd1

1 ,

par rapport a une contrainte c(xd1

1 , ..., xdn

n ),comme etant le domaine obtenu par projectionde l’ensemble des solutions sur chaque variable :r(xd1

1 , c) = {v ∈ d1 | D |= ∃x2 ∈ d2...∃xn ∈dn c(v, x2, ..., xn)}. Cette notion s’applique a desdomaines quelconques, finis, discrets ou infinis,et peut etre limitee a une representation des do-maines par des intervalles.

Par exemple, pour une contrainte sur N de laforme : aX [k,l] ≥ bY [m,n] + d, a > 0, b > 0, d ≥ 0ou les domaines des variables sont representes pardes intervalles finis, le calcul du domaine reduits’effectue en temps constant : on a r(X [k,l], c) =

[max(k, k′), l] et r(Y [m,n], c) = [m, min(n, n′)] ouk′ = d bm+d

ae and n′ = bal−d

bc.

Dans un systeme de contraintes, si les do-maines des variables sont egaux a leur domainereduit par rapport a toutes les contraintes, ondit que le systeme est arc-coherent (pour desraisons historiques de reference au graphe descontraintes, ou les sommets sont les variableset les aretes les contraintes binaires, et a l’hy-pergraphe des contraintes dans le cas n-aire).Bien sur, la coherence d’arc n’implique en rien lacoherence du systeme de contraintes. Par exemplesi x, y, z ∈ {1, 2}, le systeme x 6= y ∧ x 6=z ∧ y 6= z est arc-coherent et n’admet pourtantpas de solution. Cette notion permet cependantde determiner la correction des algorithmes defiltrage, car elle definit les reductions maximumque l’on peut effectuer en raisonnant sur chaquecontrainte independamment les unes des autres.

Les algorithmes de filtrage appliquent lesregles generales de reduction de domaine sui-vantes :

Faux : c ∧ Γ −→ fauxsi r(xd, c) = ∅ pour un xd ∈ V (c) ;

FC : c ∧ Γ −→ Γ[xd′

/xd]si V (c) = {xd}, d′ = r(xd, c), d′ 6= ∅ ;

LA : c ∧ Γ −→ c[xd′

/xd] ∧ Γ[xd′

/xd]si |V (c)| > 1, xd ∈ V (c), d′ = r(xd, c), d′ 6=∅, d′ 6= d ;

PLA : c ∧ Γ −→ c[xd′

/xd] ∧ Γ[xd′

/xd]si |V (c)| > 1, xd ∈ V (c), r(xd, c) ⊆ d′ ⊂ d,d′ 6= ∅ ;

EL : c ∧ Γ −→ Γsi D |= cρ pour toute valuation ρ des va-riables de c par des valeurs de leur domaine.

La regle Faux detecte l’insatisfiabilite lorsqu’unevariable a un domaine vide. La regle FC (for-ward checking) s’applique lorsqu’une contrainte necontient plus qu’une seule variable. Dans ce cas lacontrainte peut etre eliminee en remplacant sim-plement le domaine de la variable par son domainereduit. La regle LA (look-ahead) applique le calculdu domaine reduit aux contraintes contenant plu-sieurs variables, la contrainte n’est pas eliminee.La regle PLA (partial look-ahead) est une variantede la regle LA qui sert simplement a distinguer lesalgorithmes qui calculent seulement une approxi-mation superieure du domaine reduit. La regled’elimination EL elimine les contraintes satisfaitesen effectuant un test approximatif d’implicationde contraintes fonde sur le domaine des variables.Un algorithme de filtrage peut appliquer tout oupartie de ces regles a chaque modification du do-maine des variables suivant plusieurs strategies dereveil possibles (retrait d’une valeur quelconque,d’une borne uniquement, affectation, etc.).

Dans le cas tres particulier d’un systeme decontraintes sur N de la forme aX [k,l] ≥ bY [m,n]+d,a > 0, b > 0, d ≥ 0, signalons un resultatde completude : un tel systeme est satisfiable siet seulement s’il est arc-coherent. Pour le voiril suffit de remarquer que dans un tel systemearc-coherent, chaque inegalite est satisfaite enprenant la plus petite valeur des variables, etque cette valuation est donc une solution dusysteme entier. Ce resultat est important pourles problemes d’ordonnancement. En effet unecontrainte de la forme X ≥ Y + d permet demodeliser la precedence d’une tache de dureed demarrant a la date Y sur une autre tachedemarrant en X. La completude de l’algorithmede filtrage pour ce type de contraintes signifiequ’il est inutile d’enumerer les dates de debutdes taches pour connaıtre les plus petites valeursrealisables. Il s’ensuit que les temps d’executionobtenus en programmation par contraintes sur desproblemes (NP-difficiles) d’ordonnancement sontindependants de la discretisation du temps.

En general, les algorithmes de filtrage ne sontpas complets et sont combines a une procedured’enumeration des valeurs possibles pour trouverles solutions. C’est le cas dans l’exemple simpledu puzzle SEND+MORE=MONEY qui consistea trouver une valuation des lettres par des chiffrestous differents verifiant l’equation :

send(L):-

L=[S,E,N,D,M,O,R,Y], domain(L,[0,9]),alldifferent(L), 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(L).

Page 8: Programmation logique et contraintes · pr edicat queens en posant que L est une liste de N el emen ts (repr esen tant les reines par ligne) a valeurs dans [1;N] (repr esentant leur

“Fages” — 2005/1/13 — 9:43 — page 8 — #8i

i

i

i

i

i

i

i

8 Programmation logique et contraintes

Fig. 1.2 – Effets de la pose des contraintes sur le domaine des variables dans le puzzleSEND+MORE=MONEY.

Dans ce programme, les inequations notees =/=,ainsi que la contrainte alldifferent decomposeeen inequations, sont propagees avec la regleFC. La contrainte lineaire est propagee avecla regle PLA (et non LA car cette contrainteignore les trous dans les domaines). Cela suffitdans cet exemple a trouver la solution de facondeterministe sans echec. La figure 1.2 montre l’ef-fet de la pose des contraintes et de l’enumerationsur le domaine des variables, qui conduisent direc-tement a la solution.

3.3 Contraintes globales

La terminologie de contrainte glo-bale a ete introduite par opposition a ladecomposition d’une contrainte n-aire, commepar exemple alldifferent([X1,...,Xn]), enune conjonction de contraintes binaires, commeVn

i=1

Vn

j=i+1 Xi 6= Xj. Une contrainte globaleest donc tout simplement une contrainte n-aire,qui permet de modeliser un sous-probleme d’unprobleme de satisfaction de contraintes, maispour qu’elle soit interessante, elle doit etre soitindecomposable, soit pourvue d’algorithmes deresolution (complets ou incomplets) plus efficacesque ceux obtenus par decomposition.

Dans l’exemple de la contrainte ternairealldifferent([X,Y,Z]), on a vu que lesreductions de domaine ne permettent pas dedetecter l’insatisfiabilite du systeme decompose

lorsque les variables ont un meme domaine formede deux elements, alors qu’un simple raisonne-ment sur la cardinalite de l’ensemble des valeurspossibles permettrait de detecter l’insatisfiabilite.En 1994, Regin a propose un algorithme de filtragepour la contrainte alldifferent qui consiste arepresenter la contrainte par un graphe biparti,ayant pour sommets les variables V et l’ensembledes valeurs des domaines D, et pour aretes les as-sociations permises par les domaines :

2

x

y

z

1

L’adaptation incrementale de l’algorithme de cou-plage de Hopcroft et Karp de 1973 fournit alorsun algorithme de filtrage de complexite lineaire enle nombre d’aretes du graphe.

Le fort succes de la programmation parcontraintes en resolution de problemes d’opti-misation combinatoire industriels, a conduit audeveloppement de nombreuses contraintes glo-bales depuis les annees 90. On en compte au-jourd’hui de l’ordre de 200, elles reposent surdivers changements de representation, faisantsouvent appel a la theorie des graphes, et al’adaptation d’algorithmes connus, en des algo-

Page 9: Programmation logique et contraintes · pr edicat queens en posant que L est une liste de N el emen ts (repr esen tant les reines par ligne) a valeurs dans [1;N] (repr esentant leur

“Fages” — 2005/1/13 — 9:43 — page 9 — #9i

i

i

i

i

i

i

i

Procedures de recherche 9

rithmes incrementaux de test de satisfiabilite etde reduction des domaines.

3.4 Contraintes reifieesLes contraintes reifiees sont des contraintes

d’ordre superieur qui consistent a associer unbooleen a la satisfaction d’une contrainte dansun autre domaine. Il s’agit donc de contraintesde la forme generale B <=> contrainte, que l’onpeut voir comme des contraintes n-aires multi-domaines, et donc comme des contraintes globalesparticulieres. Par exemple la contrainte ternaireB <=> X<Y exprime que le booleen B est vrai siet seulement si X < Y . Cette contrainte pose lacontrainte X < Y (resp. X ≥ Y ) si B est vrai(resp. faux) et inversement, positionne B a vrai(resp. faux) si la contrainte X < Y est satisfaite(resp. insatisfiable).

Les contraintes reifiees necessitent donc, enplus de tester l’insatisfiabilite des contraintes debase de facon a positionner le booleen a faux, dedetecter l’implication des contraintes de base, defacon a positionner le booleen a vrai dans ce cas.Ce test d’implication de contrainte est l’operationfondamentale realisee par les contraintes reifiees.On retrouve par ailleurs ce test d’implication decontraintes ajoute de facon systematique commeprincipe de synchronisation dans les langagesconcurrents avec contraintes (voir section 5.2). Letest d’implication de contraintes est un problemegeneralement plus difficile que le test de sa-tisfiabilite (il est par exemple co-NP pour lesclauses booleennes alors que la satisfiabilite estNP-complet). On se contente donc generalementde tests incomplets, reposant sur des conditionssuffisantes sur le domaine des variables, commedans la regle d’elimination EL de la section 3.2.Par exemple, on teste que la contrainte X < Yest impliquee par les autres contraintes (resp. estinsatisfiable), en testant simplement la conditionsur le domaine des variables max(X) < min(Y )(resp. min(X) ≥ max(Y )).

Les contraintes reifiees permettent de definirtres simplement, par recursion, des contraintesde cardinalite. Par exemple, la contraintecard(N, [C1, ..., Cm]) qui est vraie si et seulementsi exactement N contraintes sont vraies dans laliste [C1, ..., Cm], se definit en programmation lo-gique (voir section 5.1) par recursion sur N avecun fait et une regle recursive :

card(0,[]).

card(N,[C|L]):- domain(B,0,1), B<=>C,

N=B+M, card(M,L).

Ces contraintes offrent une puissance demodelisation tres grande, qui n’a pas d’equivalentdans les outils, par ailleurs tres puissants, deprogrammation lineaire en nombres entiers. En

ordonnancement disjonctif par exemple, unecontrainte d’exclusion mutuelle entre deux taches,l’une de duree dx demarrant a la date X, l’autrede duree dy demarrant en Y , peut s’exprimerpar la contrainte card(1,[X>=Y+dy,Y>=X+dx])

dont l’effet est d’automatiquement poser la bonnecontrainte de precedence des que la contraintealternative devient insatisfiable.

4 Procedures de recherche

4.1 Arbre de rechercheUn arbre de recherche est un arbre dans le-

quel chaque noeud est etiquete par une conjonc-tion de buts (parallelisme ”et”) dont un sous-but est distingue. Chaque noeud a autant desuccesseurs qu’il y a de facons de transfor-mer le sous-but distingue. Chaque successeurest etiquete par la conjonction de buts obtenueen appliquant une regle de transformation ausous-but selectionne. Les successeurs d’un noeudrepresentent les differentes facons de transformerun but et representent donc une disjonction (pa-rallelisme ”ou”).

En programmation par contraintes, l’arbre derecherche permet de traiter les buts disjonctifs,chaque branche de l’arbre correspondant au cal-cul deterministe des contraintes accumulees surles nœuds. Ainsi les contraintes d’appartenancea un domaine fini peuvent etre traitees commedes disjonctions avec le systeme non-deterministed’enumeration suivant :

x ∈ {v1, ..., vn} −→ x = v1

...

x ∈ {v1, ..., vn} −→ x = vn

Les contraintes d’intervalles peuvent etre traiteesavec le systeme de recherche dichotomique :

x ∈ [v1, v2] −→ x ∈ [v1, (v1 + v2)/2]

x ∈ [v1, v2] −→ x ∈ ](v1 + v2)/2, v2]

Plus generalement des contraintes disjonctivesquelconques se traitent avec le systeme non-deterministe :

c1 ∨ c2 −→ c1

c1 ∨ c2 −→ c2

Ce traitement des contraintes disjonctives permetpar exemple d’enumerer tous les choix d’ordon-nancement des contraintes d’exclusion mutuelle(en complement de leur expression eventuelle parla contrainte de cardinalite decrite dans la section3.4). De facon generale, on modelise tres facile-ment des algorithmes de complexite NP par l’ex-ploration d’un arbre de recherche avec un systemede contraintes de complexite polynomiale.

Page 10: Programmation logique et contraintes · pr edicat queens en posant que L est une liste de N el emen ts (repr esen tant les reines par ligne) a valeurs dans [1;N] (repr esentant leur

“Fages” — 2005/1/13 — 9:43 — page 10 — #10i

i

i

i

i

i

i

i

10 Programmation logique et contraintes

L’exploration de l’arbre de recherche associeaux domaines des variables permet de pallierl’incompletude des algorithmes de filtrage descontraintes en effectuant une enumeration desvaleurs possibles des variables. Dans ce cas, lescontraintes sont utilisees de facon active pourdetecter en chaque noeud de l’arbre les cas d’in-satisfiabilite, et donc elaguer les branches del’arbre de recherche le plus tot possible avantenumeration complete.

Dans l’exemple des N reines donne en in-troduction, l’arbre de recherche est forme parl’enumeration des variables de domaines finis.Les contraintes d’inequations sont propagees sim-plement avec la regle FC en eliminant la va-leur correspondante a chaque instanciation d’unevariable. La figure 1.1 montre l’effet de cescontraintes sur l’arbre de recherche. On remarqueen particulier que les branches qui ne conduisentpas a une solution sont stoppees relativement totdans l’arbre.

4.2 HeuristiquesLes heuristiques sont des guides pour effectuer

des choix, et sont d’une grande importance dansles resultats obtenus aujourd’hui en programma-tion par contraintes. Dans les arbres de recherches,aux deux formes de parallelisme “et” et “ou”,correspondent deux principes heuristiques qu’ilconvient de distinguer.

En parallelisme ”et”, le choix du sous-buta resoudre, par exemple le choix de la va-riable a instancier d’abord, ou le choix dela contrainte disjonctive a traiter en premier,consiste generalement a suivre une heuristiqued’echec d’abord (first fail). Cette heuristiqueconsiste a choisir en chaque nœud le sous-butle plus difficile a resoudre, celui qui apporte leplus d’information, risque le plus de conduire aun echec et donc a s’arreter plus tot dans l’ex-ploration, et limiter ainsi le nombre de sous-arbres developpes. Pour le choix d’une variablea instancier, cela peut consister a choisir la va-riable de plus petit domaine, ou la variable laplus contrainte par exemple. De facon generale,le choix d’un sous-but ayant le plus petit nombred’alternatives conduit a minimiser la taille del’arbre de recherche. En particulier, il est impor-tant de detecter le cas extreme des buts devenusdeterministes pour les traiter en premier, commecela a ete mentionne a propos des contraintes d’ex-clusion mutuelle avec la contrainte de cardinalite.

En parallelisme “ou”, le choix de la transfor-mation a essayer d’abord, par exemple le choix dela valeur a essayer en premier pour une variable,ou le choix de la precedence a essayer en pre-mier dans une contrainte d’exclusion mutuelle, sefait generalement suivant l’heuristique du meilleur

d’abord (best-first). L’objectif est de trouver enpriorite une solution, ou une bonne solution dansun probleme d’optimisation.

Il est important de noter que les heuristiquesde parallelisme ”et” influent sur la forme de

l’arbre de recherche et ont donc une influence di-recte sur les performances de la recherche des so-lutions et de la preuve d’optimalite. En revanche,les heuristiques de parallelisme ”ou” influent uni-quement sur l’ordre d’exploration de l’arbre derecherche. Elles influent donc sur le temps derecherche et la qualite des premieres solutionstrouvees, mais n’ont aucun effet sur l’enumerationde toutes les solutions, ni sur les preuves d’insatis-fiabilite tout comme sur les preuves d’optimalite.

La notion d’heuristique est souvent associeea tort a celle d’algorithme incomplet. Dans lecas d’un algorithme ”glouton”, une heuristiqueest utilisee pour effectuer des choix a chaqueetape de facon irrevocable. Un tel algorithme estbien sur incomplet, il correspond a l’explorationde la seule branche la plus a gauche de l’arbrede recherche heuristique. En programmation parcontraintes, les choix heuristiques n’affectent enrien la completude de la procedure de recherchequi peut explorer completement ou non l’arbre derecherche quelles que soient les heuristiques.

A cet egard, les heuristiques de parallelisme”ou” peuvent etre utilisees pour explorer l’arbrede recherche de facon incomplete avec une bonnerepartition des differentes branches explorees.L’idee de la recherche a ecarts limites est d’au-toriser un nombre maximum de fois ou l’heuris-tique de parallelisme ”ou” n’est pas suivie le longd’une branche. L’effet de la recherche a ecarts li-mites est d’explorer une partie seulement de l’en-semble des branches de l’arbre mais avec unebonne repartition dans les differents sous-arbres.

4.3 Optimisation par separation-evaluationDans un probleme d’optimisation, on ne

cherche pas seulement a satisfaire des contraintes,mais a trouver des solutions qui minimisent (oumaximisent) la valeur d’une fonction objectif F .La procedure generale de separation-evaluation(branch-and-bound) se prete parfaitement bien ala programmation par contraintes. Elle consistea chercher une premiere solution en parcourantl’arbre de recherche, a evaluer son cout v donnepar la fonction objectif, et a continuer (ou aredemarrer) la recherche en ajoutant la contrainteF < v. La contrainte de cout F < v est pro-pagee comme n’importe quelle autre contraintepour elaguer l’arbre de recherche en chaque nœud.L’echec a trouver de nouvelles solutions en explo-rant l’arbre de recherche constitue la preuve d’op-

timalite du dernier cout trouve. L’ensemble dessolutions optimales peut etre enumere, si besoin,

Page 11: Programmation logique et contraintes · pr edicat queens en posant que L est une liste de N el emen ts (repr esen tant les reines par ligne) a valeurs dans [1;N] (repr esentant leur

“Fages” — 2005/1/13 — 9:43 — page 11 — #11i

i

i

i

i

i

i

i

Procedures de recherche 11

Fig. 1.3 – Dates possibles de debut des taches dans une solution prouvee optimale du problemed’ordonnancement disjonctif du pont.

en relancant une recherche avec le cout fixe a savaleur optimale.

Dans un probleme d’ordonnancement disjonc-tif on cherche a planifier des taches de facon aterminer la derniere tache du projet au plus tot,ceci en presence de contraintes de dates possiblesde demarrage de chaque tache, de contraintes deprecedence entre taches, et de contraintes d’ex-clusion mutuelle qui rendent le probleme NP-difficile. Si on modelise les precedences par descontraintes de la forme X ≥ Y + dy et lescontraintes d’exclusion mutuelle par des disjonc-tions X ≥ Y + dy ∨ Y ≥ X + dx traitees pardes points de choix dans l’arbre de recherche, lescontraintes accumulees le long d’une branche de-meurent de cette forme simple et la methode dereduction des domaines est complete (voir sec-tion 3.2). Il n’est donc pas necessaire d’enumererles valeurs des dates pour garantir que la pluspetite valeur du domaine de toute variable estrealisable. En particulier le cout d’une solutiontrouvee en une feuille de l’arbre de recherche estdonne par la plus petite valeur du domaine de lavariable de fin du projet, qui constitue la fonc-tion objectif. Une solution prouvee optimale peutainsi contenir des dates flexibles pour certainestaches ne se trouvant pas sur un chemin critiquedans le graphe de precedence. Une telle solutionest visualisee dans la figure 1.3, d’autres solu-tions optimales existent correspondant a d’autres

choix de precedences dans les contraintes dis-jonctives. La figure 1.4 montre l’arbre de re-cherche qui est explore pour ce probleme. Elleest typique d’une procedure d’optimisation parseparation-evaluation avec redemarrage : les so-lutions trouvees sont successivement de cout 110,106, 104, puis un arbre d’echec est developpemontrant ainsi l’optimalite du cout 104 pour lafonction objectif. Dans cet exemple la solutionoptimale est recalculee ensuite en fixant le coutegal a 104, de facon a enumerer eventuellementtoutes les solutions optimales. Ce petit exemplecontient 44 variables et est resolu en 10ms preuved’optimalite comprise. Des exemples d’ordonnan-cement proposes comme challenges en RechercheOperationnelle ont ete resolus en programmationpar contraintes par ce type de methode, aug-mentee de contraintes globales pour les ensemblesde taches en exclusion mutuelle, ainsi que d’heu-ristiques de recherche pouvant consacrer un tempssubstantiel a determiner la bonne disjonction a ex-plorer en premier.

4.4 Recherche locale

Les procedures de recherche locale ne font paspartie a proprement parler de la programmationpar contraintes, car elles ne travaillent pas sur desstructures d’information partielle (variables) maissur des valuations (valeurs fixees). De plus ellesne permettent jamais de prouver l’insatisfiabilite

Page 12: Programmation logique et contraintes · pr edicat queens en posant que L est une liste de N el emen ts (repr esen tant les reines par ligne) a valeurs dans [1;N] (repr esentant leur

“Fages” — 2005/1/13 — 9:43 — page 12 — #12i

i

i

i

i

i

i

i

12 Programmation logique et contraintes

Fig. 1.4 – Vue de l’arbre de recherche explore dans le probleme du pont.

d’un systeme de contraintes, ni l’optimalite d’unesolution. Cependant les procedures de recherchelocale peuvent s’appliquer a des problemes de sa-tisfaction de contraintes, avec parfois une effica-cite redoutable sur des problemes de tres grandetaille, en calculant des solutions en fait quasi-optimales. Ces procedures permettent de plus detraiter des problemes sur-contraints, ou contenantdes contraintes de preference qui peuvent etre in-satisfaites, en calculant des valuations qui maxi-misent le nombre de contraintes satisfaites.

Le principe d’une procedure de recherche lo-cale est de modifier iterativement une valuationinitiale, qui peut etre aleatoire, de facon a serapprocher d’une solution, tout en combinant unmecanisme d’intensification, d’amelioration conti-nue de la valuation, a un mecanisme de diversifica-

tion, permettant d’echapper aux minima locaux.A chaque etape de la phase d’intensification, laprocedure de recherche locale calcule le voisinagede la valuation courante, c’est-a-dire l’ensembledes valuations atteignables a partir de la valuationcourante en un mouvement, de facon a choisir lameilleure au sens de la satisfaction des contraintes,et a iterer la recherche a partir de cette nou-velle valuation. L’ordre de comparaison des va-luations vis-a-vis de la satisfaction des contraintesne consiste en general pas simplement a compterle nombre de contraintes satisfaites, car ceci nepermettrait pas de guider finement la recherche,mais a sommer des fonctions d’erreur attachees a

chaque contrainte. Les fonctions d’erreur doiventprendre leurs valeurs dans un intervalle normalise[0, Emax], ou la valeur Emax represente l’erreurmaximum, et la valeur 0 represente la satisfactionde la contrainte. Par exemple, pour la contraintex ≥ y + 5, on pourra prendre comme fonctiond’erreur avant normalisation max(y + 5 − x, 0).Dans les problemes de satisfaction de contraintes,on peut utiliser la structuration du probleme en lecouple variables-contraintes pour, a chaque etape,focaliser l’intensification sur la variable qui a leplus grand nombre de contraintes insatisfaites.

Le mecanisme de diversification peut consis-ter simplement a repartir d’une nouvelle configu-ration aleatoire lorsqu’un minimum local est at-teint, c’est-a-dire lorsque plus aucune modifica-tion ne permet d’ameliorer la configuration cou-rante. On peut egalement s’autoriser a degraderla qualite de la configuration courante a uncertain degre, qui est par exemple une fonc-tion decroissante du temps dans les proceduresde recuit simule. Dans les procedures de re-cherche Tabu, une liste de variables est gelee pen-dant un certain nombre de mouvements des lorsqu’un minimum local a ete atteint pour cette va-riable. Dans les algorithmes genetiques, on faitevoluer une population de configurations, aux-quelles on applique des operations de croisement.Ces differentes strategies de diversification s’ap-pellent des meta-heuristiques, car elles permettentde definir differentes familles de procedures de re-

Page 13: Programmation logique et contraintes · pr edicat queens en posant que L est une liste de N el emen ts (repr esen tant les reines par ligne) a valeurs dans [1;N] (repr esentant leur

“Fages” — 2005/1/13 — 9:43 — page 13 — #13i

i

i

i

i

i

i

i

Modeles d’execution 13

cherche locale.Les methodes de recherche locale peuvent per-

mettre de trouver des solutions, ou des solutionsapprochees, a des problemes de tres grande taille,pour lesquels les autres methodes de resolutionechouent. Elles permettent de plus de traiter descontraintes tres variees puisqu’il suffit de definirune fonction d’erreur pour chaque contrainte.Cependant ces methodes trouvent rapidementleurs limites sur les problemes combinant descontraintes heterogenes, car il devient alors dif-ficile de trouver des fonctions d’erreur equitablespour les differentes contraintes, or le moindre biaisa pour effet d’egarer la recherche des meilleuressolutions.

5 Modeles d’execution

On peut distinguer trois grands modelesd’execution de la programmation par contraintes.Le premier niveau consiste a resoudre unprobleme de satisfaction de contraintes (CSP,Constraint Satisfaction Problem), defini par ladonnee d’un ensemble de contraintes entierementfournies en extension au depart. Il s’agit duprobleme pur de satisfiabilite d’une conjonctionde contraintes presente dans les premieres sec-tions. Le second niveau est celui des langagesde programmation logique avec contraintes (CLP,Constraint Logic Programs). Ces langages intro-duisent des definitions inductives de relations pardes clauses logiques. Ces definitions peuvent etreutilisees pour, dans le cas deterministe, poser lescontraintes du probleme, exprimees en intention,ou, dans le cas non-deterministe, definir les pointsde choix et la procedure de recherche. Les pro-grammes donnes en exemple dans les sectionsprecedentes sont tous de cette classe. Ce modeled’execution correspond essentiellement a celui quel’on trouve (avec une syntaxe differente) dans lesbibliotheques de programmation par contraintesen C, C++, Java etc. Le troisieme niveau estcelui des langages concurrents avec contraintes(CC, Concurrent Constraint languages) qui intro-duisent un modele d’execution concurrent utili-sant le test d’implication de contraintes commemecanisme de synchronisation. Ces langages per-mettent d’une part, de programmer certains al-gorithmes de resolution de contraintes, et d’autrepart, d’exprimer par des contraintes le controlede l’execution du programme et synchroniser plu-sieurs modelisations correspondant par exemple adifferentes vues d’un probleme combinatoire.

5.1 Programmation logique avec contraintesCLP(C)

Les langages de programmation logique aveccontraintes sont une generalisation du langageProlog dans laquelle on peut considerer n’im-

porte quel systeme de contraintes, en plus descontraintes d’egalite sur le domaine de Herbrand.Il s’agit donc d’une classe de langages de program-mation parametree par le systeme de contraintesC, que l’on note CLP(C).

En plus de l’alphabet (V , SF , SP ) du langagedes contraintes defini en section 2, on introduitun autre ensemble de symboles de predicats SR

donnes avec leur arite. Les propositions atomiquesformees sur SR, V et SF sont appelees atomes. Unprogramme logique avec contraintes Π est un en-semble de faits et de regles notees

A :-c1,...,cm | A1,...,An.

ou les ci sont des contraintes, les Ai des atomes,m ≥ 0, et n = 0 pour les faits et n > 0 pourles regles. Les regles sont lues comme des implica-tions, la formule logique associee a une regle estla clause ∀X A ⇐ c1 ∧ ... ∧ cm ∧ A1 ∧ ... ∧ An ouX est l’ensemble des variables dans la regle.

Un programme CLP execute un but G de laforme

c1,...,cm|A1,...,An.

dont la formule logique associee est c1 ∧ ... ∧cm ∧ A1 ∧ ... ∧ An, et notee egalement G parabus de notation. D’un point de vue logique, lesreponses fournies sont des contraintes c qui im-pliquent le but, Π,T |= c ⇒ G. D’un point de vueprocedural, les regles sont interpretees en chaınagearriere comme autant de moyens de resoudre lessous-buts. Formellement, le principe de resolutionCSLD exprime la relation de transition entre buts,notee −→, realisee par un interpreteur CLP :

(p(t) : −c′|A1, ..., An)θ ∈ Π D |= ∃X c ∧ s = t ∧ c′

(c|α, p(s), α′) −→ (c, s = t, c′ | α, A1, ..., An, α′)

ou θ est une substitution de renommage des va-riables appliquee a la regle, et X est l’ensembledes variables apparaissant dans les contraintes.L’operation fondamentale realisee a chaque tran-sition est le test incremental de satisfiabilitedes contraintes du but courant, augmentees descontraintes d’appariement des arguments entre lesous-but selectionne et la tete de la regle, ainsique des contraintes introduites dans le corps de laregle. Un reponse calculee pour un but est unecontrainte obtenue par une suite de transitionsse terminant par cette contrainte et ne contenantplus aucun atome.

Ce principe d’execution extremement simplepermet de definir des relations, pour une parten extension a l’aide de faits contraints, etpour une part en intention a l’aide de regleseventuellement recursives. Le programme CLP(R)suivant exprime la formule des interets composespar recursion sur le premier argument du predicat

Page 14: Programmation logique et contraintes · pr edicat queens en posant que L est une liste de N el emen ts (repr esen tant les reines par ligne) a valeurs dans [1;N] (repr esentant leur

“Fages” — 2005/1/13 — 9:43 — page 14 — #14i

i

i

i

i

i

i

i

14 Programmation logique et contraintes

int qui lie le nombre de mois T et le montant ducapital emprunte E au taux d’interet I et auxremboursements mensuels M :

int(T,E,I,M):- T>0, T<=1, M=E*(1+I).

int(T,E,I,M):- T>1, int(T-1,E*(1+I)-M,I,M).

? int(120,120000,0.01,M).M=1721.651381

? int(120,E,0.01,1721.651381).

E=120000

? int(120,E,0.01,M).E=69.700522*M

? int(3,999,Int,400).

400=(-400 +(599+999*Int)*(1+Int))*(1+Int)

Les reponses calculees ne sont pas necessairementdes valuations comme dans les deux premieresrequetes, mais plus generalement des contraintes,accumulees le long de la branche d’execution etprojetees sur les variables du but initial. Dansle dernier exemple, la reponse est une contraintenon-lineaire dont la satisfiabilite n’a pas ete testeepar l’interpreteur.

L’expressivite et la simplicite conceptuelle deslangages CLP se traduisent par des theoremes trespuissants, donnes par Jaffar, Lassez et Maher en1987, de correction et de completude des reponsescalculees vis-a-vis des consequences logiques duprogramme et de la theorie T du domaine, sup-posee complete pour le langage des contraintes :

1. Si c est une reponse calculee pour G alorsΠ, T |= c ⇒ G.

2. Si Π, T |= c ⊃ G alors il existe un ensemblefini de reponses calculees {c1, ..., cn} pourG tel que T |= c ⇒ ∃X1c1 ∨ ... ∨ ∃Xncn ouXi = V (ci) \ V (c).

3. G est en echec fini si et seulement si Π∗, T |=¬G.

Dans le dernier resultat, un but est en echec fini sil’arbre de recherche CSLD est fini et ne contientpas de succes, et Π∗ denote l’ensemble des for-mules logiques obtenues en definissant avec uneequivalence logique un atome p(x) comme la dis-jonction des corps des regles portant sur p en tete.

5.2 Programmation concurrente aveccontraintes CC(C)

La classe des langages concurrents aveccontraintes, introduite par Saraswat en 1989, est

de la meme facon parametree par un systeme decontraintes C. Si on conserve la syntaxe des pro-grammes CLP, la seule operation ajoutee est celle,notee ask(c,G), de synchronisation d’un sous-butG sur la satisfaction de la contrainte de garde c.Tant que la contrainte c n’est pas impliquee parl’ensemble des contraintes accumulees, l’executiondu but G est suspendue. Lorsque la contraintec est satisfaite, le but G est ajoute au but cou-rant. Dans les branches d’execution qui terminent,on distingue alors les succes, qui terminent avecune contrainte comme reponse, des suspensionsqui terminent avec des buts ask.

Dans l’exemple CLP(R) de la sectionprecedente, une contrainte non-lineaire c resteinactive jusqu’a ce qu’elle devienne lineaire. Celapeut etre modelise par un but ask(l,c) ou l estune contrainte exprimant la condition de linearitepour c. Les algorithmes simples de reduction dedomaines de la section 3.2 se pretent egalementbien a une modelisation des propagateurs decontraintes par des buts de la forme ask(c,R), ouc est une condition indiquant la modification dudomaine d’une variable et R est le but effectuantle calcul des domaines reduits. Les contraintesreifiees de la section 3.4 peuvent etre definies pardes programmes CC de la meme maniere.

Dans les programmes CC, le blocage desderivations de l’arbre de recherche contenant desask insatisfaits a pour effet de detruire les resultatsde completude logique que l’on avait pour laresolution CSLD. La recherche d’une semantiquelogique des programmes CC a conduit a unetraduction des programmes CC dans la logiquelineaire de Girard. Cette logique introduite en1987 comme un raffinement de la logique classiquese fonde sur une decomposition de l’implicationen une operation de duplication de l’hypothese etd’implication lineaire qui consomme l’hypothese.En 1997, Fages Ruet et Soliman ont obtenu unresultat de completude logique des succes CC,dans une traduction simple des programmes etdes buts CC en des formules de logique lineaire,identifiant une transition CC a une implicationlineaire. Qui plus est, ce resultat vaut egalementpour des systemes de contraintes non classiquesfondes sur la logique lineaire. Dans cette exten-sion, les langages CC permettent d’exprimer desformes de programmation imperative et de chan-gement d’etats, unifiees a la programmation parcontraintes dans un cadre logique.

Bibliographie

K. Apt. Principles of Constraint Programming. Cambridge University Press, 2003.

A. Colmerauer. Equations and Inequations on Finite and Infinite Trees. Actes de l’International Conference on FifthGeneration Computer Systems, Tokyo, 1984.

F. Fages. Programmation logique par contraintes. Collection cours de l’Ecole Polytechnique, Ellipses, Paris, 1996.

Page 15: Programmation logique et contraintes · pr edicat queens en posant que L est une liste de N el emen ts (repr esen tant les reines par ligne) a valeurs dans [1;N] (repr esentant leur

“Fages” — 2005/1/13 — 9:43 — page 15 — #15i

i

i

i

i

i

i

i

Modeles d’execution 15

F. Fages, P. Ruet et S. Soliman. Linear concurrent constraint programming : operational and phase semantics.Journal of Information and Computation 165(1) :14-41, 2001J. Herbrand. Recherches sur la theorie de la demonstration. These de l’Universite de Paris, 1928. Dans Ecritslogiques, PUF, 1968.G. Huet. Constrained resolution : a complete method for higher-order logic. Ph.D. thesis, Case Western Reserve,USA, 1972.J. Jaffar et J.L. Lassez. Constraint logic programming. Actes de la conference POPL. ACM Pub. 1987.R. Kowalski. Algorithm=Logic+Control. Communications ACM 22(7) :424-436, 1979.A.K. Mackworth. Consistency in networks of relations. Artificial Intelligence Journal, 8(1) :99-118, 1977.J.C. Regin. A Filtering Algorithm for Constraints of Difference in CSPs. Actes de AAAI, pp.362-367. AAAI Press,1994.V. Saraswat. Concurrent constraint programming. MIT Press, 1993.J.R. Shoenfield Mathematical Logic. Addison-Wesley Pub. 1967.P. Van Hentenryck. The OPL Optimization Programming Language. MIT Press, 1999.