Вы находитесь на странице: 1из 73

Programmation par contraintes

Laurent Beaudou
Programmation par contrainte Modélisation Résolution

On se trouve où ?
Un problème, une solution : la solution est-elle une solution
du problème ?
simulation, vérification

2
Programmation par contrainte Modélisation Résolution

On se trouve où ?
Un problème, une solution : la solution est-elle une solution
du problème ?
simulation, vérification

Un problème : trouver la meilleure solution du problème


programmation linéaire

2
Programmation par contrainte Modélisation Résolution

On se trouve où ?
Un problème, une solution : la solution est-elle une solution
du problème ?
simulation, vérification

Un problème : trouver une solution du problème

Un problème : trouver la meilleure solution du problème


programmation linéaire

2
Programmation par contrainte Modélisation Résolution

On se trouve où ?
Un problème, une solution : la solution est-elle une solution
du problème ?
simulation, vérification

Un problème : trouver une solution du problème


programmation par contrainte (CSP)

Un problème : trouver la meilleure solution du problème


programmation linéaire

2
Programmation par contrainte Modélisation Résolution

Un premier exemple

Domaine des variables

x , y ∈ {0, 1 . . . 7}
7
6
Contraintes
5
4
x £y =6
3
x +y =5
2
x >y 1
0
0 1 2 3 4 5 6 7

3
Programmation par contrainte Modélisation Résolution

Un premier exemple

Domaine des variables

x , y ∈ {0, 1 . . . 7}
7
6
Contraintes
5
4
x £y =6
3
x +y =5
2
x >y 1
0
0 1 2 3 4 5 6 7

3
Programmation par contrainte Modélisation Résolution

Un premier exemple

Domaine des variables

x , y ∈ {0, 1 . . . 7}
7
6
Contraintes
5
4
x £y =6
3
x +y =5
2
x >y 1
0
0 1 2 3 4 5 6 7

3
Programmation par contrainte Modélisation Résolution

Un premier exemple

Domaine des variables

x , y ∈ {0, 1 . . . 7}
7
6
Contraintes
5
4
x £y =6
3
x +y =5
2
x >y 1
0
0 1 2 3 4 5 6 7

3
Programmation par contrainte Modélisation Résolution

Un premier exemple

Domaine des variables

x , y ∈ {0, 1 . . . 7}
7
6
Contraintes
5
4
x £y =6
3
x +y =5
2
x >y 1
0
0 1 2 3 4 5 6 7

3
Programmation par contrainte Modélisation Résolution

Un premier exemple

Domaine des variables

x , y ∈ {0, 1 . . . 7}
7
6
Contraintes
5
4
x £y =6
3
x +y =5
2
x >y 1
0
0 1 2 3 4 5 6 7

3
Programmation par contrainte Modélisation Résolution

Programmation par contraintes : plan

1 Programmation par contrainte

2 Modélisation

3 Résolution

4
Programmation par contrainte Modélisation Résolution

Programmation par contraintes : plan

1 Programmation par contrainte

2 Modélisation

3 Résolution

5
Programmation par contrainte Modélisation Résolution

La programmation par contraintes

Objectif

Trouver une solution réalisable

Qui respecte des contraintes faciles à vérifier


Formules mathématiques simples, tableaux de valeurs possibles

Avec des ensembles de valeurs possibles


pour les variables de décision

6
Programmation par contrainte Modélisation Résolution

Domaines

Définition

X1 , X2 . . . Xn les variables de décision

Domaine
La variable Xi doit prendre ses valeurs dans le domaine Di

discret

fini ou infini

7
Programmation par contrainte Modélisation Résolution

Domaines

Exercice

Sont-ce des domaines ?

{1, 2, 3, 4}
L’ensemble des entiers naturels.
L’ensemble des réels
Les entiers naturels impairs
L’intervalle [¡1, 1]
Les points à coordonnées entières du plan

8
Programmation par contrainte Modélisation Résolution

Domaines

Exercice

Sont-ce des domaines ?

