Title: Programmation Logique par Contraintes
1Programmation Logique par Contraintes
2Plan
- Limites de la programmation logique
3Limites de la programmation logique
- Petit programme prolog
- fact(0,1).
- fact(X,Y)-
- X2 is X-1,
- fact(X2,Z),
- Y is ZX.
- ?- fact(3,X).
- X 6
- ?- fact(Y,6).
- WARNING Arguments are not sufficiently
instanciated - Exception ( 9) _L168 is _G123-1 ?
4Limites 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 ?
-
5Limites 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 ZX.
- ?- fact(3,X).
-
-
- Call (11)fact(3-1-1-1, _L195) ? creep
- Call (12) 3-1-1-10 ? creep
- Fail (12) 3-1-1-10 ? creep
- !!!
6Limites de la programmation logique
- Petit programme CHIP
- fact(0,1).
- fact(X,Y)-
- X gt 0,
- X2 X-1,
- fact(X2,Z),
- Y ZX.
- ?-fact(5,X).
- X120 ?
- ?-fact(120,Y).
- Y5 ?
7Limites de la programmation logique
- Optimiser ?
- maximiser(, Min, Max, Val )-
- XMax,
- Y is Val.
8Généralités sur la PLC
9Généralités sur la PLC
10Gé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.
11CHIPgé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)
12Domaines 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
13Contraintes 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
14Contraintes 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
15Contraintes 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.
- 1000S 100E 10N D
- 1000M 100O 10R E
- 10000M 1000O 100N 10E Y
16Contraintes sur les domaines finis exemple
- crypt -
- S,E,N,D,M,O,R,Y0..9,
- alldifferent(S,E,N,D,M,O,R,Y),
- S\0, M\0,
- 1000S 100E 10N D
- 1000M 100O 10R E
- 10000M 1000O 100N 10E 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,_).
17Définition de domaines finis
- X est compris entre 1 et 10
- X1..10
- Liste de variables
- X1,X2,X31..10
- Limite des domaines entre 0 et 100000 (couteux)
18Types de domaines finis
- Suite d entiers consécutifs
- XA..B,
- (explicitement représentés en mémoire)
- Ensemble de valeurs
- XV1, V2, V3,
- (restriction a priori de domaine grande liste
couteux) - Intervalles
- XAB,
- (Seuls le min et le Max sont mis à jour)
- (très peu couteux pour des grands domaines)
- (impossibilité d enlever des valeurs
intermédiaires)
19Domaines exemples
- wflags(64). (force l affichage des domaines)
- ?- X1..5.
- X X in 1..5 ?
- ?- X15.
- X X in 1..5 ?
- ?- X5,9,2 ?
- X X in 5,9,2 ?
20Termes 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.
21Pré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.
22Unification 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
23Contraintes arithmétiques sur les domaines
- X, Y domaines
- c variable entière
- X lt Y
- X lt Y
- X gt Y
- X gt Y
- X Y
- X \ Y
- X \ Y c
24Contraintes arithmétiques sur les domaines
- distance(X,Y,Comp,Dist)
- distance X-Y
- Comp (gt,,lt)
- Dist entier
- notin(X, From, To)
- les valeurs de X ne sont pas entre From et To.
- X1..10, notin(X,5,9) .
- X X in 1..4,10?
- X110, notin(X,5,9).
- No (more) solutions.
25Contraintes 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)
26Contraintes symboliques sur les domaines
- circuit(L),
- - les éléments de L doivent être un circuit
Hamiltonien. - 38?- length(L,5), L1..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
27Contraintes symboliques sur les domaines
- element(Index, List, Value)
- X0..10, element(X,3,5,9,C).
X
X in 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
C
C in lt2,5,8gt
28Pré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,Z1100,
- X gt Y10,
- Y gt 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 ?
30Prédicats de choix
- Assigner une liste de valeur ?
- Labeling().
- Labeling(HT)-
- indomain(H),
- labeling(T).
- Dans quel ordre évaluer les variables ?
- Quelles valeurs tester ?
31Pré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
32Pré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.
33Pré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 -gtpour les variables
de type cout, ce critère est une bonne mesure du
travail qu il rest à faire (convergence).
34Exemple
- top(L,N)-
- length(L,N),
- L1..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 ?
- ...
35Pré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.
36Pré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
37Exemple
- top -
- X1..10,
- Y1..10,
- X2 lt Y,
- min_max(labeling(X,Y,0,first_fail,indomain),XY
). - 108?- top.
- THE SOLUTION IS
- labeling(1, 4, 0, first_fail, indomain)
- ITS COST IS 5
- min_max -gt proven optimality
38Exemple
- travel(Cities, Costs) -
- CitiesX1,X2,X3,X4,X5,X6,X7,
- Costs C1,C2,C3,C4,C5,C6,C7,
- Cities1..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
C2C3C4C5C6C7). - 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
39Exemple
- 29?- travel(Citees,Cout).
- THE SOLUTION IS
- labeling(377, 205, 201, 427, 412, 69, 190, 0
- ITS COST IS 1881
- -----------------------------------------
- min_max -gt 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
5
4
190
412
40Contraintes 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
41Contraintes 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).
Exemple de tâche i
Taux d utilisation
Hi
(souvent t)
Si
Ei
42Contraintes 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
43Contraintes globales sur Domaines
- Contraintes de précédence
- precedence/5
- cumulative lt
- Contraintes de cycle
- cycle/2 à cycle/12
- exemple
- 49?- length(L,3), L1..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)
44Contraintes globales sur domaines
- Among/5
- Nombre d occurrence de valeur dans une suite de
domaines - X1,X2,X3, X4,X51..4,
- K1..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
45Contraintes globales sur les domaines
- Utilisation de among
- top-
- X1,X2,X3, X4,X51..4,
- K1..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,indo
main), - writeln(X1,X2,X3,X4,X5).
- 94?- top.
- 1, 3, 3, 4, 4
46Prédicats d information sur les domaines
- dom(X,L)
- top(L)-
- X11..4,
- X1\2,
- dom(X1,L).
-
- 37?- top(L).
- L 1, 3, 4 ?
- 39?- X1..4, indomain(X), dom(X,L).
- X 1
- L 1 ?
- X 2
- L 2 ?
47Prédicats d information sur les domaines
- domain_info(X,Min,Max,Size,Occurrence,Active)
- 43?- X1..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
48Prédicats d information sur les domaines
- 46?- X1..4, Y2..6, X\3, XgtY,
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?- X1..4, Y2..6, X\3, XgtY, 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
49Pré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 -
50Mé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)
51Contraintes 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
52Dé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).
53Termes rationnels
- Entier ou nombre rationnel
- Variable rationnelle
- t1t2, t1-t2 (ti sont des termes)
- -t (t est un terme)
- ct, tc, t/c (t terme, c nombre entier ou
rationnel)
54Tests 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
55Contraintes arithmétiques sur les rationnels
- X, Y termes rationnels
- XY
- XgtY
- XltY
- XgtY
- XltY
- power(X,Pow,Y)(Pow entier)
- ne permet pas le calcul des racines nième (pas
des rationnels) - sqrt(X,Y)
56Optimisation 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.
57Exemple
58Regrouper plusieurs contraintes
- But optimiser la résolution
- linear_block(List)
- exemple page 62 user guide
59Trouver 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é
60Arrondis et conversion
61(No Transcript)
62CHIPLes classes