La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Programmation Logique par Contraintes

Présentations similaires


Présentation au sujet: "Programmation Logique par Contraintes"— Transcription de la présentation:

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( , _L195) ? creep Call: (12) ==0 ? creep Fail: (12) ==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 CHIP gé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 *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 *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 (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 = 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) indomain(X,Method) Method :
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] ? ; 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 List : liste des variables ou terms
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 Percent minimum 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 Xi sera la ième ville visitée
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 377 201 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

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 Si Ei (souvent t)

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). Y = 2 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)

51 Contraintes Rationnelles
Les variables sont continues (nombre infini de valeurs) Résolution type simplex, Gauss Domaine d ’application Problèmes mathématiques Problèmes financiers (analyse d ’emprunt) utilisé de façon complémentaire aux contraintes sur domaines

52 Définition de variables rationnelles
Nombre rationnel = rapport de deux entiers a/b Variable rationnelle : toute variable utilisée dans une contrainte rationnelle est une variable rationnelle. Déclaration explicite : positive(X) allpositive(List).

53 Termes rationnels Entier ou nombre rationnel Variable rationnelle
t1+t2, t1-t2 (ti sont des termes) -t (t est un terme) c*t, t*c, t/c (t : terme, c : nombre entier ou rationnel)

54 Tests de type rational(X) réussit si X est un nombre rationnel rvar(X)
réussit si X est une variable rationnelle pvar(X) réussit si X est une variable rationnelle positive rlinear(X) réussit si X est un term rationnel linéaire

55 Contraintes arithmétiques sur les rationnels
X, Y : termes rationnels X^=Y X^>=Y X^<=Y X^>Y X^<Y power(X,Pow,Y)(Pow : entier) ne permet pas le calcul des racines nième (pas des rationnels) sqrt(X,Y)

56 Optimisation pour termes rationnels
rmax(X) utilisation du simplex pour trouver la valeur maximum de X rmin(X) valeur maximum de X rmax2(X,Limit) Limit est unifiée à la valeur maximum de X, X n ’est pas unifiée.

57 Exemple Page 61 user ’s guide

58 Regrouper plusieurs contraintes
But : optimiser la résolution linear_block(List) exemple page 62 user guide

59 Trouver les solutions entières
Plus rapide que les domaines, mais moins de type de contraintes cutting(?Obj, +List, -Ncuts,+Time) Obj : terme rationnel à minimiser List : liste de variables Ncuts : nombre de contraintes supplémentaires générées Time: entier non utilisé

60 Arrondis et conversion

61

62 CHIP Les classes


Télécharger ppt "Programmation Logique par Contraintes"

Présentations similaires


Annonces Google