{1, 2, 3, 4} ✔
L’ensemble des entiers naturels. ✔
L’ensemble des réels ✘
Les entiers naturels impairs ✔
L’intervalle [¡1, 1] ✘
Les points à coordonnées entières du plan ✔

8
Programmation par contrainte Modélisation Résolution

Contraintes

C’est quoi ? )
Variables
Contraintes
Domaines
Une contrainte restreint les valeurs que l’on peut affecter
simultanément à des variables

9
Programmation par contrainte Modélisation Résolution

Contraintes

C’est quoi ? )
Variables
Contraintes
Domaines
Une contrainte restreint les valeurs que l’on peut affecter
simultanément à des variables

Exemples :
2x + 3y = 12 x 6= 3y
3x 2 =3 (ABC ) forme un triangle isocèle
A∪B ½C x , y , z distincts deux à deux

9
Programmation par contrainte Modélisation Résolution

Contraintes

Déclaration d’une contrainte

2 types de déclaration :

extension : on énumère les valeurs admises


(x = 1 et y = 2) ou (x = 2 et y = 4) ou (x = 3 et y = 0)

intension : on utilise les signes mathématiques connus


x <y

10
Programmation par contrainte Modélisation Résolution

Contraintes

Exemples supplémentaires

Contraintes logiques
Si x = 4 alors y = 5
x = y ou x = 2y

Contraintes globales
Toutes les variables sont différentes

Méta-contraintes
La valeur 5 est utilisée exactement 3 fois

11
Programmation par contrainte Modélisation Résolution

Problème de satisfaction de contraintes

(X , D, C ) tel que

 X = {X1 , X2 , . . . , Xn }
 l’ensemble des variables
D = {D1 , D2 , . . . , Dn } où Di est le domaine de Xi
 C = {C , C , . . . , C } l’ensemble des contraintes

1 2 m

Exemple

X = {a, b, c, d}
D(a) = D(b) = D(c) = D(d) = {0, 1}
C = {a 6= b, c 6= d, a + c < b}

12
Programmation par contrainte Modélisation Résolution

Solution d’un CSP

Une affectation est le fait d’instancier des variables.

A = {(X1 , V1 ), (X3 , V3 ), (X4 , V4 )}


associe la valeur V1 de D1 à la variable X1 ...

Une affectation est :


partielle ou totale
constistante ou inconsistante

Une solution est une affectation totale consistante.

13
Programmation par contrainte Modélisation Résolution

Solution d’un CSP

Problème
X = {a, b, c, d}
D(a) = D(b) = D(c) = D(d) = {0, 1}
C = {a 6= b, c 6= d, a + c < b}

A1 = {(a, 1), (b, 0), (c, 0), (d, 0)}


A2 = {(a, 0), (b, 0)}
A3 = {(a, 1), (b, 0)}
A4 = {(a, 0), (b, 1), (c, 0), (d, 1)}

14
Programmation par contrainte Modélisation Résolution

Solution d’un CSP

Problème
X = {a, b, c, d}
D(a) = D(b) = D(c) = D(d) = {0, 1}
C = {a 6= b, c 6= d, a + c < b}

A1 = {(a, 1), (b, 0), (c, 0), (d, 0)} totale, inconsistante
A2 = {(a, 0), (b, 0)} partielle, inconsistante
A3 = {(a, 1), (b, 0)} partielle, consistante
A4 = {(a, 0), (b, 1), (c, 0), (d, 1)} totale, consistante

A4 est donc une solution

14
Programmation par contrainte Modélisation Résolution

Le jeu du : CSP, pas CSP !

Connaissant les pièces de mon porte-monnaie, puis-je rendre


exactement 8 euros et 57 centimes ?
Connaissant les pièces de mon porte-monnaie, quelle est la
meilleure façon de rendre 8 euros et 57 centimes ?
Est-il possible de colorier une carte avec 5 couleurs sans
frontière monochrome ?
Sur un cercle, trouver un point à distance 2 d’une droite.

15
Programmation par contrainte Modélisation Résolution

Le jeu du : CSP, pas CSP !

