1 / 62

Programmation Logique par Contraintes

Programmation Logique par Contraintes. CHIP P.De Loor. Plan. Limites de la programmation logique. Limites de la programmation logique. Petit programme 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).

stian
Download Presentation

Programmation Logique par Contraintes

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programmation Logique par Contraintes CHIP P.De Loor

  2. Plan • Limites de la programmation logique

  3. Limites de la programmation logique Petit programme 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 ?

  4. Limites de la programmation logique « is » n ’est pas qu ’une unification copie(X,Y):- X is Y. ?- copie(X,56). [WARNING: Arguments are not sufficiently instanciated] Exception: ( 9) _L169 is _G127 ?

  5. Limites de la programmation logique Prolog ne « raisonne » pas sur les opérations 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 !!!

  6. Limites de la programmation logique Petit programme CHIP fact(0,1). fact(X,Y):- X ^> 0, X2 ^= X-1, fact(X2,Z), Y ^=Z*X. ?-fact(5,X). X=120 ? ?-fact(120,Y). Y=5 ?

  7. Limites de la programmation logique Optimiser ? maximiser(, Min, Max, Val ):- X==Max, Y is Val.

  8. Généralités sur la PLC Origines

  9. Généralités sur la PLC Domaines d ’applications

  10. Généralités sur la PLC • Ré-utilisation de la programmation logique, syntaxe prolog. • CLP(X) concepts : J.L Lassez et J. Jaffar 87. • Preuves : - Les solutions trouvées sont correctes. - Toutes les solutions sont trouvées.

  11. CHIPgénéralités • Version industrielle de la PLC • Prolog + contraintes • Société COSYTEC • Contraintes sur Domaines • Contraintes sur Rationnels • Contraintes Booléennes • Classes • Interface Oracle, C, Xwindows • Concurrents : ILOG-SOLVER, PROLOG IV • + générique, + I.A. (déclaratif)

  12. Domaines finis : Applications Types • Emplois du temps • Planification (capacités finies) • Placement d ’objets ou de formes • Optimisation de stratégies (jeux) • Coloriage de cartes • Optimisation de parcours • Problème d ’assignation

  13. Contraintes sur les domaines finis • Un domaine • est une variable X • peut avoir plusieurs valeurs entières. • le nombre des valeurs est fini. • possède des bornes min et max • Les contraintes peuvent être • arithmétiques, • symboliques, • globales …

  14. Contraintes sur les domaines finis : exemple • Puzzle Cryptarithmétique S E N D + M O R E ----------- M O N E Y • Chaque caractère est un chiffre (0..9) [S,E,N,D,M,O,R,Y] :: 0..9

  15. Contraintes sur les domaines finis : exemple • Les contraintes : • Tous les chiffres sont différents alldifferent([S,E,N,D,M,O,R,Y]) • Les nombres ne commencent pas par 0. S^\=0, M^\=0 • L ’addition doit être satisfaite. 1000*S + 100*E + 10*N + D + 1000*M + 100*O + 10*R + E ^= 10000*M + 1000*O + 100*N + 10*E + Y

  16. Contraintes sur les domaines finis : exemple 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,_).

  17. Définition de domaines finis • X est compris entre 1 et 10 X::1..10 • Liste de variables [X1,X2,X3]::1..10 • Limite des domaines entre 0 et 100000 (couteux)

  18. Types de domaines finis • Suite d ’entiers consécutifs X::A..B, (explicitement représentés en mémoire) • Ensemble de valeurs X::[V1, V2, V3], (restriction a priori de domaine : grande liste = couteux) • Intervalles X::A:B, (Seuls le min et le Max sont mis à jour) (très peu couteux pour des grands domaines) (impossibilité d ’enlever des valeurs intermédiaires)

  19. Domaines : exemples • wflags(64).(force l ’affichage des domaines) ?- X::1..5. X = X in {1..5} ? ?- X::1:5. X = X in [1..5] ? ?- X::[5,9,2] ? X = X in {5,9,2} ?

  20. Termes linéaires sur des domaines finis • Un entier naturel (c) • Un domaine (X) • c * X ou X * c (c : entier, X : variable) • X + Y • Pas de négatifs ni de signes « - » dans un terme.

  21. Prédicats d ’information sur les variables • integer(X) • réussit si X est un entier • dvar(X) • réussit si X est une variable à domaine fini • dvarint(X) • réussit si X est un entier ou une variable à domaine fini.

  22. Unification sur les domaines finis • Domaine X et variable « libre » Y • Y devient un domaine équivalent à X. • Domaine X et entier c • si c appartient au domaine, X devient l ’entier c • sinon échec de l ’unification (fail) • Domaine X et Domaine Y • calcul de leur intersection • si intersection vide, échec • si l ’intersection est une valeur, X et Y deviennent un entier de cette valeur • si l ’intersection est un ensemble, les domaines de X et Y sont réduits à cet ensemble

  23. Contraintes arithmétiques sur les domaines X, Y : domaines c : variable entière X #< Y X #<= Y X #> Y X #>= Y X #= Y X #\= Y X #\ Y + c

  24. Contraintes arithmétiques sur les domaines • distance(X,Y,Comp,Dist) • distance : |X-Y| • Comp : (>,=,<) • Dist : entier • notin(X, From, To) • les valeurs de X ne sont pas entre From et To. X::1..10, notin(X,5,9) . X = X in {1..4,10}? X::1:10, notin(X,5,9). No (more) solutions.

  25. Contraintes symboliques sur les Domaines allDifferent(List) atleast(N,List,V) • au moins N de List ont la valeur V atmost(N,List,V) • au plus N de List ont la valeur V maximum(X,List) • le domaine X possède la plus grande valeur de List. minimum(X,List)

  26. Contraintes symboliques sur les domaines circuit(L), - les éléments de L doivent être un circuit Hamiltonien. 38?- length(L,5), L::1..5, circuit(L), labeling(L,0,first_fail,indomain). L = [2, 3, 4, 5, 1] ? ; L = [2, 3, 5, 1, 4] ? ; L = [2, 4, 1, 5, 3] ? ; L = [2, 4, 5, 3, 1] ? ; L = [2, 5, 1, 3, 4] ? ; L = [2, 5, 4, 1, 3] ? ; ... 1 2 4 5 3

  27. Contraintes symboliques sur les domaines element(Index, List, Value) X::0..10, element(X,[3,5,9],C). X X in {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10} C C in <2,5,8>

  28. Prédicats de Choix indomain(X) • choix d ’une valeur de X • par défaut : commence par la plus petite valeur du domaine. indomain(X,Method) Method : - min (idem que indomain/1) - max (la plus grande) - middle - 3 (un entier )

  29. Exemple ex1(X,Y,Z):- [X,Y,Z]::1:100, X #> Y+10, Y #> Z + 25, indomain(X). 97?- ex1(X,Y,Z). X = 38 Y = 27 Z = 1 ? ; 1 call(s) delayed X = 39 Y = Y in [27..28] Z = Z in [1..2] ? ; 1 call(s) delayed X = 40 Y = Y in [27..29] Z = Z in [1..3] ?

  30. Prédicats de choix • Assigner une liste de valeur ? Labeling([]). Labeling([H|T]):- indomain(H), labeling(T). • Dans quel ordre évaluer les variables ? • Quelles valeurs tester ?

  31. Prédicats de choix Labeling(List,Arg,Method,Pred) List : liste des variables ou terms Arg : 0 pour liste de variable n° du terme si liste de term Method : voir page suivante Pred : prédicat d ’affectation, généralement indomain mais possibilité de configuration

  32. Prédicats de choix • Les heuristiques (Méthodes) d ’ordre d ’affectation : first_fail variable de plus petit domaine, théoriquement plus rapide (petit arbre de recherche) most_constrained comme first_fail mais si conflit, préférer la variable intervenant le plus souvent dans les contraintes, solution performante.

  33. Prédicats de choix smallest variable ayant la plus petite valeur de son domaine : économiser de la mémoire. Largest l ’inverse de smallest, utiliser si l ’on connaît une valeur max possible (?) max_regret variable ayant la plus grande différence entre la plus petite et la 2ème plus petite valeur de son domaine ->pour les variables de type cout, ce critère est une bonne mesure du « travail » qu ’il rest à faire (convergence).

  34. Exemple top(L,N):- length(L,N), L::1..N, alldifferent(L), labeling(L,0,first_fail, indomain). 99?- top(L,7). L = [1, 2, 3, 4, 5, 6, 7] ? ; L = [1, 2, 3, 4, 5, 7, 6] ? ; L = [1, 2, 3, 4, 6, 5, 7] ? ; L = [1, 2, 3, 4, 6, 7, 5] ? ...

  35. Prédicats d ’opimisation • Recherche la meilleur solution • Recherche rapide (un  findall  est exclu) min_max(Goal, C) Goal : prédicat à satisfaire C : liste de couts minimise la valeur de C.

  36. Prédicats d ’optimisation Accélérer la recherche : min_max(Coal, C, lower, Upper) Une solution inférieure à lower peut être considérée optimale. Une solution supérieure à Upper ne peut l ’être. min_max(Coal, C, lower, Upper, Percent) fixe un pourcentage Percentminimum entre deux solutions qui se suivent dans la recherche. min_max(Coal, C, lower, Upper, Percent, Timeout) la recherche s ’arrête après Timeout secondes

  37. Exemple top :- X::1..10, Y::1..10, X+2 #< Y, min_max(labeling([X,Y],0,first_fail,indomain),X+Y). 108?- top. THE SOLUTION IS labeling([1, 4], 0, first_fail, indomain) ITS COST IS 5 min_max -> proven optimality

  38. Exemple travel(Cities, Costs) :- Cities=[X1,X2,X3,X4,X5,X6,X7], Costs = [C1,C2,C3,C4,C5,C6,C7], Cities::1..7, element(X1,[0,205,377,581,461,878,345], C1), element(X2,[205,0,882,427,390,1105,540], C2), element(X3,[677,882,0,619,316,201,470], C3), element(X4,[581,427,619,0,412,592,570], C4), element(X5,[461,390,316,412,0,517,190], C5), element(X6,[878,1105,201,592,517,0,69], C6), element(X7,[345,540,470,570,190,691,0], C7), circuit(Cities), min_max(labeling(Costs,0,max_regret,indomain),C1+C2+C3+C4+C5+C6+C7). • Xi sera la ième ville visitée • Ci représente le coût pour aller de la ville i a j. Exemple : pour aller de la ville 2 à la ville 3 ça coute 882

  39. Exemple 29?- travel(Citees,Cout). THE SOLUTION IS labeling([377, 205, 201, 427, 412, 69, 190], 0 ITS COST IS 1881 ----------------------------------------- min_max -> proven optimality Citees = [3, 1, 6, 2, 4, 7, 5] Cout = [377, 205, 201, 427, 412, 69, 190] ? ; no (more) solutions 201 377 3 1 6 205 69 2 7 427 4 5 190 412

  40. Contraintes globales sur domaines diffn(+ListOfRectangle) • Les rectangles ne doivent pas se chevaucher. • Leur position et leur taille sont des domaines diffn([[1,1],[3,2],[5,3]]). • « Rectangles » à n-dimension (hypercubes) • contraintes sur les volumes, les distances, les régions : diffn(+Rectangles, +Min_volume, +Max_volume, +End, +Distances, +Regions) début taille 1 2 3 4 5 6 7 8

  41. Contraintes globales sur Domaines • Contraintes cumulatives • entre ensembles de domaines • basée sur un élément : tache • répartitions (temporelle, 2D, 3D) • 20 méthodes de résolutions conjointes cumulative(Starts, Duration, Resources, Ends, Surfaces, High, End, Intermediate, Interruption). Taux d ’utilisation Exemple de tâche i Hi (souvent t) Si Ei

  42. Contraintes globales sur Domaines Exemple d ’utilisation simplifiée : Si, Di et Ri sont des domaines à définir. cumulative([S1,S2,…Sn], [D1,D2,…,Dn], [R1,R2,…,Rn], unused, unused, Limit, End, unused unused). A tout instant  Ri  Limit Limit End

  43. Contraintes globales sur Domaines • Contraintes de précédence • precedence/5 • cumulative + #<= • Contraintes de cycle • cycle/2 à cycle/12 • exemple 49?- length(L,3), L::1..10, cycle(2,L), labeling(L,0,first_fail,indomain). L = [1, 3, 2] ? ; L = [2, 1, 3] ? ; L = [3, 2, 1] ? ; no (more) solutions 1 1 2 2 3 3 cycle(2,L)

  44. Contraintes globales sur domaines Among/5 Nombre d ’occurrence de valeur dans une suite de domaines : [X1,X2,X3, X4,X5]::1..4, K::1..5, among([1,2,K],[X1,X2,X3,X4,X5],[0,0,0,0,0],[[1,2],[3],[1,3,4]],all), 1 ou 2 apparaissent 1 fois 3 apparaît 2 fois 1,3,4 apparaissent entre 1 et 5 fois

  45. Contraintes globales sur les domaines Utilisation de among top:- [X1,X2,X3, X4,X5]::1..4, K::1..5, among([1,2,K],[X1,X2,X3,X4,X5],[0,0,0,0,0],[[1,2],[3],[1,3,4]],all), labeling([X1,X2,X3,X4,X5],0,most_constrained,indomain), writeln([X1,X2,X3,X4,X5]). 94?- top. [1, 3, 3, 4, 4]

  46. Prédicats d ’information sur les domaines dom(X,L) top(L):- X1::1..4, X1#\=2, dom(X1,L). 37?- top(L). L = [1, 3, 4] ? 39?- X::1..4, indomain(X), dom(X,L). X = 1 L = [1] ? ; X = 2 L = [2] ? ;

  47. Prédicats d ’information sur les domaines domain_info(X,Min,Max,Size,Occurrence,Active) 43?- X::1..4, X#\=3, domain_info(X,Mn,Mx,S,NbO,NbA). X = X in {1..2,4} Mn = 1 Mx = 4 S = 3 NbO = 0 %nb de contraintes où X est utilisée NbA = 0 ? %nb contraintes utilisant X non résolues

  48. Prédicats d ’information sur les domaines 46?- X::1..4, Y::2..6, X#\=3, X#>=Y, domain_info(X,Mn,Mx,S,NbO,NbA). 1 call(s) delayed X = X in {2,4} Y = Y in {2..4} Mn = 2 Mx = 4 S = 2 NbO = 1 NbA = 1 ? 47?- X::1..4, Y::2..6, X#\=3, X#>=Y, indomain(Y), domain_info(X,Mn,Mx,S,NbO,NbA). X = X in {2,4} Y = 2 Mn = 2 Mx = 4 S = 2 NbO = 1 NbA = 0 ?

  49. Prédicats d ’information is_in_dom(X,V). Réussi si la valeur V se trouve dans le domaine X pc(Term). Affiche toutes les contraintes actives sur toutes les variables du term Term

  50. Méthodes de recherche partielles • Propagation conditionelle If Cond then Pred1 else Pred2 Cond doit etre satisfait pour toutes les valeurs des domaines concernés. • Démons de mise à jour touched(Callback, Var, Info, Type) le prédicat Callback(Var,Info) sera appelé lorsque la condition Type sera satisfaite (souvent utilisé avec la bibliothèque graphique XGIP)

More Related