62
1 Programmation Logique par Contraintes CHIP P.De Loor

1 Programmation Logique par Contraintes CHIP P.De Loor

Embed Size (px)

Citation preview

Page 1: 1 Programmation Logique par Contraintes CHIP P.De Loor

1

Programmation Logique par Contraintes

CHIP

P.De Loor

Page 2: 1 Programmation Logique par Contraintes CHIP P.De Loor

2

Plan

• Limites de la programmation logique

Page 3: 1 Programmation Logique par Contraintes CHIP P.De Loor

3

Limites de la programmation logiquePetit 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 ?

Page 4: 1 Programmation Logique par Contraintes CHIP P.De Loor

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 ?

Page 5: 1 Programmation Logique par Contraintes CHIP P.De Loor

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

!!!

Page 6: 1 Programmation Logique par Contraintes CHIP P.De Loor

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 ?

Page 7: 1 Programmation Logique par Contraintes CHIP P.De Loor

7

Limites de la programmation logique

Optimiser ?maximiser(, Min, Max, Val ):-

X==Max,

Y is Val.

Page 8: 1 Programmation Logique par Contraintes CHIP P.De Loor

8

Généralités sur la PLC

Origines

Page 9: 1 Programmation Logique par Contraintes CHIP P.De Loor

9

Généralités sur la PLC

Domaines d ’applications

Page 10: 1 Programmation Logique par Contraintes CHIP P.De Loor

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.

Page 11: 1 Programmation Logique par Contraintes CHIP P.De Loor

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)

Page 12: 1 Programmation Logique par Contraintes CHIP P.De Loor

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

Page 13: 1 Programmation Logique par Contraintes CHIP P.De Loor

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 …

Page 14: 1 Programmation Logique par Contraintes CHIP P.De Loor

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

Page 15: 1 Programmation Logique par Contraintes CHIP P.De Loor

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

Page 16: 1 Programmation Logique par Contraintes CHIP P.De Loor

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,_).

Page 17: 1 Programmation Logique par Contraintes CHIP P.De Loor

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)

Page 18: 1 Programmation Logique par Contraintes CHIP P.De Loor

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)

Page 19: 1 Programmation Logique par Contraintes CHIP P.De Loor

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} ?

Page 20: 1 Programmation Logique par Contraintes CHIP P.De Loor

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.

Page 21: 1 Programmation Logique par Contraintes CHIP P.De Loor

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.

Page 22: 1 Programmation Logique par Contraintes CHIP P.De Loor

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

Page 23: 1 Programmation Logique par Contraintes CHIP P.De Loor

23

Contraintes arithmétiques sur les

domainesX, Y : domaines

c : variable entière

X #< Y

X #<= Y

X #> Y

X #>= Y

X #= Y

X #\= Y

X #\ Y + c

Page 24: 1 Programmation Logique par Contraintes CHIP P.De Loor

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.

Page 25: 1 Programmation Logique par Contraintes CHIP P.De Loor

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)

Page 26: 1 Programmation Logique par Contraintes CHIP P.De Loor

26

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] ? ;

...

Contraintes symboliques sur les domaines

12

4

5

3

Page 27: 1 Programmation Logique par Contraintes CHIP P.De Loor

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>

Page 28: 1 Programmation Logique par Contraintes CHIP P.De Loor

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 )

Page 29: 1 Programmation Logique par Contraintes CHIP P.De Loor

29

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] ?

Exemple

Page 30: 1 Programmation Logique par Contraintes CHIP P.De Loor

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 ?

Page 31: 1 Programmation Logique par Contraintes CHIP P.De Loor

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

Page 32: 1 Programmation Logique par Contraintes CHIP P.De Loor

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.

Page 33: 1 Programmation Logique par Contraintes CHIP P.De Loor

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).

Page 34: 1 Programmation Logique par Contraintes CHIP P.De Loor

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] ?

...

Page 35: 1 Programmation Logique par Contraintes CHIP P.De Loor

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.

Page 36: 1 Programmation Logique par Contraintes CHIP P.De Loor

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

Page 37: 1 Programmation Logique par Contraintes CHIP P.De Loor

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

Page 38: 1 Programmation Logique par Contraintes CHIP P.De Loor

38

Exempletravel(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

Page 39: 1 Programmation Logique par Contraintes CHIP P.De Loor

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

13

6

7

54

2

377 201

69

190412427

205

Page 40: 1 Programmation Logique par Contraintes CHIP P.De Loor

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)

1 2 3 4 5 6 7 8

débuttaille

Page 41: 1 Programmation Logique par Contraintes CHIP P.De Loor

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).

Exemple de tâche i

(souvent t)

Taux d ’utilisation

Si Ei

Hi

Page 42: 1 Programmation Logique par Contraintes CHIP P.De Loor

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

Page 43: 1 Programmation Logique par Contraintes CHIP P.De Loor

43

• Contraintes de précédence– precedence/5– cumulative + #<=

• Contraintes de cycle– cycle/2 à cycle/12 – exemple49?- 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

Contraintes globales sur Domaines

1

23

1

32

cycle(2,L)

Page 44: 1 Programmation Logique par Contraintes CHIP P.De Loor

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

Page 45: 1 Programmation Logique par Contraintes CHIP P.De Loor

45

Contraintes globales sur les domaines

Utilisation de amongtop:-

[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]

Page 46: 1 Programmation Logique par Contraintes CHIP P.De Loor

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] ? ;

Page 47: 1 Programmation Logique par Contraintes CHIP P.De Loor

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

Page 48: 1 Programmation Logique par Contraintes CHIP P.De Loor

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 ?

Page 49: 1 Programmation Logique par Contraintes CHIP P.De Loor

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

Page 50: 1 Programmation Logique par Contraintes CHIP P.De Loor

50

Méthodes de recherche partielles

• Propagation conditionelleIf Cond then Pred1 else Pred2

Cond doit etre satisfait pour toutes les valeurs des domaines concernés.

• Démons de mise à jourtouched(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)

Page 51: 1 Programmation Logique par Contraintes CHIP P.De Loor

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

Page 52: 1 Programmation Logique par Contraintes CHIP P.De Loor

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).

Page 53: 1 Programmation Logique par Contraintes CHIP P.De Loor

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)

Page 54: 1 Programmation Logique par Contraintes CHIP P.De Loor

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

Page 55: 1 Programmation Logique par Contraintes CHIP P.De Loor

55

Contraintes arithmétiques sur les

rationnelsX, 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)

Page 56: 1 Programmation Logique par Contraintes CHIP P.De Loor

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.

Page 57: 1 Programmation Logique par Contraintes CHIP P.De Loor

57

Exemple

• Page 61 user ’s guide

Page 58: 1 Programmation Logique par Contraintes CHIP P.De Loor

58

Regrouper plusieurs contraintes

• But : optimiser la résolutionlinear_block(List)

exemple page 62 user guide

Page 59: 1 Programmation Logique par Contraintes CHIP P.De Loor

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é

Page 60: 1 Programmation Logique par Contraintes CHIP P.De Loor

60

Arrondis et conversion

Page 61: 1 Programmation Logique par Contraintes CHIP P.De Loor

61

Page 62: 1 Programmation Logique par Contraintes CHIP P.De Loor

62

CHIPLes classes