Connaissant les pièces de mon porte-monnaie, puis-je rendre


exactement 8 euros et 57 centimes ? ✔
Connaissant les pièces de mon porte-monnaie, quelle est la
meilleure façon de rendre 8 euros et 57 centimes ? ✘
Est-il possible de colorier une carte avec 5 couleurs sans
frontière monochrome ? ✔
Sur un cercle, trouver un point à distance 2 d’une droite. ✘

15
Programmation par contrainte Modélisation Résolution

Programmation par contraintes : plan

1 Programmation par contrainte

2 Modélisation

3 Résolution

16
Programmation par contrainte Modélisation Résolution

Un constat

Un problème est rarement donné sous la forme d’un CSP

17
Programmation par contrainte Modélisation Résolution

Le problème des reines

Jeu : placer 4 reines sur un échiquier 4 £ 4sans qu’elles ne se


menacent

1 2 3 4

18
Programmation par contrainte Modélisation Résolution

Le problème des reines

Jeu : placer 4 reines sur un échiquier 4 £ 4

Une seule dame


par ligne
1 2 3 4
par colonne
par diagonale 1

18
Programmation par contrainte Modélisation Résolution

Le problème des reines

Jeu : placer 4 reines sur un échiquier 4 £ 4

Modélisation
1 2 3 4
variables L1 , L2 , L3 , L4 et
C1 , C2 , C3 , C4 1
domaines Li ∈ {1, 2, 3, 4} et
2
Ci ∈ {1, 2, 3, 4}
contraintes lignes, colonnes
3
et diagonales différentes.
4

18
Programmation par contrainte Modélisation Résolution

Modélisation

Modélisation

variables L1 , L2 , L3 , L4 et 1 2 3 4
C1 , C2 , C3 , C4
1
domaines Li ∈ {1, 2, 3, 4} et
Ci ∈ {1, 2, 3, 4} 2
contraintes 3
∀i 6= j, Li 6= Lj
Ci 6= Cj 4
∀i 6= j, Li + Ci 6= Lj + Cj
Li ¡ Ci 6= Lj ¡ Cj

19
Programmation par contrainte Modélisation Résolution

Modélisation

Attention
Il n’y a pas qu’une modélisation possible !

Modélisation

variables L1 , L2 , L3 , L4 et 1 2 3 4
C1 , C2 , C3 , C4
1
domaines Li ∈ {1, 2, 3, 4} et
Ci ∈ {1, 2, 3, 4} 2
contraintes 3
∀i 6= j, Li 6= Lj
Ci 6= Cj 4
∀i 6= j, Li + Ci 6= Lj + Cj
Li ¡ Ci 6= Lj ¡ Cj

19
Programmation par contrainte Modélisation Résolution

Modélisation

Attention
Il n’y a pas qu’une modélisation possible !

Modélisation

variables L1 , L2 , L3 , L4 1 2 3 4
domaines Li ∈ {1, 2, 3, 4}
1
contraintes
∀i =
6 j, Li 6= Lj 2
∀i =6 j, Li + i 6= Lj + j
3
Li ¡ i 6= Lj ¡ j
4

19
Programmation par contrainte Modélisation Résolution

Exercice : le retour de monnaie

On s’intéresse à un distributeur automatique de boissons.


L’utilisateur insère des pièces de monnaie pour un total de T
centimes d’Euros, puis il sélectionne une boisson, dont le prix est
de P centimes d’Euros (T et P étant des multiples de 10). Il
s’agit alors de calculer la monnaie à rendre, sachant que le
distributeur a en réserve E2 pièces de 2e, E1 pièces de 1e, C50
pièces de 50 centimes, C20 pièces de 20 centimes et C10 pièces
de 10 centimes.
Modélisez ce problème sous la forme d’un CSP.

20
Programmation par contrainte Modélisation Résolution

Correction : le retour de monnaie

<handout :0>

21
Programmation par contrainte Modélisation Résolution

Correction : le retour de monnaie

<handout :0>
Variables : X2 , X1 , X50 , X20 , X10 , nombres de pièces à rendre

21
Programmation par contrainte Modélisation Résolution

Correction : le retour de monnaie

<handout :0>
Variables : X2 , X1 , X50 , X20 , X10 , nombres de pièces à rendre
Domaines :
DX2 = {0, 1, . . . , E2 }

21
Programmation par contrainte Modélisation Résolution

Correction : le retour de monnaie

<handout :0>
Variables : X2 , X1 , X50 , X20 , X10 , nombres de pièces à rendre
Domaines :
DX2 = {0, 1, . . . , E2 }
DX1 = {0, 1, . . . , E1 }
DX50 = {0, 1, . . . , C50 }
DX20 = {0, 1, . . . , C20 }
DX10 = {0, 1, . . . , C10 }

21
Programmation par contrainte Modélisation Résolution

Correction : le retour de monnaie

<handout :0>
Variables : X2 , X1 , X50 , X20 , X10 , nombres de pièces à rendre
Domaines :
DX2 = {0, 1, . . . , E2 }
DX1 = {0, 1, . . . , E1 }
DX50 = {0, 1, . . . , C50 }
DX20 = {0, 1, . . . , C20 }
DX10 = {0, 1, . . . , C10 }
Contrainte :
200X2 + 100X1 + 50X50 + 20X20 + 10X10 = T ¡ P

21
Programmation par contrainte Modélisation Résolution

Exercice : Send More Money

On considère l’addition suivante :


S E N D
+ M O R E
= M O N E Y
où chaque lettre représente un chiffre différent (compris entre 0
et 9). On souhaite connaitre la valeur de chaque lettre, sachant
que la première lettre de chaque mot représente un chiffre
différent de 0.
Modélisez ce problème sous la forme d’un CSP.

22
Programmation par contrainte Modélisation Résolution

Correction : Send More Money

23
Programmation par contrainte Modélisation Résolution

Correction : Send More Money

Variables : S, E , N, D, M, O, R, Y

23
Programmation par contrainte Modélisation Résolution

Correction : Send More Money

Variables : S, E , N, D, M, O, R, Y
Domaines :
DS = DM = {1, 2, 3, 4, 5, 6, 7, 8, 9}
DE = DN = DD = DO = DR = DY = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

23
Programmation par contrainte Modélisation Résolution

Correction : Send More Money

Variables : S, E , N, D, M, O, R, Y
Domaines :
DS = DM = {1, 2, 3, 4, 5, 6, 7, 8, 9}
DE = DN = DD = DO = DR = DY = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
Contraintes :
1000(S + M) + 100(E + O) + 10(N + R) + (D + E ) =
10000M + 1000O + 100N + 10E + Y
tousDifferents(S, E , N, D, M, O, R, Y )

23
Programmation par contrainte Modélisation Résolution

Programmation par contraintes : plan

1 Programmation par contrainte

2 Modélisation

3 Résolution

24
Programmation par contrainte Modélisation Résolution

Résolution naïve

Enumération
On génère toutes les affectations totales possibles

On vérifie si elles sont consistantes

si on en trouve une consistante, c’est gagné

25
Programmation par contrainte Modélisation Résolution

Résolution naïve

Enumération
On génère toutes les affectations totales possibles

On vérifie si elles sont consistantes

si on en trouve une consistante, c’est gagné

Avantage : très facile à mettre en œuvre


Inconvénient : très gourmand en ressource temps

25
Programmation par contrainte Modélisation Résolution

Résolution naïve

Un problème à n variables qui peuvent prendre 2 valeurs.


109 affectations traitées par seconde.

n nb d’affectations temps
10 103
20 106
30 109
40 1012
50 1015
60 1018
70 1021

... d’où l’intérêt de bien choisir la modélisation

26
Programmation par contrainte Modélisation Résolution

Résolution naïve

Un problème à n variables qui peuvent prendre 2 valeurs.


109 affectations traitées par seconde.

n nb d’affectations temps
10 103 10 6 secondes ✔
20 106 10 3 secondes ✔
30 109 1 seconde ✔
40 1012 16 minutes
50 1015 11 jours ✘
60 1018 32 ans ✘✘
70 1021 317 siècles ✘✘

... d’où l’intérêt de bien choisir la modélisation

26
Programmation par contrainte Modélisation Résolution

Les remèdes
S’arrêter quand une affectation partielle est inconsistante
backtrack
Restreindre les domaines des variables durant l’exécution
propagation de contraintes
Utiliser des heuristiques
Utiliser nos connaissances sur le problème étudié
...

27
Programmation par contrainte Modélisation Résolution

Backtrack

Principe :
On parcourt l’arbre des affectations en profondeur
Lorsqu’une affectation partielle est inconsistante, on n’explore
pas le sous-arbre correspondant

28
Programmation par contrainte Modélisation Résolution

Bactrack : jeu de dames

Exemple d’exécution

29
Programmation par contrainte Modélisation Résolution

Backtrack

Backtrack Méthode naïve

✔ Moins d’affectations ✘ Toutes les affectations sont


considérées considérées
✘ Toutes les contraintes sont ✔ On ne teste les contraintes
testées à chaque affectation que sur les affectations
même partielle totales
✔ Facile à mettre en œuvre ✔ Très facile à mettre en
œuvre
Importance de l’ordre des variables

30
Programmation par contrainte Modélisation Résolution

Propagation des contraintes

Principe :
On restreint le domaine d’une variable
avec les contraintes, on restreint les autres domaines

Exemple
0 < x · 10 et 3 · y · 9
contrainte : x > y
Alors on peut restreindre le domaine de x à 4 · x · 10

31
Programmation par contrainte Modélisation Résolution

Propagation des contraintes

Exemple d’exécution

32
Programmation par contrainte Modélisation Résolution

Propagation des contraintes

Choix
On propage :
Quand un domaine est réduit
Quand une des bornes du domaine est changée
Quand un domaine est un singleton
On propage :
Une fois : nœud-consistance
Deux fois : arc-consistance
Ou plus...

33
Programmation par contrainte Modélisation Résolution

Propagation des contraintes

Nœud-consistance
Formellement, un CSP (X , D, C ) est consistant de nœud si pour
toute variable Xi de X , et pour toute valeur v de D(Xi ),
l’affectation partielle (Xi , v ) satisfait toutes les contraintes unaires
de C .

34
Programmation par contrainte Modélisation Résolution

Propagation des contraintes

Nœud-consistance
Formellement, un CSP (X , D, C ) est consistant de nœud si pour
toute variable Xi de X , et pour toute valeur v de D(Xi ),
l’affectation partielle (Xi , v ) satisfait toutes les contraintes unaires
de C .

Algorithmiquement, pour chaque variable Xi non affectée dans A,


on enlève de D(Xi ) toute valeur v telle que l’affectation
A ∪ {(Xi , v )} est inconsistante.

34
Programmation par contrainte Modélisation Résolution

Propagation des contraintes

Nœud-consistance

35
Programmation par contrainte Modélisation Résolution

Propagation des contraintes

Arc-consistance
Formellement, un CSP (X , D, C ) est consistant d’arc si pour tout
couple de variables (Xi , Xj ) de X , et pour toute valeur vi
appartenant à D(Xi ), il existe une valeur vj appartenant à D(Xj )
telle que l’affectation partielle {(Xi , vi ), (Xj , vj )} satisfasse toutes
les contraintes binaires de C .

36
Programmation par contrainte Modélisation Résolution

Propagation des contraintes

Arc-consistance
Formellement, un CSP (X , D, C ) est consistant d’arc si pour tout
couple de variables (Xi , Xj ) de X , et pour toute valeur vi
appartenant à D(Xi ), il existe une valeur vj appartenant à D(Xj )
telle que l’affectation partielle {(Xi , vi ), (Xj , vj )} satisfasse toutes
les contraintes binaires de C .

Algorithmiquement, pour chaque variable Xi non affectée dans A,


on enlève de D(Xi ) toute valeur v telle qu’il existe une variable Xj
non affectée pour laquelle, pour toute valeur w de D(Xj ),
l’affectation A ∪ {(Xi , v ), (Xj , w )} soit inconsistante.

36
Programmation par contrainte Modélisation Résolution

Propagation des contraintes

Arc-consistance : exemple d’exécution

37
Programmation par contrainte Modélisation Résolution

Propagation de contraintes

Nœud-consistance : Arc-consistance :

✔ Moins d’affectations ✔ Beaucoup moins


considérées d’affectations considérées
✘ Toutes les contraintes sont ✘ Etablir l’arc-consistance
testées à chaque affectation peut prendre beaucoup de
même partielle temps selon les contraintes.
✔ Facile à mettre en œuvre ✘ Moins facile à mettre en
œuvre
La nœud-consistance est quasiment toujours plus efficace que
le Backtrack
Du fait de sa complexité l’arc-consistance se révèle moins
efficace que la nœud-consistance

38
Programmation par contrainte Modélisation Résolution

Résolution : bilan

Remarques :

Backtrack = propagation de contrainte au niveau 0


De la supériorité du cerveau : quel que soit l’algorithme choisi,
la modélisation et l’ordre des variable ont leur importance
Heuristiques : évaluation de la branche de l’arbre à inspecter
en priorité
Autres méthodes : backtrack à plusieurs étages
Selon la nature du problème : simplexe, branch & bound...
plus efficaces car non-génériques

39
Exemple : Affectation de stock

N entrepôts (coût d’ouverture)


M boutiques
coûts d’acheminement d’un entrepôt à une boutique
capacité : chaque entrepôt ne peut fournir qu’un certain
nombre de boutiques

Question : avec un budget de mille euros, puis-je subvenir aux


besoins de mes boutiques ?

40
Correction : Affectation de stock

coût d’ouverture : ouvre(i) pour 1 · i · N

coût d’acheminement : transfert(i, j) pour 1 · i · N,


1·j ·M

capacités : cap(i) pour 1 · i · N

41
Correction : Affectation de stock

coût d’ouverture : ouvre(i) pour 1 · i · N

coût d’acheminement : transfert(i, j) pour 1 · i · N,


1·j ·M

capacités : cap(i) pour 1 · i · N

Variables : ouvert(i) pour 1 · i · N


fournisseur(j) pour 1 · j · M

Domaines : ouvert(i) ∈ {0, 1}


fournisseur(j) ∈ {1, 2 . . . N}

41
Correction : Affectation de stock

Variables : ouvert(i) pour 1 · i · N


fournisseur(j) pour 1 · j · M

Domaines : ouvert(i) ∈ {0, 1}


fournisseur(j) ∈ {1, 2 . . . N}
Contraintes :

42
Correction : Affectation de stock

Variables : ouvert(i) pour 1 · i · N


fournisseur(j) pour 1 · j · M

Domaines : ouvert(i) ∈ {0, 1}


fournisseur(j) ∈ {1, 2 . . . N}
Contraintes :
pour tout 1 · j · M, ouvert(fournisseur(j)) = 1

42
Correction : Affectation de stock

Variables : ouvert(i) pour 1 · i · N


fournisseur(j) pour 1 · j · M

Domaines : ouvert(i) ∈ {0, 1}


fournisseur(j) ∈ {1, 2 . . . N}
Contraintes :
pour tout 1 · j · M, ouvert(fournisseur(j)) = 1
P
pour tout 1 · i · N, j|fournisseur(j)=i 1 · cap(i)

42
Correction : Affectation de stock

Variables : ouvert(i) pour 1 · i · N


fournisseur(j) pour 1 · j · M

Domaines : ouvert(i) ∈ {0, 1}


fournisseur(j) ∈ {1, 2 . . . N}
Contraintes :
pour tout 1 · j · M, ouvert(fournisseur(j)) = 1
P
pour tout 1 · i · N, j|fournisseur(j)=i 1 · cap(i)
P P
1000 ¸ i ouvre(i)ouvert(i) + j transfert(fournisseur(j), j)

42

Вам также может понравиться