Programmation par contraintes
Arnaud Malapert
29 octobre 2015
Département d’informatique
Université Nice Sophia Antipolis
Plan du cours
Lecture 1 : Généralités
Lecture 2 : L’art de la modélisation
Lecture 3 : Méthodes de résolution
2 / 122
Programmation par contraintes
N
Lecture 1
Généralités
Programmation par contraintes
29 octobre 2015
Arnaud Malapert
Département d’informatique
Université Nice Sophia Antipolis
Plan
1 Introduction
2 Problème de satisfaction de contraintes
3 Solveurs de contraintes
4 / 122
Programmation par contraintes
N
Introduction
Plan
1 Introduction
2 Problème de satisfaction de contraintes
3 Solveurs de contraintes
5 / 122
Programmation par contraintes
N
Computers are incredibly fast, accurate and stupid. Human
beings are incredibly slow, inaccurate and brilliant. Together
they are powerful beyond imagination.
Albert Einstein.
Constraint Programming represents one of the closest
approaches computer science has yet made to the Holy Grail
of programming : the user states the problem, the computer
solves it.
Eugene C. Freuder, Inaugural issue of the Constraints Journal,1997.
6 / 122
Programmation par contraintes
N
Introduction
Programmation par contraintes (PPC)
Modélisation et de résolution de problèmes combinatoires.
Problème combinatoire
Ensemble discret et dénombrable de solutions.
Satisfiabilité trouver une solution
Énumération trouver plusieurs/toutes les solutions
Optimisation trouver la meilleure solution
7 / 122
Programmation par contraintes
N
Introduction
Programmation par contraintes (PPC)
Modélisation et de résolution de problèmes combinatoires.
Problème combinatoire
Ensemble discret et dénombrable de solutions.
Satisfiabilité trouver une solution
Énumération trouver plusieurs/toutes les solutions
Optimisation trouver la meilleure solution
Est-ce que ça vaut le coup d’oeil ?
I Langage de modélisation riche.
I Techniques de résolution puissantes et génériques.
7 / 122
Programmation par contraintes
N
Introduction
Programmation par contraintes (PPC)
Modélisation et de résolution de problèmes combinatoires.
Problème combinatoire
Ensemble discret et dénombrable de solutions.
Satisfiabilité trouver une solution
Énumération trouver plusieurs/toutes les solutions
Optimisation trouver la meilleure solution
Est-ce que ça vaut le coup d’oeil ?
I Langage de modélisation riche.
I Techniques de résolution puissantes et génériques.
Au point de suivre un cours ?
I Concevoir de meilleurs (solvables) modèles.
I Meilleure exploitation de la technologie.
7 / 122
Programmation par contraintes
N
Introduction
Du rêve à la réalité
> Solveur, quelle est la solution de SEND+MORE=MONEY ?
> Facile!
> [9,5,6,7] + [1,0,8,5] = [1,0,6,5,2]
8 / 122
Programmation par contraintes
N
Introduction
Du rêve à la réalité
> Solveur, quelle est la solution de SEND+MORE=MONEY ?
> Facile!
> [9,5,6,7] + [1,0,8,5] = [1,0,6,5,2]
Model model = new CPModel();
IntegerVariable S = makeIntVar("S",0,9);
...
IntegerVariable Y = makeIntVar("Y",0,9);
8 / 122
Programmation par contraintes
N
Introduction
Du rêve à la réalité
> Solveur, quelle est la solution de SEND+MORE=MONEY ?
> Facile!
> [9,5,6,7] + [1,0,8,5] = [1,0,6,5,2]
Model model = new CPModel();
IntegerVariable S = makeIntVar("S",0,9);
...
IntegerVariable Y = makeIntVar("Y",0,9);
model.addConstraint(neq(S,0),neq(M,0) ) ;
model.addConstraint(allDifferent(S,E,N,D,M,O,R,Y));
model.addConstraint(
eq( plus( scalar(new int[]{1000,100,10,1}, new IntegerVariable[]{S,E,N,D}),
scalar(new int[]{1000,100,10,1}, new IntegerVariable[]{M,O,R,E})),
scalar(new int[]{10000,1000,100,10,1}, new IntegerVariable[]{M,O,N,E,Y})));
8 / 122
Programmation par contraintes
N
Introduction
Du rêve à la réalité
> Solveur, quelle est la solution de SEND+MORE=MONEY ?
> Facile!
> [9,5,6,7] + [1,0,8,5] = [1,0,6,5,2]
Model model = new CPModel();
IntegerVariable S = makeIntVar("S",0,9);
...
IntegerVariable Y = makeIntVar("Y",0,9);
model.addConstraint(neq(S,0),neq(M,0) ) ;
model.addConstraint(allDifferent(S,E,N,D,M,O,R,Y));
model.addConstraint(
eq( plus( scalar(new int[]{1000,100,10,1}, new IntegerVariable[]{S,E,N,D}),
scalar(new int[]{1000,100,10,1}, new IntegerVariable[]{M,O,R,E})),
scalar(new int[]{10000,1000,100,10,1}, new IntegerVariable[]{M,O,N,E,Y})));
8 / 122
Programmation par contraintes
N
Introduction
Du rêve à la réalité
> Solveur, quelle est la solution de SEND+MORE=MONEY ?
> Facile!
> [9,5,6,7] + [1,0,8,5] = [1,0,6,5,2]
Model model = new CPModel();
IntegerVariable S = makeIntVar("S",0,9);
...
IntegerVariable Y = makeIntVar("Y",0,9);
model.addConstraint(neq(S,0),neq(M,0) ) ;
model.addConstraint(allDifferent(S,E,N,D,M,O,R,Y));
model.addConstraint(
eq( plus( scalar(new int[]{1000,100,10,1}, new IntegerVariable[]{S,E,N,D}),
scalar(new int[]{1000,100,10,1}, new IntegerVariable[]{M,O,R,E})),
scalar(new int[]{10000,1000,100,10,1}, new IntegerVariable[]{M,O,N,E,Y})));
Solver solver=new CPSolver();
solver.read(model);
Propagation initiale : S=9, E in 4..7, N in 5..8, M=1, O=0, [D,R,Y] in 2..8
8 / 122
Programmation par contraintes
N
Introduction
Du rêve à la réalité
> Solveur, quelle est la solution de SEND+MORE=MONEY ?
> Facile!
> [9,5,6,7] + [1,0,8,5] = [1,0,6,5,2]
Model model = new CPModel();
IntegerVariable S = makeIntVar("S",0,9);
...
IntegerVariable Y = makeIntVar("Y",0,9);
model.addConstraint(neq(S,0),neq(M,0) ) ;
model.addConstraint(allDifferent(S,E,N,D,M,O,R,Y));
model.addConstraint(
eq( plus( scalar(new int[]{1000,100,10,1}, new IntegerVariable[]{S,E,N,D}),
scalar(new int[]{1000,100,10,1}, new IntegerVariable[]{M,O,R,E})),
scalar(new int[]{10000,1000,100,10,1}, new IntegerVariable[]{M,O,N,E,Y})));
Solver solver=new CPSolver();
solver.read(model);
solver.solve();
Propagation initiale : S=9, E in 4..7, N in 5..8, M=1, O=0, [D,R,Y] in 2..8
Recherche : S=9, E=5, N=6, D=7, M=1, O=0, R=8, Y=2
8 / 122
Programmation par contraintes
N
Introduction
Programmation par contraintes
© Modèle déclaratif.
I Description des propriétés et relations entre objets partiellement connus.
I Gestion d’information exacte, approchée, finie, infinie, complète et incomplètes.
© Raisonnement automatique basé sur les contraintes.
I Propagation des nouvelles informations.
I Simplification extrait les informations implicites.
© Résolution efficace de problèmes combinatoires.
I Combinaison aisée avec des techniques de recherche et d’optimisation.
§ Technologie récente et coûteuse.
§ Résolution de très grandes instances.
§ Optimisation sous contraintes.
9 / 122
Programmation par contraintes
N
Introduction
Il était une fois . . .
1960 Réseau de contraintes en IA
1970 Programmation logique (prolog)
1980 Programmation logique concurrente
1980 Programmation par contraintes
1990 Programmation par contraintes concurrente
1990 Applications commerciales (ILOG)
Aujourd’hui http://openjvm.jvmhost.net/CPSolvers/
10 / 122
Programmation par contraintes
N
Introduction
Influences
I Mathématiques
I Recherche opérationnelle
I Théorie des graphes
I Algèbre
I Programmation Logique
I Informatique
I Automate
I Preuve automatique
I Économie
I Linguistique
11 / 122
Programmation par contraintes
N
Introduction
Applications
I Académiques
I sac-à-dos,
I voyageur de commerce,
I coloriage de graphe,
I Robotique,
I Agents,
I . . .
I Industrielles
I ordonnancement,
I allocations de ressources
I emploi du temps
I design de circuit
I séquençage de l’ADN,
I . . .
12 / 122
Programmation par contraintes
N
Introduction
PLNE versus PPC
PLNE
I Méthodologie éprouvée pour la
résolution de grandes instances
I Plusieurs méthodes de résolution
pour chaque modèle
I Méthodes tournées vers
l’optimisation, approche globale
PPC
I Méthode de modélisation
adaptée aux problèmes
composites
I Modèles déclaratifs et méthodes
de résolutions flexibles
I Méthodes tournées vers la
satisfaction, approche locale
13 / 122
Programmation par contraintes
N
Introduction
PLNE versus PPC
PLNE
I Méthodologie éprouvée pour la
résolution de grandes instances
I Plusieurs méthodes de résolution
pour chaque modèle
I Méthodes tournées vers
l’optimisation, approche globale
PPC
I Méthode de modélisation
adaptée aux problèmes
composites
I Modèles déclaratifs et méthodes
de résolutions flexibles
I Méthodes tournées vers la
satisfaction, approche locale
branch-and-bound=backtracking
I Séparation itérative (branching)
I Évaluation (bounding/filtering)
I Inférence (cutting plane/propagation)
13 / 122
Programmation par contraintes
N
Introduction
PLNE versus PPC
PLNE
© opérations algébriques faites sur
le système entier
© très bonnes bornes pour accélérer
la preuve de l’optimalité.
© heuristiques de bonne qualité
disponibles.
§ modélisation bas niveau
(contraintes linéaires)
PPC
© solutions réalisables
© structure du problème préservée
© information sur les domaines
© formulation efficace
© toutes les solutions
© hybridation
§ propagation trop locale
§ optimisation
14 / 122
Programmation par contraintes
N
Problème de satisfaction de contraintes
Plan
1 Introduction
2 Problème de satisfaction de contraintes
3 Solveurs de contraintes
15 / 122
Programmation par contraintes
N
Problème de satisfaction de contraintes
Définitions
Problème de satisfaction de contraintes
I un ensemble de variables {X1, . . . , Xn}
I un ensemble de domaines discrets {D1, . . . , Dn}
I Un ensemble de contraintes {C1, . . . , Cm}
Affectation
Une affectation consiste à instancier des variables.
I partielle ou totale
I consistante ou inconsistante
A = {(X1, V1), (X3, V3), (X4, V4)}
Solution
Une solution est une affectation totale consistante.
16 / 122
Programmation par contraintes
N
5
8
• Pruning = removing values from non feasible solutions
• Search = Systematic exploration of solution space
CP = Pruning + Search
Only two Ingredients !!!
5
9
CP in One Slide
• CP = Pruning + Search
Xi = V Xi != V
Constraint
Store
Domain store
Constraints
repeat
select a constraint c
if c is infeasible wrt the domain store
return infeasible
else
apply pruning algorithm of c
until no value can be removed
Fix-point Algo
6
0
Fix Point Algorithm
Constraint Store
X ∈ {1,3,4,5} Y ∈ {3,4}
X<Y Y<4
Constraints
6
1
Fix Point Algorithm
Constraint Store
X ∈ {1,3,4,5} Y ∈ {3,4}
X<Y Y<4
Constraints
6
2
Fix Point Algorithm
Constraint Store
X ∈ {1,3} Y ∈ {3,4}
X<Y Y<4
Constraints
6
3
Fix Point Algorithm
Constraint Store
X ∈ {1,3} Y ∈ {3,4}
X<Y Y<4
Constraints
6
4
Fix Point Algorithm
Constraint Store
X ∈ {1,3} Y ∈ {3}
X<Y Y<4
Constraints
6
5
Fix Point Algorithm
Constraint Store
X ∈ {1,3} Y ∈ {3}
X<Y Y<4
Constraints
6
6
Fix Point Algorithm
Constraint Store
X ∈ {1} Y ∈ {3}
X<Y Y<4
Constraints
6
7
Search Tree
Variables:
• Dom(x1)=[0..3]
• Dom(x2)={2,4}
• Dom(x3)={1,4}
Constraints:
Fix Point
Dom(x1)=[0..2]
Dom(x2)={2,4}
Dom(x3)={4}
x1+x2=x3
x1 != x2
6
8
Dom(x1)=[0..2]
Dom(x2)={2,4}
Dom(x3)={4}
x1+x2=x3
x1 != x2
x2==2
Dom(x1)=[0..1]
Dom(x2)={2}
Dom(x3)={}
6
9
• dsfdsfdf Dom(x1)=[0..2]
Dom(x2)={2,4}
Dom(x3)={4}
x1+x2=x3
x1 != x2
x2==2
Dom(x1)=[0]
Dom(x2)={4}
Dom(x3)={4}
x2==4
7
0
Search Tree
Solution
Problème de satisfaction de contraintes
Domaine entier
Exemple
En pratique, la cardinalité du domaine est finie.
D = {1, 2, 3, 5, 7, 9, 10}
30 / 122
Programmation par contraintes
N
Problème de satisfaction de contraintes
Domaine entier
Exemple
En pratique, la cardinalité du domaine est finie.
D = {1, 2, 3, 5, 7, 9, 10}
Opérations
I test d’appartenance de valeur(s)
I suppression de valeur(s)
I itération(s) sur des valeurs
30 / 122
Programmation par contraintes
N
Problème de satisfaction de contraintes
Domaine entier
Exemple
En pratique, la cardinalité du domaine est finie.
D = {1, 2, 3, 5, 7, 9, 10}
Opérations
I test d’appartenance de valeur(s)
I suppression de valeur(s)
I itération(s) sur des valeurs
Représentation
Énumération occupation mémoire
Intervalle domaine non connexe
Liste,arbre complexité des structures de données.
30 / 122
Programmation par contraintes
N
Problème de satisfaction de contraintes
Domaine ensembliste
Exemple
Par bijection, on peut se restreindre à l’étude des ensembles d’entiers.
D = {∅, {1, 2}, {1, 2, 3, 4}, {2, 3}, {2, 4}}
Opérations
Elles s’appliquent à des éléments ou à des ensembles.
31 / 122
Programmation par contraintes
N
Problème de satisfaction de contraintes
Domaine ensembliste
Exemple
Par bijection, on peut se restreindre à l’étude des ensembles d’entiers.
D = {∅, {1, 2}, {1, 2, 3, 4}, {2, 3}, {2, 4}}
Opérations
Elles s’appliquent à des éléments ou à des ensembles.
Représentations
Énumération occupation mémoire exponentielle
I 2n
sous-ensembles de [1, n]
Noyau-Enveloppe perte d’information
I K(D) = ∩S∈DS = ∅
I E(D) = ∪S∈DS = [1, 4]
31 / 122
Programmation par contraintes
N
Problème de satisfaction de contraintes
Représentation des domaines
Gestion des états/mondes
Pendant la résolution, on maintient d’une pile d’états.
I variables, domaines, contraintes.
Un compromis temps/mémoire
§ la représentation des domaines influe considérablement sur les
performances de la pile.
§ l’action des contraintes peut différer selon la représentation des
domaines.
© configuration automatique des solveurs.
32 / 122
Programmation par contraintes
N
Problème de satisfaction de contraintes
Contraintes
C’est quoi ?
Une contrainte porte sur un ensemble de variables et restreint les
valeurs que l’on peut affecter simultanément à ces variables
I X + Y ≤ Z
I A ∪ B 6= C
I x2
+ y2
= z2
I (ABC) forme un triangle isocèle
I x, y, z, distincts deux à deux.
I A, B, C forment une partition de E
33 / 122
Programmation par contraintes
N
Problème de satisfaction de contraintes
Contraintes
Déclaration
Extension on énumère les n-uplets admis :
I (x = 1 ∧ y = 2) ∨ (x = 0 ∧ y = 3) ∨ (x = 2)
Intension formule mathématique :
I x + y ≤ z
Arité d’une contrainte
unaire, binaire, n-aire
Exemples
non linéaire x2
+ y3
= z2
symbolique (x = bleu) ∨ (x = vert)
logique x = 3 ⇒ y < z
globale allDifferent(x1, . . . , xn), . . .
34 / 122
Programmation par contraintes
N
Problème de satisfaction de contraintes
Quelques contraintes globales
table
(X1, . . . , Xn) prennent leur valeurs parmi un ensemble de tuples.
globalCardinality
Les valeurs v1, . . . , vm apparaissent Ov1 , . . . , Ovm dans X1, . . . , Xn.
allDifferent
les valeurs de X1, . . . , Xn sont distinctes.
element (1D/2D/3D)
La valeur V est égale au I-ème élément de (X1, . . . , Xn).
lex
(X1, . . . , Xn) est plus petit que (Y1, . . . , Yn) selon l’ordre lexico.
Pour les curieux : Global Constraint catalog
35 / 122
Programmation par contraintes
N
Problème de satisfaction de contraintes
Résolution
X
DX = [1, 3]
DY = [1, 3]
Z
DZ = [1, 3]
Y
6=
<
x − y = 1
Réseau de contraintes
I multi-graphe
I hyper-graphe
36 / 122
Programmation par contraintes
N
Problème de satisfaction de contraintes
Résolution
X
DX = [1, 3]
Z
DZ = [2, 3]
Y
6=
<
x − y = 1
DY = [1, 2]
Filtrage des contraintes
I réduction des domaines
I instanciation
36 / 122
Programmation par contraintes
N
Problème de satisfaction de contraintes
Résolution
Z
Y
6=
<
x − y = 1
DY = [1, 2]
X
DZ = [2, 3]
DX = [2, 3]
Propagation de contraintes
I Le point fixe est indépendant de l’ordre de propagation.
I L’ordre peut influer sur la vitesse de convergence.
36 / 122
Programmation par contraintes
N
Problème de satisfaction de contraintes
Résolution
Z
Y
6=
x − y = 1
DY = [1, 2]
X
DX = [2]
< DZ = [3]
Séparation itérative
I P ∪ {X = 2}
I ou P ∪ {X 6= 2}
36 / 122
Programmation par contraintes
N
Problème de satisfaction de contraintes
Résolution
Z
Y
6=
x − y = 1
X
DX = [2]
< DZ = [3]
DY = [1]
Séparation itérative
I P ∪ {X = 2}
I ou P ∪ {X 6= 2}
36 / 122
Programmation par contraintes
N
Problème de satisfaction de contraintes
CSPs binaires et booléens
Problème de satisfaction de contraintes binaires
Tout CSP peut être converti en un CSP binaire : encodage dual.
I inversion du rôle des variables et des contraintes.
37 / 122
Programmation par contraintes
N
Problème de satisfaction de contraintes
CSPs binaires et booléens
Problème de satisfaction de contraintes binaires
Tout CSP peut être converti en un CSP binaire : encodage dual.
I inversion du rôle des variables et des contraintes.
Problème de satisfaction de contraintes booléennes
Tout CSP peut être converti en un CSP booléen : encodage SAT.
I un booléen indique si une valeur est assignée à une variable.
37 / 122
Programmation par contraintes
N
Solveurs de contraintes
Plan
1 Introduction
2 Problème de satisfaction de contraintes
3 Solveurs de contraintes
38 / 122
Programmation par contraintes
N
Solveurs de contraintes
Solveur de contraintes
Réinventer la poudre ?
Il est inutile de programmer toutes les techniques en partant de rien.
39 / 122
Programmation par contraintes
N
Solveurs de contraintes
Solveur de contraintes
Réinventer la poudre ?
Il est inutile de programmer toutes les techniques en partant de rien.
Solveur de contraintes
Un solveur se présente généralement sous la forme d’une bibliothèque
dans un langage de programmation (Prolog, C, Java, . . .).
I implémentation des structures de données
I variables, domaines, contraintes
I cadre général de consistance
I stratégies de recherche
I interface flexible et évolutive
I variables, domaines
I contraintes, algorithmes de filtrage
I heuristiques, stratégie de recherche
39 / 122
Programmation par contraintes
N
Solveurs de contraintes
Catalogue de solveurs
I SICStus (Prolog)
I ECLIPSe (Prolog)
I CHIP (C)
I Prolog/C/C++
I ILOG (C++)
I C++/Java/Python/OPL
I Gecode (C++)
I Mozart (Oz)
I Koalog (Java)
I Choco (Java)
I Jacop (Java)
I Comet
40 / 122
Programmation par contraintes
N
Solveurs de contraintes
Catalogue de solveurs
I SICStus (Prolog)
I ECLIPSe (Prolog)
I CHIP (C)
I Prolog/C/C++
I ILOG (C++)
I C++/Java/Python/OPL
I Gecode (C++)
I Mozart (Oz)
I Koalog (Java)
I Choco (Java)
I Jacop (Java)
I Comet
Hybridation/Spécialisation
I intégration avec packages RO
I programmation mathématique
I recherche locale
I ordonnancement
I activités
I ressources, précédences
I stratégies de recherche
40 / 122
Programmation par contraintes
N
Solveurs de contraintes
Catalogue de solveurs
I SICStus (Prolog)
I ECLIPSe (Prolog)
I CHIP (C)
I Prolog/C/C++
I ILOG (C++)
I C++/Java/Python/OPL
I Gecode (C++)
I Mozart (Oz)
I Koalog (Java)
I Choco (Java)
I Jacop (Java)
I Comet
Hybridation/Spécialisation
I intégration avec packages RO
I programmation mathématique
I recherche locale
I ordonnancement
I activités
I ressources, précédences
I stratégies de recherche
Pour les curieux
Catalogue of Constraint Programming
Tools
40 / 122
Programmation par contraintes
N
Solveurs de contraintes
En résumé
Cadre générale de la PPC
I La consistance locale relient les algorithmes de filtrage qui
s’appliquent à chaque contrainte.
I La recherche arborescente résout les disjonctions restantes.
41 / 122
Programmation par contraintes
N
Solveurs de contraintes
En résumé
Cadre générale de la PPC
I La consistance locale relient les algorithmes de filtrage qui
s’appliquent à chaque contrainte.
I La recherche arborescente résout les disjonctions restantes.
Résolution d’un problème
I modèle déclaratif d’un problème sous la forme d’un CSP
I algorithmes de filtrage encodés dans des contraintes
I stratégies de recherche
41 / 122
Programmation par contraintes
N
Lecture 2
L’art de la modélisation
Programmation par contraintes
29 octobre 2015
Arnaud Malapert
Département d’informatique
Université Nice Sophia Antipolis
Plan
1 SEND+MORE=MONEY
2 Problème des dames
3 Séquence magique
4 Règles de Golomb
5 Suite de Langford
43 / 122
Programmation par contraintes
N
Constat
Tous les problèmes ne sont donnés pas sous la forme d’un CSP !
44 / 122
Programmation par contraintes
N
Recette
I formaliser le problème
I résoudre de petites instances « à la main »
I modèle de base
I déclaration des variables
I déclaration des contraintes
I reformulation
I déclaration des variables auxiliaires
I contraintes difficiles à exprimer ou peu efficace
I étude des modèles 0/1, dual et combiné
I étude des symétries
45 / 122
Programmation par contraintes
N
SEND+MORE=MONEY
Plan
1 SEND+MORE=MONEY
2 Problème des dames
3 Séquence magique
4 Règles de Golomb
5 Suite de Langford
46 / 122
Programmation par contraintes
N
SEND+MORE=MONEY
À vous de jouer
> Solveur, quelle est la solution de SEND+MORE=MONEY ?
> Facile!
> [9,5,6,7] + [1,0,8,5] = [1,0,6,5,2]
47 / 122
Programmation par contraintes
N
SEND+MORE=MONEY
SEND+MORE=MONEY
D + E = 10 × r1 + Y (1)
r1 + N + R = 10 × r2 + E (2)
r2 + E + O = 10 × r3 + N (3)
r3 + S + M = 10 × M + O (4)
S, M > 0 (5)
allDifferent(S, E, N, D, M, O, R, Y )
(6)
r1 ∈ [0, 1] r2 ∈ [0, 1] r3 ∈ [0, 1]
S ∈ [1, 9] E ∈ [0, 9] N ∈ [0, 9]
D ∈ [0, 9] M ∈ [1, 9] O ∈ [0, 9]
R ∈ [0, 9] Y ∈ [0, 9]
48 / 122
Programmation par contraintes
N
SEND+MORE=MONEY
SEND+MORE=MONEY
D + E = 10 × r1 + Y (1)
r1 + N + R = 10 × r2 + E (2)
r2 + E + O = 10 × r3 + N (3)
r3 + S + M = 10 × M + O (4)
S, M > 0 (5)
allDifferent(S, E, N, D, M, O, R, Y )
(6)
r1 ∈ [0, 1] r2 ∈ [0, 1] r3 ∈ [0, 1]
S ∈ [1, 9] E ∈ [0, 9] N ∈ [0, 9]
D ∈ [0, 9] M = 1 O ∈ [0, 9]
R ∈ [0, 9] Y ∈ [0, 9]
(4) M ≤ b(r3 + S − O) ÷ 9c ≤ 1
48 / 122
Programmation par contraintes
N
SEND+MORE=MONEY
SEND+MORE=MONEY
D + E = 10 × r1 + Y (1)
r1 + N + R = 10 × r2 + E (2)
r2 + E + O = 10 × r3 + N (3)
r3 + S + M = 10 × M + O (4)
S, M > 0 (5)
allDifferent(S, E, N, D, M, O, R, Y )
(6)
r1 ∈ [0, 1] r2 ∈ [0, 1] r3 ∈ [0, 1]
S ∈ [8, 9] E ∈ [0, 9] N ∈ [0, 9]
D ∈ [0, 9] M = 1 O ∈ [0, 1]
R ∈ [0, 9] Y ∈ [0, 9]
(4) M ≤ b(r3 + S − O) ÷ 9c ≤ 1
(4) O ≤ r3 + S − 9 ≤ 1
(4) S ≥ 9 + O − r3 ≥ 8
48 / 122
Programmation par contraintes
N
SEND+MORE=MONEY
SEND+MORE=MONEY
D + E = 10 × r1 + Y (1)
r1 + N + R = 10 × r2 + E (2)
r2 + E + O = 10 × r3 + N (3)
r3 + S + M = 10 × M + O (4)
S, M > 0 (5)
allDifferent(S, E, N, D, M, O, R, Y )
(6)
r1 ∈ [0, 1] r2 ∈ [0, 1] r3 ∈ [0, 1]
S ∈ [8, 9] E ∈ [2, 9] N ∈ [2, 9]
D ∈ [2, 9] M = 1 O = 0
R ∈ [2, 9] Y ∈ [2, 9]
(4) M ≤ b(r3 + S − O) ÷ 9c ≤ 1
(4) O ≤ r3 + S − 9 ≤ 1
(4) S ≥ 9 + O − r3 ≥ 8
(6) O = 0 ; E, N, D, R, Y ≥ 2
48 / 122
Programmation par contraintes
N
SEND+MORE=MONEY
SEND+MORE=MONEY
D + E = 10 × r1 + Y (1)
r1 + N + R = 10 × r2 + E (2)
r2 + E + O = 10 × r3 + N (3)
r3 + S + M = 10 × M + O (4)
S, M > 0 (5)
allDifferent(S, E, N, D, M, O, R, Y )
(6)
r1 ∈ [0, 1] r2 ∈ [0, 1] r3 = 0
S ∈ [8, 9] E ∈ [2, 9] N ∈ [2, 9]
D ∈ [2, 9] M = 1 O = 0
R ∈ [2, 9] Y ∈ [2, 9]
(4) M ≤ b(r3 + S − O) ÷ 9c ≤ 1
(4) O ≤ r3 + S − 9 ≤ 1
(4) S ≥ 9 + O − r3 ≥ 8
(6) O = 0 ; E, N, D, R, Y ≥ 2
(3) r3 ≤ b(r2 + E − N) ÷ 10c ≤ 0
48 / 122
Programmation par contraintes
N
SEND+MORE=MONEY
SEND+MORE=MONEY
D + E = 10 × r1 + Y (1)
r1 + N + R = 10 × r2 + E (2)
r2 + E + O = 10 × r3 + N (3)
r3 + S + M = 10 × M + O (4)
S, M > 0 (5)
allDifferent(S, E, N, D, M, O, R, Y )
(6)
r1 ∈ [0, 1] r2 ∈ [0, 1] r3 = 0
S = 9 E ∈ [2, 9] N ∈ [2, 9]
D ∈ [2, 9] M = 1 O = 0
R ∈ [2, 9] Y ∈ [2, 9]
(4) M ≤ b(r3 + S − O) ÷ 9c ≤ 1
(4) O ≤ r3 + S − 9 ≤ 1
(4) S ≥ 9 + O − r3 ≥ 8
(6) O = 0 ; E, N, D, R, Y ≥ 2
(3) r3 ≤ b(r2 + E − N) ÷ 10c ≤ 0
(4) S = 9
48 / 122
Programmation par contraintes
N
SEND+MORE=MONEY
SEND+MORE=MONEY
D + E = 10 × r1 + Y (1)
r1 + N + R = 10 × r2 + E (2)
r2 + E + O = 10 × r3 + N (3)
r3 + S + M = 10 × M + O (4)
S, M > 0 (5)
allDifferent(S, E, N, D, M, O, R, Y )
(6)
r1 ∈ [0, 1] r2 ∈ [0, 1] r3 = 0
S = 9 E ∈ [2, 8] N ∈ [2, 8]
D ∈ [2, 8] M = 1 O = 0
R ∈ [2, 8] Y ∈ [2, 8]
(4) M ≤ b(r3 + S − O) ÷ 9c ≤ 1
(4) O ≤ r3 + S − 9 ≤ 1
(4) S ≥ 9 + O − r3 ≥ 8
(6) O = 0 ; E, N, D, R, Y ≥ 2
(3) r3 ≤ b(r2 + E − N) ÷ 10c ≤ 0
(4) S = 9
(6) E, N, D, R, Y ≤ 8
48 / 122
Programmation par contraintes
N
SEND+MORE=MONEY
SEND+MORE=MONEY
D + E = 10 × r1 + Y (1)
r1 + N + R = 10 × r2 + E (2)
r2 + E + O = 10 × r3 + N (3)
r3 + S + M = 10 × M + O (4)
S, M > 0 (5)
allDifferent(S, E, N, D, M, O, R, Y )
(6)
r1 ∈ [0, 1] r2 = 1 r3 = 0
S = 9 E ∈ [2, 8] N ∈ [3, 8]
D ∈ [2, 8] M = 1 O = 0
R ∈ [2, 8] Y ∈ [2, 8]
(4) M ≤ b(r3 + S − O) ÷ 9c ≤ 1
(4) O ≤ r3 + S − 9 ≤ 1
(4) S ≥ 9 + O − r3 ≥ 8
(6) O = 0 ; E, N, D, R, Y ≥ 2
(3) r3 ≤ b(r2 + E − N) ÷ 10c ≤ 0
(4) S = 9
(6) E, N, D, R, Y ≤ 8
(3) ET (6) r2 = 1 ∧ N ≥ 3
48 / 122
Programmation par contraintes
N
SEND+MORE=MONEY
SEND+MORE=MONEY
D + E = 10 × r1 + Y (1)
r1 + N + R = 10 × r2 + E (2)
r2 + E + O = 10 × r3 + N (3)
r3 + S + M = 10 × M + O (4)
S, M > 0 (5)
allDifferent(S, E, N, D, M, O, R, Y )
(6)
r1 = 1 r2 = 1 r3 = 0
S = 9 E ∈ [2, 8] N ∈ [3, 8]
D ∈ [2, 8] M = 1 O = 0
R = 8 Y ∈ [2, 8]
(4) M ≤ b(r3 + S − O) ÷ 9c ≤ 1
(4) O ≤ r3 + S − 9 ≤ 1
(4) S ≥ 9 + O − r3 ≥ 8
(6) O = 0 ; E, N, D, R, Y ≥ 2
(3) r3 ≤ b(r2 + E − N) ÷ 10c ≤ 0
(4) S = 9
(6) E, N, D, R, Y ≤ 8
(3) ET (6) r2 = 1 ∧ N ≥ 3
(2) R ≥ 9 − r1 ≥ 8
(2) r1 ≥ 9 − R ≥ 1
48 / 122
Programmation par contraintes
N
SEND+MORE=MONEY
SEND+MORE=MONEY
D + E = 10 × r1 + Y (1)
r1 + N + R = 10 × r2 + E (2)
r2 + E + O = 10 × r3 + N (3)
r3 + S + M = 10 × M + O (4)
S, M > 0 (5)
allDifferent(S, E, N, D, M, O, R, Y )
(6)
r1 = 1 r2 = 1 r3 = 0
S = 9 E ∈ [5, 7] N ∈ [3, 7]
D ∈ [2, 7] M = 1 O = 0
R = 8 Y ∈ [2, 7]
(4) M ≤ b(r3 + S − O) ÷ 9c ≤ 1
(4) O ≤ r3 + S − 9 ≤ 1
(4) S ≥ 9 + O − r3 ≥ 8
(6) O = 0 ; E, N, D, R, Y ≥ 2
(3) r3 ≤ b(r2 + E − N) ÷ 10c ≤ 0
(4) S = 9
(6) E, N, D, R, Y ≤ 8
(3) ET (6) r2 = 1 ∧ N ≥ 3
(2) R ≥ 9 − r1 ≥ 8
(2) r1 ≥ 9 − R ≥ 1
(6) E, N, D, Y ≤ 7
48 / 122
Programmation par contraintes
N
SEND+MORE=MONEY
SEND+MORE=MONEY
D + E = 10 × r1 + Y (1)
r1 + N + R = 10 × r2 + E (2)
r2 + E + O = 10 × r3 + N (3)
r3 + S + M = 10 × M + O (4)
S, M > 0 (5)
allDifferent(S, E, N, D, M, O, R, Y )
(6)
r1 = 1 r2 = 1 r3 = 0
S = 9 E ∈ [5, 7] N ∈ [3, 7]
D ∈ [5, 7] M = 1 O = 0
R = 8 Y ∈ [2, 4]
(4) M ≤ b(r3 + S − O) ÷ 9c ≤ 1
(4) O ≤ r3 + S − 9 ≤ 1
(4) S ≥ 9 + O − r3 ≥ 8
(6) O = 0 ; E, N, D, R, Y ≥ 2
(3) r3 ≤ b(r2 + E − N) ÷ 10c ≤ 0
(4) S = 9
(6) E, N, D, R, Y ≤ 8
(3) ET (6) r2 = 1 ∧ N ≥ 3
(2) R ≥ 9 − r1 ≥ 8
(2) r1 ≥ 9 − R ≥ 1
(6) E, N, D, Y ≤ 7
(1) (D, E) ≥ 10 + Y − (E, D) ≥ 5
(1) Y ≤ E + D − 10 ≤ 4
48 / 122
Programmation par contraintes
N
SEND+MORE=MONEY
9END+108E=10NEY
D + E = 10 + Y (7)
N = E + 1 (8)
allDifferent(E, N, D, Y ) (9)
E ∈ [5, 7] N ∈ [3, 7]
D ∈ [5, 7] Y ∈ [2, 4]
49 / 122
Programmation par contraintes
N
SEND+MORE=MONEY
9END+108E=10NEY
D + E = 10 + Y (7)
N = E + 1 (8)
allDifferent(E, N, D, Y ) (9)
E ∈ [5, 6] N ∈ [6, 7]
D ∈ [5, 7] Y ∈ [2, 4]
(8) N ≥ E + 1 ≥ 6
(8) E ≤ N − 1 ≤ 6
49 / 122
Programmation par contraintes
N
SEND+MORE=MONEY
9END+108E=10NEY
D + E = 10 + Y (7)
N = E + 1 (8)
allDifferent(E, N, D, Y ) (9)
E ∈ [5, 6] N ∈ [6, 7]
D ∈ [6, 7] Y ∈ [2, 3]
(8) N ≥ E + 1 ≥ 6
(8) E ≤ N − 1 ≤ 6
(7) D ≥ 10 + Y − E ≥ 6
(7) Y ≤ D + E − 10 ≥ 3
49 / 122
Programmation par contraintes
N
SEND+MORE=MONEY
9END+108E=10NEY
D + E = 10 + Y (7)
N = E + 1 (8)
allDifferent(E, N, D, Y ) (9)
E = 5 N ∈ [6, 7]
D ∈ [6, 7] Y ∈ [2, 3]
(8) N ≥ E + 1 ≥ 6
(8) E ≤ N − 1 ≤ 6
(7) D ≥ 10 + Y − E ≥ 6
(7) Y ≤ D + E − 10 ≥ 3
(9) E = 5
49 / 122
Programmation par contraintes
N
SEND+MORE=MONEY
9END+108E=10NEY
D + E = 10 + Y (7)
N = E + 1 (8)
allDifferent(E, N, D, Y ) (9)
E = 5 N = 6
D ∈ [6, 7] Y ∈ [2, 3]
(8) N ≥ E + 1 ≥ 6
(8) E ≤ N − 1 ≤ 6
(7) D ≥ 10 + Y − E ≥ 6
(7) Y ≤ D + E − 10 ≥ 3
(9) E = 5
(8) N = 6
49 / 122
Programmation par contraintes
N
SEND+MORE=MONEY
9END+108E=10NEY
D + E = 10 + Y (7)
N = E + 1 (8)
allDifferent(E, N, D, Y ) (9)
E = 5 N = 6
D = 7 Y ∈ [2, 3]
(8) N ≥ E + 1 ≥ 6
(8) E ≤ N − 1 ≤ 6
(7) D ≥ 10 + Y − E ≥ 6
(7) Y ≤ D + E − 10 ≥ 3
(9) E = 5
(8) N = 6
(9) D = 7
49 / 122
Programmation par contraintes
N
SEND+MORE=MONEY
9END+108E=10NEY
D + E = 10 + Y (7)
N = E + 1 (8)
allDifferent(E, N, D, Y ) (9)
E = 5 N = 6
D = 7 Y = 2
(8) N ≥ E + 1 ≥ 6
(8) E ≤ N − 1 ≤ 6
(7) D ≥ 10 + Y − E ≥ 6
(7) Y ≤ D + E − 10 ≥ 3
(9) E = 5
(8) N = 6
(9) D = 7
(7) Y = 2
SOLUTION
49 / 122
Programmation par contraintes
N
Problème des dames
Plan
1 SEND+MORE=MONEY
2 Problème des dames
3 Séquence magique
4 Règles de Golomb
5 Suite de Langford
50 / 122
Programmation par contraintes
N
Problème des dames
CSP, vos papiers !
Sur un échiquier de taille n × n, placer un nombre maximum de dames
de telle sorte qu’aucune dame ne puisse en capturer une autre.
I Une dame peut en capturer une autre si elles sont sur la même ligne,
colonne, ou diagonale.
51 / 122
Programmation par contraintes
N
Problème des dames
CSP, vos papiers !
Sur un échiquier de taille n × n, placer un nombre maximum de dames
de telle sorte qu’aucune dame ne puisse en capturer une autre.
I Une dame peut en capturer une autre si elles sont sur la même ligne,
colonne, ou diagonale.
Méthode simple
Transformer le problème d’optimisation en une séquence de problèmes
de satisfaction de contraintes :
I 1 dame sur l’échiquier ?
I 2 dames sur l’échiquier ?
I . . .
I n dames sur l’échiquier ?
51 / 122
Programmation par contraintes
N
Problème des dames
CSP, vos papiers !
Sur un échiquier de taille n × n, placer un nombre maximum de dames
de telle sorte qu’aucune dame ne puisse en capturer une autre.
I Une dame peut en capturer une autre si elles sont sur la même ligne,
colonne, ou diagonale.
Méthode simple
Transformer le problème d’optimisation en une séquence de problèmes
de satisfaction de contraintes :
I 1 dame sur l’échiquier ?
I 2 dames sur l’échiquier ?
I . . .
I n dames sur l’échiquier ?
Exercice 1
Résoudre le problème à la main pour n = 2, 3, 4, 5.
51 / 122
Programmation par contraintes
N
Problème des dames
Algorithme glouton (n ≥ 4)
List of numbers for vertical positions (rows) of queens with horizontal
position (column) simply increasing.
I If the remainder from dividing N by 6 is not 2 or 3 then the list is simply
all even numbers followed by all odd numbers ≤ n.
I Otherwise, write separate lists of even and odd numbers.
I 2,4,6,8 – 1,3,5,7
I If the remainder is 2, swap 1 and 3 in odd list and move 5 to the end.
I 3,1,7,5
I If the remainder is 3, move 2 to the end of even list and 1,3 to the end of
odd list.
I 4,6,8,2 – 5,7,9,1,3
I Append odd list to the even list and place queens in the rows given by
these numbers, from left to right.
I a2, b4, c6, d8, e3, f1, g7, h5
Exemples
52 / 122
Programmation par contraintes
N
Problème des dames
Algorithme glouton (n ≥ 4)
List of numbers for vertical positions (rows) of queens with horizontal
position (column) simply increasing.
I If the remainder from dividing N by 6 is not 2 or 3 then the list is simply
all even numbers followed by all odd numbers ≤ n.
I Otherwise, write separate lists of even and odd numbers.
I 2,4,6,8 – 1,3,5,7
I If the remainder is 2, swap 1 and 3 in odd list and move 5 to the end.
I 3,1,7,5
I If the remainder is 3, move 2 to the end of even list and 1,3 to the end of
odd list.
I 4,6,8,2 – 5,7,9,1,3
I Append odd list to the even list and place queens in the rows given by
these numbers, from left to right.
I a2, b4, c6, d8, e3, f1, g7, h5
Exemples
14 dames (reste 2) : 2, 4, 6, 8, 10, 12, 14, 3, 1, 7, 9, 11, 13, 5.
52 / 122
Programmation par contraintes
N
Problème des dames
Algorithme glouton (n ≥ 4)
List of numbers for vertical positions (rows) of queens with horizontal
position (column) simply increasing.
I If the remainder from dividing N by 6 is not 2 or 3 then the list is simply
all even numbers followed by all odd numbers ≤ n.
I Otherwise, write separate lists of even and odd numbers.
I 2,4,6,8 – 1,3,5,7
I If the remainder is 2, swap 1 and 3 in odd list and move 5 to the end.
I 3,1,7,5
I If the remainder is 3, move 2 to the end of even list and 1,3 to the end of
odd list.
I 4,6,8,2 – 5,7,9,1,3
I Append odd list to the even list and place queens in the rows given by
these numbers, from left to right.
I a2, b4, c6, d8, e3, f1, g7, h5
Exemples
14 dames (reste 2) : 2, 4, 6, 8, 10, 12, 14, 3, 1, 7, 9, 11, 13, 5.
15 dames (reste 3) : 4, 6, 8, 10, 12, 14, 2, 5, 7, 9, 11, 13, 15, 1, 3.
52 / 122
Programmation par contraintes
N
Problème des dames
Problème des n dames (n queens problem)
Sur un échiquier de taille n × n, placer n dames de telle sorte
qu’aucune dame ne puisse en capturer une autre.
53 / 122
Programmation par contraintes
N
Problème des dames
Modèle booléen
I La variable qij ∈ [0, 1] indique si une reine est présente sur la case (i, j).
54 / 122
Programmation par contraintes
N
Problème des dames
Modèle lignes/colonnes
I La variable li ∈ [1, n] indique la ligne de la dame i.
I La variable ci ∈ [1, n] indique la colonne de la dame i.
ci 6= cj 1 ≤ i < j ≤ n
li 6= lj 1 ≤ i < j ≤ n
li + (cj − ci ) 6= lj 1 ≤ i 6= j ≤ n
ci + (li − lj ) 6= cj 1 ≤ i 6= j ≤ n
55 / 122
Programmation par contraintes
N
Problème des dames
Modèle lignes (binaire)
I la dame i se trouve sur la ligne i
I La variable ci ∈ [1, n] représente la colonne de la dame i.
ci 6= cj 1 ≤ i < j ≤ n
ci 6= cj + (j − i) 1 ≤ i < j ≤ n
ci 6= cj − (j − i) 1 ≤ i < j ≤ n
56 / 122
Programmation par contraintes
N
Problème des dames
Modèle lignes (global)
I la dame i se trouve sur la ligne i
I La variable ci ∈ [1, n] représente la colonne de la dame i.
I Les variables auxiliaires mi et pi représentent les projections de la dame i
sur la colonne 0 selon les diagonales.
I Des contraintes globales remplacent les cliques d’inégalités binaires.
allDifferent(c1, . . . , cn)
mi = ci − i 1 ≤ i ≤ n
allDifferent(m1, . . . , mn)
pi = ci + i 1 ≤ i ≤ n
allDifferent(p1, . . . , pn)
57 / 122
Programmation par contraintes
N
Problème des dames
Dualité
Exercice 2
Proposer un modèle dual.
Exercice 3
Proposer un modèle combiné, i.e. le modèles primal et le dual.
58 / 122
Programmation par contraintes
N
Problème des dames
Dualité
Exercice 2
Proposer un modèle dual.
Solution
I Inversion du rôle des lignes et des colonnes.
I la dame j se trouve sur la colonne j
I La variable lj ∈ [1, n] représente la ligne de la dame j.
Exercice 3
Proposer un modèle combiné, i.e. le modèles primal et le dual.
58 / 122
Programmation par contraintes
N
Problème des dames
Dualité
Exercice 2
Proposer un modèle dual.
Solution
I Inversion du rôle des lignes et des colonnes.
I la dame j se trouve sur la colonne j
I La variable lj ∈ [1, n] représente la ligne de la dame j.
Exercice 3
Proposer un modèle combiné, i.e. le modèles primal et le dual.
Solution
lj = i ⇔ ci = j 1 ≤ i ≤ n
58 / 122
Programmation par contraintes
N
Problème des dames
Symétries
Une solution unique ou fondamentale a au plus 8 variantes (incluant
elle-même) :
I rotation d’un angle de 90, 180, ou 270 degrés et ensuite
I réflexion en miroir selon un axe fixe.
# - - - - - - - - # - # - - - # - - - -
- - # - - - # - - - - - - # - - - - # -
- - - - # - - - # - # - - - - - # - - -
- # - - - # - - - - - - # - - - - - - #
- - - # - - - # - - - - - - # - - # - -
- - - # - - - # - - - - - - # - - # - -
- # - - - # - - - - - - # - - - - - - #
- - - - # - - - # - # - - - - - # - - -
- - # - - - # - - - - - - # - - - - # -
# - - - - - - - - # - # - - - # - - - -
59 / 122
Programmation par contraintes
N
Problème des dames
Dénombrement
Invariant par rotation de 90 degrés
2 : Identité ; miroir.
2x + 8x = 10
- # - - - # - - - -
- - - - # - - # - -
- - # - - - - - - #
# - - - - - # - - -
- - - # - - - - # -
60 / 122
Programmation par contraintes
N
Problème des dames
Dénombrement
Invariant par rotation de 90 degrés
2 : Identité ; miroir.
Invariant par rotation de 180 degrés
4 : identité ; réflexion ; rotation 90 degrés ; réflexion de la rotation
2x + 8x = 10
- # - - - # - - - -
- - - - # - - # - -
- - # - - - - - - #
# - - - - - # - - -
- - - # - - - - # -
60 / 122
Programmation par contraintes
N
Problème des dames
Dénombrement
Invariant par rotation de 90 degrés
2 : Identité ; miroir.
Invariant par rotation de 180 degrés
4 : identité ; réflexion ; rotation 90 degrés ; réflexion de la rotation
Invariant par miroir
Impossible, sinon deux reines seraient placées en face l’une de l’autre.
2x + 8x = 10
- # - - - # - - - -
- - - - # - - # - -
- - # - - - - - - #
# - - - - - # - - -
- - - # - - - - # -
60 / 122
Programmation par contraintes
N
Problème des dames
Élimination des symétries
Rotation de 180 degrés
∧k−1
j=1 (cj = n + 1 − cn+1−j ) ⇒ ck ≤ n + 1 − cn+1−k 1 ≤ k ≤ b
n
2
c
8 dames
c1 = n + 1 − c8 ∧ c2 ≤ n + 1 − c7
- - # -|- - - - - - # -|- - - -
- - - -|# - - - - - - -|- - # -
- - - -|- - - # - # - -|- - - -
- - - #|- - - - - - - -|- - - #
# - - -|- - - - - - - -|# - - -
- - - -|- - # - # - - -|- - - -
- # - -|- - - - - - - #|- - - -
- - - -|- # - - - - - -|- # - - 61 / 122
Programmation par contraintes
N
Problème des dames
Élimination des symétries
Exercice 4 (Rotation de 90 degrés)
1 Proposer des contraintes pour le modèle primal.
2 Proposer des contraintes pour le modèle combiné.
Solution
∧k−1
j=1 (cj = p ∧ cp = n + 1 − j) ⇒ ck ≤ n + 1 − k 1 ≤ k ≤ n − 1
- - # -|- - - - - - - #|- - - -
- - - -|# - - - - # - -|- - - -
- - - -|- - - # - - - -|- - - #
- - - #|- - - - - - - -|# - - -
# - - -|- - - - - - - -|- - # -
- - - -|- - # - # - - -|- - - -
- # - -|- - - - - - # -|- - - -
- - - -|- # - - - - - -|- # - - 62 / 122
Programmation par contraintes
N
Séquence magique
Plan
1 SEND+MORE=MONEY
2 Problème des dames
3 Séquence magique
4 Règles de Golomb
5 Suite de Langford
63 / 122
Programmation par contraintes
N
Séquence magique
Énoncé du problème
Une séquence magique de longueur n est
I une séquence d’entiers x0, . . . , xn−1 compris entre 0 et n − 1 telle que
I le nombre i (i = 0, . . . , n − 1) apparaisse exactement xi fois dans la
séquence.
Séquence magique (n = 10)
i 0 1 2 3 4 5 6 7 8 9
xi 6 2 1 0 0 0 1 0 0 0
I 0 apparaît six fois,
I 1 apparaît deux fois,
I 2 apparaît une fois,
I 6 apparaît une fois
64 / 122
Programmation par contraintes
N
Séquence magique
Énoncé du problème
Une séquence magique de longueur n est
I une séquence d’entiers x0, . . . , xn−1 compris entre 0 et n − 1 telle que
I le nombre i (i = 0, . . . , n − 1) apparaisse exactement xi fois dans la
séquence.
Séquence magique (n = 10)
i 0 1 2 3 4 5 6 7 8 9
xi 6 2 1 0 0 0 1 0 0 0
I 0 apparaît six fois,
I 1 apparaît deux fois,
I 2 apparaît une fois,
I 6 apparaît une fois
Exercice 5
Résoudre le problème à la main pour n = 1, 2, 3, 4, 5.
64 / 122
Programmation par contraintes
N
Séquence magique
Modèle de base
xi (i = 0, . . . , n − 1) est égale au nombre d’occurrences de la valeur i
dans le tableau [x0, . . . , xn−1].
xi = |{j | 0 ≤ j ≤ n − 1 ∧ xj = i}| 0 ≤ i ≤ n − 1
65 / 122
Programmation par contraintes
N
Séquence magique
Modèle de base
xi (i = 0, . . . , n − 1) est égale au nombre d’occurrences de la valeur i
dans le tableau [x0, . . . , xn−1].
xi = |{j | 0 ≤ j ≤ n − 1 ∧ xj = i}| 0 ≤ i ≤ n − 1
Rappel : globalCardinality
Les valeurs v1, . . . , vm apparaissent Ov1 , . . . , Ovm dans X1, . . . , Xn.
65 / 122
Programmation par contraintes
N
Séquence magique
Contrainte redondante
I une contrainte redondante est impliquée par une ou plusieurs autres.
I Elle n’est pas nécessaire, mais on espère qu’elle va aider à la résolution.
66 / 122
Programmation par contraintes
N
Séquence magique
Contrainte redondante sur la somme
La somme des occurrences des valeurs dans la séquence est égale au
nombre d’éléments de la séquence :
n−1
X
i=0
xi = n.
n = 10
6 + 2 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 = 10
67 / 122
Programmation par contraintes
N
Séquence magique
Contrainte redondante sur la somme des produits
La somme des produits des valeurs et de leurs occurrences est égale au
nombre d’éléments de la séquence :
n−1
X
i=0
i × xi = n.
n = 10
6
|{z}
0,0,0,0,0,0
, 2
|{z}
1,1
, 1
|{z}
2
, 0, 0, 0, 1
|{z}
6
, 0, 0, 0
68 / 122
Programmation par contraintes
N
Séquence magique
Propagation de contraintes (n = 10)
69 / 122
Programmation par contraintes
N
Séquence magique
Propagation de contraintes (n = 10)
D(x0) = [0, 9]
D(x1) = [0, 9]
D(x2) = [0, 5]
D(x3) = [0, 3]
D(x4) = [0, 2]
D(x5) = [0, 2]
D(x6) = [0, 1]
D(x7) = [0, 1]
D(x8) = [0, 1]
D(x9) = [0, 1]
69 / 122
Programmation par contraintes
N
Séquence magique
Propagation de contraintes (n = 10)
D(x0) = [0, 9]
D(x1) = [0, 9]
D(x2) = [0, 5]
D(x3) = [0, 3]
D(x4) = [0, 2]
D(x5) = [0, 2]
D(x6) = [0, 1]
D(x7) = [0, 1]
D(x8) = [0, 1]
D(x9) = [0, 1]
Shaving ou SAC
Pour chaque variable x ∈ X et
chaque valeur v ∈ D(x) :
I propager la décision x = v.
I Si une contradiction est détectée, alors x 6= v.
Recommencer jusqu’au point fixe.
69 / 122
Programmation par contraintes
N
Séquence magique
Propagation de contraintes (n = 10)
D(x0) = [0, 9]
D(x1) = [0, 9]
D(x2) = [0, 5]
D(x3) = [0, 3]
D(x4) = [0, 2]
D(x5) = [0, 2]
D(x6) = [0, 1]
D(x7) = [0, 1]
D(x8) = [0, 1]
D(x9) = [0, 1]
Shaving ou SAC
Pour chaque variable x ∈ X et
chaque valeur v ∈ D(x) :
I propager la décision x = v.
I Si une contradiction est détectée, alors x 6= v.
Recommencer jusqu’au point fixe.
Performance
Search 8 nœuds et 8 backtracks.
Shaving 13 affectations.
69 / 122
Programmation par contraintes
N
Séquence magique
Le mot de la fin
Pour n > 6, le motif suivant représente l’unique ( ?) séquence magique :
n − 4, 2, 1, . . . , 1, 0, 0, 0.
70 / 122
Programmation par contraintes
N
Règles de Golomb
Plan
1 SEND+MORE=MONEY
2 Problème des dames
3 Séquence magique
4 Règles de Golomb
5 Suite de Langford
71 / 122
Programmation par contraintes
N
Règles de Golomb
Règle de Golomb
Une règle de Golomb R(n, l) est :
I un ensemble de n entiers {a1, . . . , an}
I de longueur l = maxi,j∈[1,n](ai − aj ) et tel que
I les différences ai − aj (i, j ∈ [1, n]) soient distinctes.
Une règle est optimale si elle est de longueur minimale.
Plus grande règle optimale : R(26, 492)
0 1 33 83 104 110 124 163 185 200 203 249 251 258 314 318 343
356 386 430 440 456 464 475 487 492
Applications
radioastronomie, cristallographie
72 / 122
Programmation par contraintes
N
Règles de Golomb
Règle de Golomb
Une règle de Golomb R(n, l) est :
I un ensemble de n entiers {a1, . . . , an}
I de longueur l = maxi,j∈[1,n](ai − aj ) et tel que
I les différences ai − aj (i, j ∈ [1, n]) soient distinctes.
Une règle est optimale si elle est de longueur minimale.
Plus grande règle optimale : R(26, 492)
0 1 33 83 104 110 124 163 185 200 203 249 251 258 314 318 343
356 386 430 440 456 464 475 487 492
Applications
radioastronomie, cristallographie
Exercice 6
Résoudre le problème à la main pour n = 1, 2, 3, 4, 5.
72 / 122
Programmation par contraintes
N
Règles de Golomb
Algorithme glouton : R(n, 2n−1
− 1)
Règle exponentielle
ai = 2i
− 1 i ≥ 0
0, 1, 3, 7, 15, 31, 63, . . .
Preuve
formelle décomposition en facteurs premiers.
intuitive décomposition binaire.
ai − aj = 2i
− 2j
= 2j
(2i−j
− 1)
= (1 . . . 1
| {z }
i−j
0 . . . 0
| {z }
j
)2
73 / 122
Programmation par contraintes
N
Règles de Golomb
Élimination des symétries
74 / 122
Programmation par contraintes
N
Règles de Golomb
Élimination des symétries
Monotonie
a1 < a2 < . . . < an
Translation
a1 = 0
Réflexion : a0
i = an − an−i
La première différence est plus petite que la dernière :
a2 − a1 < an − an−1.
1 4 9 11
2 0
7
10
11
0
74 / 122
Programmation par contraintes
N
Règles de Golomb
Élimination des symétries
Monotonie
a1 < a2 < . . . < an
Translation
a1 = 0
Réflexion : a0
i = an − an−i
La première différence est plus petite que la dernière :
a2 − a1 < an − an−1.
1 4 9 11
2 0
7
10
11
0
Exercice 7
Prouver que deux marques ne peuvent pas être à la même position.
74 / 122
Programmation par contraintes
N
Règles de Golomb
Modèle de base
ai ∈ [0, l] la position de la i-ème marque (i = 1, . . . , n) de la règle.
dij ∈ [1, l] la différence entre les positions des marques i et j
(1 ≤ i < j ≤ n).
dij = aj − ai 1 ≤ i < j ≤ n
allDifferent([dij ]1≤i<j≤n)
75 / 122
Programmation par contraintes
N
Règles de Golomb
Modèle de base
ai ∈ [0, l] la position de la i-ème marque (i = 1, . . . , n) de la règle.
dij ∈ [1, l] la différence entre les positions des marques i et j
(1 ≤ i < j ≤ n).
dij = aj − ai 1 ≤ i < j ≤ n
allDifferent([dij ]1≤i<j≤n)
Exercice 8
Proposer des contraintes redondantes.
75 / 122
Programmation par contraintes
N
Règles de Golomb
Modèle de base
ai ∈ [0, l] la position de la i-ème marque (i = 1, . . . , n) de la règle.
dij ∈ [1, l] la différence entre les positions des marques i et j
(1 ≤ i < j ≤ n).
dij = aj − ai 1 ≤ i < j ≤ n
allDifferent([dij ]1≤i<j≤n)
Exercice 8
Proposer des contraintes redondantes.
Solution
I Triplet de différences : dij = dik + dkj 1 ≤ i < k < j ≤ n
I Différences consécutives : dij =
Pj−1
k=i
dk(k+1) 1 ≤ i < j ≤ n
75 / 122
Programmation par contraintes
N
Règles de Golomb
Bornes inférieures
Quelles propriétés doit vérifier la partie de la règle comprise entre les
marques ai et aj ?
1 i j n
La sous-règle comprise entre les marques xi et xj est aussi une règle
de Golomb (pas forcément optimale) avec j − i + 1 marques.
76 / 122
Programmation par contraintes
N
Règles de Golomb
Bornes inférieures
Quelles propriétés doit vérifier la partie de la règle comprise entre les
marques ai et aj ?
1 i j n
La sous-règle comprise entre les marques xi et xj est aussi une règle
de Golomb (pas forcément optimale) avec j − i + 1 marques.
I Sa longueur est supérieure à la somme des j − i plus petits entiers.
dij = aj − ai =
j−1
X
k=i
dk(k+1) ≥
j−i
X
k=1
k
76 / 122
Programmation par contraintes
N
Règles de Golomb
Bornes inférieures
Quelles propriétés doit vérifier la partie de la règle comprise entre les
marques ai et aj ?
1 i j n
La sous-règle comprise entre les marques xi et xj est aussi une règle
de Golomb (pas forcément optimale) avec j − i + 1 marques.
I Sa longueur est supérieure à la somme des j − i plus petits entiers.
dij = aj − ai =
j−1
X
k=i
dk(k+1) ≥
j−i
X
k=1
k
I Soit Lm la longueur optimale de la règle de Golomb d’ordre m < n.
dij ≥ Lj−i+1
76 / 122
Programmation par contraintes
N
Règles de Golomb
Borne supérieure
Quelle propriété doit vérifier le complémentaire de la sous-règle
comprise entre les marques xi et xj ?
1 i j n
77 / 122
Programmation par contraintes
N
Règles de Golomb
Borne supérieure
Quelle propriété doit vérifier le complémentaire de la sous-règle
comprise entre les marques xi et xj ?
1 i j n
I Les différences consécutives du complémentaire sont distinctes.
dij = d1n − d1i − djn = xn −
i
X
k=1
dk(k+1) −
n
X
k=j
dk(k+1)
dij ≥ xn −
m−1−j+i
X
k=1
k
I Le complémentaire ne vérifie pas nécessairement la propriété de Golomb.
77 / 122
Programmation par contraintes
N
Suite de Langford
Plan
1 SEND+MORE=MONEY
2 Problème des dames
3 Séquence magique
4 Règles de Golomb
5 Suite de Langford
78 / 122
Programmation par contraintes
N
Suite de Langford
Pour commencer
Exercice 9
Trouver une séquence de huit nombres telle que :
I Chaque nombre i (i = 1, . . . , 4) apparaît exactement deux fois ;
I deux occurrences du nombre i sont à une distance i
Indice : commencez avec [1, 3].
2
2
1
4 3
3
4 1
Figure: Empilez correctement les cubes. Solutions uniques de L(2,3) et L(2,4)
79 / 122
Programmation par contraintes
N
Suite de Langford
Pour commencer
Exercice 9
Trouver une séquence de huit nombres telle que :
I Chaque nombre i (i = 1, . . . , 4) apparaît exactement deux fois ;
I deux occurrences du nombre i sont à une distance i
Indice : commencez avec [1, 3].
3
2 4 2 1 3 1 4
3
2 1 2 1 3
Figure: Empilez correctement les cubes. Solutions uniques de L(2,3) et L(2,4)
79 / 122
Programmation par contraintes
N
Suite de Langford
Énoncé du problème
Une suite de Langford L(k, n) est :
I une séquence k × n nombres telle que
I chacune des k occurrences successives de i ∈ [1, n]
I soient séparées par une distance i.
Figure: 2 solutions de L(2, 96) issues de Langford’s Problem Graphics Gallery.
Les traits bleus représentent les couples de nombres pairs et les traits
rouges/jaunes représentent les couples de nombres impairs.
80 / 122
Programmation par contraintes
N
Suite de Langford
Modèle primal
xij ∈ [1, k × n] est la position dans la séquence de la j-ème occurrence
du nombre i
allDifferent([xij ]j∈[1,k],i∈[1,n])
xij+1 = xij + i + 1
81 / 122
Programmation par contraintes
N
Suite de Langford
Élimination des symétries
Exercice 10
1 Est-ce que le problème a des symétries ?
2 Proposer une méthode d’élimination des symétries pour L(3, 9).
82 / 122
Programmation par contraintes
N
Suite de Langford
Élimination des symétries
Exercice 10
1 Est-ce que le problème a des symétries ?
2 Proposer une méthode d’élimination des symétries pour L(3, 9).
Solution (Réflexion)
Non trivial : X92 < 14 ∨ (X92 = 14 ∧ X82 < 14).
I La 2ème occurrence de 9 est dans la première moitié.
I ou la 2ème occurrence de 9 est exactement au milieu et la 2ème
occurrence de 8 est dans la première moitié),
82 / 122
Programmation par contraintes
N
Suite de Langford
Modèles duals
Permutation !
yp représente le p-ème nombre de la séquence.
83 / 122
Programmation par contraintes
N
Suite de Langford
Modèles duals
Permutation !
yp représente le p-ème nombre de la séquence.
Modèle dual 1
yp = j × n + i si la j-ème occurrence de i occupe la position p.
allDifferent(y1, . . . , yk×n)
yp = v ⇒ yp+(v mod n)+1 = v + n
83 / 122
Programmation par contraintes
N
Suite de Langford
Modèles duals
Permutation !
yp représente le p-ème nombre de la séquence.
Modèle dual 1
yp = j × n + i si la j-ème occurrence de i occupe la position p.
allDifferent(y1, . . . , yk×n)
yp = v ⇒ yp+(v mod n)+1 = v + n
Modèle dual 2
yp = i si une occurrence du nombre i occupe la position p.
globalCardinality([y1, . . . , yk×n], [1, . . . , n], [k, . . . , k])
yp = i ⇒ yp+i+1 = i
83 / 122
Programmation par contraintes
N
Suite de Langford
Modèles combinés
Contraintes de liaison
Unicité de la solution du modèle primal et le modèle dual.
84 / 122
Programmation par contraintes
N
Suite de Langford
Modèles combinés
Contraintes de liaison
Unicité de la solution du modèle primal et le modèle dual.
Modèle Combiné 1
xij = p ⇔ yp = j × n + i
Modèle Combiné 2
xij = p ⇔ yp = i
84 / 122
Programmation par contraintes
N
Lecture 3
Méthodes de résolution
Programmation par contraintes
29 octobre 2015
Arnaud Malapert
Département d’informatique
Université Nice Sophia Antipolis
Plan
1 Recherche systématique
2 Consistances locales
3 Contraintes globales
4 Algorithmes de recherche
86 / 122
Programmation par contraintes
N
Recherche systématique
Plan
1 Recherche systématique
2 Consistances locales
3 Contraintes globales
4 Algorithmes de recherche
87 / 122
Programmation par contraintes
N
Recherche systématique
Résolution d’un CSP
Complexité
I Prouver la consistance d’un CSP (satisfiabilité) est NP-complet.
I Exhiber une solution d’un CSP est NP-difficile dans le cas général.
I Solution admissible ou optimale.
88 / 122
Programmation par contraintes
N
Recherche systématique
Résolution d’un CSP
Complexité
I Prouver la consistance d’un CSP (satisfiabilité) est NP-complet.
I Exhiber une solution d’un CSP est NP-difficile dans le cas général.
I Solution admissible ou optimale.
Recherche systématique
Generate-and-Test vérification du viol d’une contrainte après
instanciation de toutes les variables du problème.
Test-and-Generate (backtrack) vérification du viol d’une contrainte
après instanciation de toutes les variables inhérentes
à la contrainte.
88 / 122
Programmation par contraintes
N
Recherche systématique
Résolution d’un CSP
Complexité
I Prouver la consistance d’un CSP (satisfiabilité) est NP-complet.
I Exhiber une solution d’un CSP est NP-difficile dans le cas général.
I Solution admissible ou optimale.
Recherche systématique
Generate-and-Test vérification du viol d’une contrainte après
instanciation de toutes les variables du problème.
Test-and-Generate (backtrack) vérification du viol d’une contrainte
après instanciation de toutes les variables inhérentes
à la contrainte.
Exercice 11
Appliquer Test-and-Generate sur le problème des 3 dames.
88 / 122
Programmation par contraintes
N
Recherche systématique
Backtrack sur les 4 dames
89 / 122
Programmation par contraintes
N
Recherche systématique
En bref
Generate-and-Test
§ Toutes les affectations sont considérées
© Les contraintes sont testées uniquement à chaque affectation totale.
Test-and-Generate
© Moins d’affectations sont considérées.
§ Les contraintes sont testées à chaque affectation partielle.
90 / 122
Programmation par contraintes
N
Recherche systématique
En bref
Generate-and-Test
§ Toutes les affectations sont considérées
© Les contraintes sont testées uniquement à chaque affectation totale.
Test-and-Generate
© Moins d’affectations sont considérées.
§ Les contraintes sont testées à chaque affectation partielle.
© Facile à mettre en œuvre.
§ Complexité exponentielle.
§ Échecs tardifs et découverte redondante d’inconsistance locale.
§ Perte d’informations triviales sur l’inconsistance d’affectation partielle.
90 / 122
Programmation par contraintes
N
Consistances locales
Plan
1 Recherche systématique
2 Consistances locales
3 Contraintes globales
4 Algorithmes de recherche
91 / 122
Programmation par contraintes
N
Consistances locales
Principes
Les contraintes sont utilisées activement pour supprimer les
inconsistances.
I Une fonction revise() est associée à chaque contrainte.
I Différents niveaux de consistance possibles pour une même contrainte.
Calcul un point fixe global par des techniques de consistance locale.
I En général, les algorithmes de consistance sont incomplets.
92 / 122
Programmation par contraintes
N
Consistances locales
Exemple : x < y
revise()
xmax ← ymax − 1 (10)
ymin ← xmin + 1 (11)
93 / 122
Programmation par contraintes
N
Consistances locales
Exemple : x < y
revise()
xmax ← ymax − 1 (10)
ymin ← xmin + 1 (11)
Exemple
Dx = {1, 2, 3} ∧ Dy {1, 2, 3}
(10) ⇒ Dx = {1, 2}
(11) ⇒ DY = {2, 3}
(10), (11) ⇒ ∅(point fixe)
93 / 122
Programmation par contraintes
N
Consistances locales
Exemple (BC) : x = y + c
revise()
xmin ← ymin + c (12)
xmax ← ymax + c (13)
ymin ← xmin − c (14)
ymax ← xmax − c (15)
94 / 122
Programmation par contraintes
N
Consistances locales
Exemple (BC) : x = y + c
revise()
xmin ← ymin + c (12)
xmax ← ymax + c (13)
ymin ← xmin − c (14)
ymax ← xmax − c (15)
Exemple : x = y + 6
Dx = [1, 20] ∧ Dy = [1, 18]
(12) ⇒ Dx = [7, 20]
(15) ⇒ DY = [1, 14]
(12), (13), (14), (15) ⇒ point fixe
94 / 122
Programmation par contraintes
N
Consistances locales
Exemple (AC) : x = y + c
revise()
∃y ∈ Dy , (y + c) /
∈ Dx ⇒ y /
∈ Dy (16)
∃x ∈ Dx , (x − c) /
∈ Dy ⇒ x /
∈ Dx (17)
Exercice 12
Proposer un algorithme effectuant l’AC.
95 / 122
Programmation par contraintes
N
Consistances locales
Consistance de nœud
Un CSP est dit consistant de nœud si pour toute variable X et pour
toute valeur v ∈ DX , l’affectation partielle (X, v) satisfait toutes les
contraintes unaires.
96 / 122
Programmation par contraintes
N
Consistances locales
Consistance de nœud
Un CSP est dit consistant de nœud si pour toute variable X et pour
toute valeur v ∈ DX , l’affectation partielle (X, v) satisfait toutes les
contraintes unaires.
pas de propagation
96 / 122
Programmation par contraintes
N
Consistances locales
Arc-consistance
I Une contrainte est dite arc-consistante si pour chaque valeur de chaque
variable, il existe une affectation des autres variables telle que la
contrainte soit satisfaite
I La valeur est dans le support de la contrainte.
I Un CSP est arc-consistant si toutes ses contraintes sont arc-consistantes.
I Effectuer la révision de chaque contrainte une fois n’est pas suffisant.
AC-1
Répéter la révision de toutes les contraintes jusqu’à ce qu’aucun do-
maine n’ait changé.
97 / 122
Programmation par contraintes
N
Consistances locales
Arc-consistance : modèle binaire des 4 dames
98 / 122
Programmation par contraintes
N
Consistances locales
Arc-consistance : modèle binaire des 4 dames
98 / 122
Programmation par contraintes
N
Consistances locales
Arc-consistance : modèle binaire des 4 dames
98 / 122
Programmation par contraintes
N
Consistances locales
Arc-consistance : modèle binaire des 4 dames
98 / 122
Programmation par contraintes
N
Consistances locales
Arc-consistance : modèle binaire des 4 dames
98 / 122
Programmation par contraintes
N
Consistances locales
Arc-consistance : modèle binaire des 4 dames
98 / 122
Programmation par contraintes
N
Consistances locales
Autres algorithmes d’AC
AC-3
I Utiliser une queue de contraintes qui doivent être révisées
I Quand le domaine d’une variable a changé, seules les contraintes
portant sur cette variable sont ajoutées à la queue
99 / 122
Programmation par contraintes
N
Consistances locales
Autres algorithmes d’AC
AC-3
I Utiliser une queue de contraintes qui doivent être révisées
I Quand le domaine d’une variable a changé, seules les contraintes
portant sur cette variable sont ajoutées à la queue
En pratique, AC-3 -> AC-8
I Utiliser une queue de variables dont le domaine a changé.
I On filtre le réveil d’une contrainte en fonction d’évènements
I réduction, suppression, instanciation, . . .
99 / 122
Programmation par contraintes
N
Consistances locales
Consistance de bornes
un CSP est dit A-consistant de bornes pour une consistance donnée A
si et seulement si pour chaque valeur xmin et xmax sont A-consistant.
I Variables avec de grands domaines.
I Algorithme de filtrage ne créant pas de trous.
100 / 122
Programmation par contraintes
N
Consistances locales
AC est incomplète
AC ne détecte pas les inconsistances dues à un
ensemble de contraintes.
Y
DY = {1, 2}
Z
DZ = {1, 2}
X
DX = {1, 2}
X 6= Z
Y 6= Z
X 6= Y
101 / 122
Programmation par contraintes
N
Consistances locales
Consistance de chemin
Les variables (X0, X1, . . . , Xm) sont consistantes de chemin si et
seulement si pour chaque pair x ∈ D0, y ∈ Dm satisfaisant toutes les
contraintes binaires entre X0 et Xm, il existe une affectation des
variables X1, . . . , Xm−1 telle que toutes les contraintes binaires Xi , Xi+1
sont satisfaites.
I uniquement les contraintes binaires entre voisins
I l’exploration des chemins de longueur 2 est suffisante (Montanary, 1974)
102 / 122
Programmation par contraintes
N
Consistances locales
Consistance de singleton
un CSP est dit singleton A-consistant pour une consistance donnée A
si et seulement si pour chaque valeur x ∈ DX le problème P|X=v| est
A-consistant.
I On supprime des valeurs uniquement
I Facile à mettre en œuvre (meta-programmation).
I Lenteur d’exécution.
103 / 122
Programmation par contraintes
N
Contraintes globales
Plan
1 Recherche systématique
2 Consistances locales
3 Contraintes globales
4 Algorithmes de recherche
104 / 122
Programmation par contraintes
N
Contraintes globales
Un monde global
Les contraintes agissent sur de petits ensembles de variables.
© contraintes hétérogènes ⇒ aide à la modélisation.
§ pas de vue globale ⇒ réduction des domaines affaiblie.
105 / 122
Programmation par contraintes
N
Contraintes globales
Un monde global
Les contraintes agissent sur de petits ensembles de variables.
© contraintes hétérogènes ⇒ aide à la modélisation.
§ pas de vue globale ⇒ réduction des domaines affaiblie.
Contrainte globale
I Raisonnement sur un sous-problème ou
I utilisation d’information sémantique
I pour diminuer le temps de calcul ou
I augmenter l’efficacité du filtrage
105 / 122
Programmation par contraintes
N
Contraintes globales
Un monde global
I AC ne déduit toujours rien . . .
I PC supprime certaines valeurs des domaines au prix d’une lenteur certaine.
I On cherche un compromis . . .
Y
DY = {1, 2}
Z
DZ = {1, 2, 3}
X
DX = {1, 2}
X 6= Z
Y 6= Z
X 6= Y
106 / 122
Programmation par contraintes
N
Contraintes globales
Un monde global
I AC ne déduit toujours rien . . .
I PC supprime certaines valeurs des domaines au prix d’une lenteur certaine.
I On cherche un compromis . . .
Y
DY = {1, 2}
Z
DZ = {1, 2, 3}
X
DX = {1, 2}
X 6= Z
Y 6= Z
X 6= Y
106 / 122
Programmation par contraintes
N
Contraintes globales
Un monde global
I AC ne déduit toujours rien . . .
I PC supprime certaines valeurs des domaines au prix d’une lenteur certaine.
I On cherche un compromis . . .
Y
DY = {1, 2}
Z
DZ = {1, 2, 3}
X
DX = {1, 2}
X 6= Z
Y 6= Z
X 6= Y
106 / 122
Programmation par contraintes
N
Contraintes globales
Un monde global
I AC ne déduit toujours rien . . .
I PC supprime certaines valeurs des domaines au prix d’une lenteur certaine.
I On cherche un compromis . . .
Y
DY = {1, 2}
Z
DZ = {3}
X
DX = {1, 2}
X 6= Z
Y 6= Z
X 6= Y
106 / 122
Programmation par contraintes
N
Contraintes globales
Rappel de théorie des graphes
Couplage
Étant donné, un graphe simple G = (X, U) non orienté, un couplage
est un ensemble d’arêtes K ⊆ U tel que deux arêtes quelconques de
U ne sont pas adjacentes.
Graphe biparti
Un graphe G = (X, U) est dit biparti si l’ensemble des sommets X
peut être partitionné en deux sous-ensembles X1 et X2 de telle sorte
que, pour toute arête (i, j) ∈ U : i ∈ X1 ⇒ j ∈ X2 ou i ∈ X2 ⇒ j ∈ X1.
Chaîne alternée
Une chaîne élémentaire de G dont les arêtes sont alternativement
dans K et dans U − K.
107 / 122
Programmation par contraintes
N
Contraintes globales
Couplage maximal
Transfert le long d’un chaîne alternée L
Si chaque extrémité est
I ou bien est un sommet insaturé,
I ou bien est telle que l’unique arête de K lui soit incidente.
Alors, un transfert le long L qui donne un nouveau couplage :
I échange entre les arêtes de K et celle de U − K dans L.
Chaîne alternée augmentante
Une chaîne alternée augmentante relie deux sommets insaturés de G.
Un transfert augmente la cardinalité du couplage d’une unité.
Couplage maximal
Un couplage K est maximal si et seulement si il n’existe pas de chaîne
alternée augmentante.
108 / 122
Programmation par contraintes
N
Contraintes globales
AllDifferent : filtrage
X
Z 4
W 3
Y
1
2
Principe
I Calculer un couplage maximal.
109 / 122
Programmation par contraintes
N
Contraintes globales
AllDifferent : filtrage
X
Z 4
W 3
Y
1
2
Principe
I Calculer un couplage maximal.
109 / 122
Programmation par contraintes
N
Contraintes globales
AllDifferent : filtrage
X
Z 4
W 3
Y
1
2
Principe
I Calculer un couplage maximal.
109 / 122
Programmation par contraintes
N
Contraintes globales
AllDifferent : filtrage
X
Z 4
W 3
Y
1
2
Principe
I Calculer un couplage maximal.
109 / 122
Programmation par contraintes
N
Contraintes globales
AllDifferent : filtrage
X
Z 4
W 3
Y
1
2
Principe
I Calculer un couplage maximal.
I enlever toutes les arêtes qui
n’appartiennent à aucun couplage
maximal.
109 / 122
Programmation par contraintes
N
Algorithmes de recherche
Plan
1 Recherche systématique
2 Consistances locales
3 Contraintes globales
4 Algorithmes de recherche
110 / 122
Programmation par contraintes
N
Algorithmes de recherche
Algorithme de recherche
Problème
I Les méthodes de recherche systématique sont inefficaces.
I Les techniques de propagation sont incomplètes.
Combinaison des deux
prospectif évitement des conflits, look ahead.
rétrospectif réparation des conflits, look back.
Résolution des disjonctions restantes (labeling)
standard labeling X = v ∨ X 6= v, v ∈ DX .
domain splitting X < v ∨ X ≥ v, v ∈ DX .
variable ordering X < Y ∨ X ≥ Y .
111 / 122
Programmation par contraintes
N
Algorithmes de recherche
Principe de l’algorithme de recherche
112 / 122
Programmation par contraintes
N
Algorithmes de recherche
Heuristiques de sélection
Sélection de variable : first-fail
Choisir la variable dont l’affectation a la plus grande probabilité de
provoquer un échec.
I plus petit domaine, plus contraintes, . . .
Définit la forme de l’arbre de recherche.
113 / 122
Programmation par contraintes
N
Algorithmes de recherche
Heuristiques de sélection
Sélection de variable : first-fail
Choisir la variable dont l’affectation a la plus grande probabilité de
provoquer un échec.
I plus petit domaine, plus contraintes, . . .
Définit la forme de l’arbre de recherche.
Sélection de valeur : succeed-first
Choisir la valeur qui a la plus grande probabilité d’appartenir à une
solution.
I plus petite, plus grande, . . .
I dépendant du problème
Définit l’ordre d’exploration des branches
113 / 122
Programmation par contraintes
N
Algorithmes de recherche
Heuristiques de sélection
Sélection de variable : first-fail
Choisir la variable dont l’affectation a la plus grande probabilité de
provoquer un échec.
I plus petit domaine, plus contraintes, . . .
Définit la forme de l’arbre de recherche.
Sélection de valeur : succeed-first
Choisir la valeur qui a la plus grande probabilité d’appartenir à une
solution.
I plus petite, plus grande, . . .
I dépendant du problème
Définit l’ordre d’exploration des branches
Moins d’informations au début de la recherche !
113 / 122
Programmation par contraintes
N
Algorithmes de recherche
Oracle
114 / 122
Programmation par contraintes
N
Algorithmes de recherche
Exemples d’arbre de recherche
DX = [1, 2] ∧ DY = [1, 3] ∧ DZ = [1, 4]
Y
X
Z
Z
Y
X
115 / 122
Programmation par contraintes
N
Algorithmes de recherche
Trashing
A B
A B C D
A
A B C D E F G H
A B C
1
3
4
5
6
2
A B C D E F G H
1
2
3
4
5
6
7
8
A
E
B
C
D
116 / 122
Programmation par contraintes
N
Algorithmes de recherche
Trashing
A B
A B C D
A
A B C D E F G H
A B C
A B C D E F G H
E F G
1
3
4
5
6
2
A B C D E F G H
1
2
3
4
5
6
7
8
A
E
B
C
D H
116 / 122
Programmation par contraintes
N
Algorithmes de recherche
Trashing
A B
A B C D
A
A B C D E F G H
A B C
1
3
4
5
6
2
A B C D E F G H
1
2
3
4
5
6
7
8
A
E
B
C
D
Backtrack
La reine sur la 5ème ligne n’entre pas dans le conflit.
116 / 122
Programmation par contraintes
N
Algorithmes de recherche
Algorithmes de recherche rétrospectifs
Backtrack chronologique
On revient sur l’avant-dernier choix.
A B
A B C D
A
A B C D E F G H
A B C
A B C D E F G H
E F G
1
3
4
5
6
2
A
E
B
C
D H
117 / 122
Programmation par contraintes
N
Algorithmes de recherche
Conflit Directed Backjumping (Gaschnig, 1979)
I Chaque échec sur le choix d’une valeur est expliqué par les précédents
choix qui entre en conflit.
I Si toutes les valeurs d’un domaine ont été testées sans succès. L’explication
de cette échec est l’union des explications des valeurs du domaine.
I On revient sur le choix le plus récent de cette explication.
A B
A B C D
A
1
3
4
5
6
2
A B C D E F G H
A B C D
C D E F
A
E
B
C
G
118 / 122
Programmation par contraintes
N
Algorithmes de recherche
Dynamic backtracking (Ginsberg, 1993)
I On revient sur le choix le plus récent de l’explication
I sans remettre en cause ce qui ne dépend pas de ce choix.
I Une réparation plutôt qu’un saut.
A B
A B C D
A
1
3
4
5
6
2
A B C D E F G H
A B C D
C D E F
A
E
B
C
G
D
119 / 122
Programmation par contraintes
N
Algorithmes de recherche
Backmarking (Haralick & Elliot, 1980)
I mémoriser les explications (no-goods).
I propager ces explications (SAT)
120 / 122
Programmation par contraintes
N
Algorithmes de recherche
Backmarking (Haralick & Elliot, 1980)
I mémoriser les explications (no-goods).
I propager ces explications (SAT)
Intérêts
I Explication des retraits (précieux pour la mise au point).
I Traitement des problèmes sur-contraints.
I Résolution interactive.
120 / 122
Programmation par contraintes
N
Algorithmes de recherche
Algorithmes incomplets
Une limite/curoff arrête l’exploration d’un (sous-)arbre.
I temps, backtracks, noeuds, . . .
Recherche tronquée
I restreindre la profondeur de l’arbre.
I restreindre la largeur de l’arbre.
Redémarrages
Recommencer la recherche quand aucune solution n’est trouvée avec
une limite agrandie (politique de redémarrage).
I Diversification : randomisation ou apprentissage.
I Mémoriser les conflits (backmarking).
121 / 122
Programmation par contraintes
N
Algorithmes de recherche
Limited Discrepancies Search (LDS)
I une heuristique n’est pas infaillible,
I mais si l’heuristique est adaptée, on ne doit pas trop s’en éloigner
3
4 2
5
6
7
2
3 4
limited discrepancy search Detph−bounded discrepancy search
1 1
122 / 122
Programmation par contraintes
N
Algorithmes de recherche
References I
Remerciements
Je me suis inspiré de nombreux cours glanés sur internet.
R. Debruyne, I. Gent, H. Simonis, P. Schaus, J. Hooker, . . .
Barták, R. (1999).
Constraint Programming : In Pursuit of the Holy Grail.
Theoretical Computer Science, 17(12) :555–564.
Bordeaux, L., Hamadi, Y., and Zhang, L. (2005).
Propositional satisfiability and constraint programming : A comparative survey.
ACM Comput. Surv, 38 :2006.
Galinier, P., Jaumard, B., Morales, R., and Pesant, G. (2001).
A Constraint-Based Approach to the Golomb Ruler Problem.
In Proceedings of the 3rd International Workshop on integration of AI and OR techniques.
Gent, I. P. and Smith, B. M. (2000).
Symmetry Breaking in Constraint Programming.
In Horn, W., editor, Proceedings ECAI 2000, pages 599–603. IOS Press.
123 / 124
Programmation par contraintes
N
Algorithmes de recherche
References II
Rossi, F., Beek, P. v., and Walsh, T. (2006).
Handbook of Constraint Programming (Foundations of Artificial Intelligence).
Elsevier Science Inc., New York, USA.
Smith, B. M., Stergiou, K., and Walsh, T. (1999).
Modelling the Golomb Ruler Problem.
Technical report.
124 / 124
Programmation par contraintes
N

cours-programmation par contraintepc.pdf

  • 1.
    Programmation par contraintes ArnaudMalapert 29 octobre 2015 Département d’informatique Université Nice Sophia Antipolis
  • 2.
    Plan du cours Lecture1 : Généralités Lecture 2 : L’art de la modélisation Lecture 3 : Méthodes de résolution 2 / 122 Programmation par contraintes N
  • 3.
    Lecture 1 Généralités Programmation parcontraintes 29 octobre 2015 Arnaud Malapert Département d’informatique Université Nice Sophia Antipolis
  • 4.
    Plan 1 Introduction 2 Problèmede satisfaction de contraintes 3 Solveurs de contraintes 4 / 122 Programmation par contraintes N
  • 5.
    Introduction Plan 1 Introduction 2 Problèmede satisfaction de contraintes 3 Solveurs de contraintes 5 / 122 Programmation par contraintes N
  • 6.
    Computers are incrediblyfast, accurate and stupid. Human beings are incredibly slow, inaccurate and brilliant. Together they are powerful beyond imagination. Albert Einstein. Constraint Programming represents one of the closest approaches computer science has yet made to the Holy Grail of programming : the user states the problem, the computer solves it. Eugene C. Freuder, Inaugural issue of the Constraints Journal,1997. 6 / 122 Programmation par contraintes N
  • 7.
    Introduction Programmation par contraintes(PPC) Modélisation et de résolution de problèmes combinatoires. Problème combinatoire Ensemble discret et dénombrable de solutions. Satisfiabilité trouver une solution Énumération trouver plusieurs/toutes les solutions Optimisation trouver la meilleure solution 7 / 122 Programmation par contraintes N
  • 8.
    Introduction Programmation par contraintes(PPC) Modélisation et de résolution de problèmes combinatoires. Problème combinatoire Ensemble discret et dénombrable de solutions. Satisfiabilité trouver une solution Énumération trouver plusieurs/toutes les solutions Optimisation trouver la meilleure solution Est-ce que ça vaut le coup d’oeil ? I Langage de modélisation riche. I Techniques de résolution puissantes et génériques. 7 / 122 Programmation par contraintes N
  • 9.
    Introduction Programmation par contraintes(PPC) Modélisation et de résolution de problèmes combinatoires. Problème combinatoire Ensemble discret et dénombrable de solutions. Satisfiabilité trouver une solution Énumération trouver plusieurs/toutes les solutions Optimisation trouver la meilleure solution Est-ce que ça vaut le coup d’oeil ? I Langage de modélisation riche. I Techniques de résolution puissantes et génériques. Au point de suivre un cours ? I Concevoir de meilleurs (solvables) modèles. I Meilleure exploitation de la technologie. 7 / 122 Programmation par contraintes N
  • 10.
    Introduction Du rêve àla réalité > Solveur, quelle est la solution de SEND+MORE=MONEY ? > Facile! > [9,5,6,7] + [1,0,8,5] = [1,0,6,5,2] 8 / 122 Programmation par contraintes N
  • 11.
    Introduction Du rêve àla réalité > Solveur, quelle est la solution de SEND+MORE=MONEY ? > Facile! > [9,5,6,7] + [1,0,8,5] = [1,0,6,5,2] Model model = new CPModel(); IntegerVariable S = makeIntVar("S",0,9); ... IntegerVariable Y = makeIntVar("Y",0,9); 8 / 122 Programmation par contraintes N
  • 12.
    Introduction Du rêve àla réalité > Solveur, quelle est la solution de SEND+MORE=MONEY ? > Facile! > [9,5,6,7] + [1,0,8,5] = [1,0,6,5,2] Model model = new CPModel(); IntegerVariable S = makeIntVar("S",0,9); ... IntegerVariable Y = makeIntVar("Y",0,9); model.addConstraint(neq(S,0),neq(M,0) ) ; model.addConstraint(allDifferent(S,E,N,D,M,O,R,Y)); model.addConstraint( eq( plus( scalar(new int[]{1000,100,10,1}, new IntegerVariable[]{S,E,N,D}), scalar(new int[]{1000,100,10,1}, new IntegerVariable[]{M,O,R,E})), scalar(new int[]{10000,1000,100,10,1}, new IntegerVariable[]{M,O,N,E,Y}))); 8 / 122 Programmation par contraintes N
  • 13.
    Introduction Du rêve àla réalité > Solveur, quelle est la solution de SEND+MORE=MONEY ? > Facile! > [9,5,6,7] + [1,0,8,5] = [1,0,6,5,2] Model model = new CPModel(); IntegerVariable S = makeIntVar("S",0,9); ... IntegerVariable Y = makeIntVar("Y",0,9); model.addConstraint(neq(S,0),neq(M,0) ) ; model.addConstraint(allDifferent(S,E,N,D,M,O,R,Y)); model.addConstraint( eq( plus( scalar(new int[]{1000,100,10,1}, new IntegerVariable[]{S,E,N,D}), scalar(new int[]{1000,100,10,1}, new IntegerVariable[]{M,O,R,E})), scalar(new int[]{10000,1000,100,10,1}, new IntegerVariable[]{M,O,N,E,Y}))); 8 / 122 Programmation par contraintes N
  • 14.
    Introduction Du rêve àla réalité > Solveur, quelle est la solution de SEND+MORE=MONEY ? > Facile! > [9,5,6,7] + [1,0,8,5] = [1,0,6,5,2] Model model = new CPModel(); IntegerVariable S = makeIntVar("S",0,9); ... IntegerVariable Y = makeIntVar("Y",0,9); model.addConstraint(neq(S,0),neq(M,0) ) ; model.addConstraint(allDifferent(S,E,N,D,M,O,R,Y)); model.addConstraint( eq( plus( scalar(new int[]{1000,100,10,1}, new IntegerVariable[]{S,E,N,D}), scalar(new int[]{1000,100,10,1}, new IntegerVariable[]{M,O,R,E})), scalar(new int[]{10000,1000,100,10,1}, new IntegerVariable[]{M,O,N,E,Y}))); Solver solver=new CPSolver(); solver.read(model); Propagation initiale : S=9, E in 4..7, N in 5..8, M=1, O=0, [D,R,Y] in 2..8 8 / 122 Programmation par contraintes N
  • 15.
    Introduction Du rêve àla réalité > Solveur, quelle est la solution de SEND+MORE=MONEY ? > Facile! > [9,5,6,7] + [1,0,8,5] = [1,0,6,5,2] Model model = new CPModel(); IntegerVariable S = makeIntVar("S",0,9); ... IntegerVariable Y = makeIntVar("Y",0,9); model.addConstraint(neq(S,0),neq(M,0) ) ; model.addConstraint(allDifferent(S,E,N,D,M,O,R,Y)); model.addConstraint( eq( plus( scalar(new int[]{1000,100,10,1}, new IntegerVariable[]{S,E,N,D}), scalar(new int[]{1000,100,10,1}, new IntegerVariable[]{M,O,R,E})), scalar(new int[]{10000,1000,100,10,1}, new IntegerVariable[]{M,O,N,E,Y}))); Solver solver=new CPSolver(); solver.read(model); solver.solve(); Propagation initiale : S=9, E in 4..7, N in 5..8, M=1, O=0, [D,R,Y] in 2..8 Recherche : S=9, E=5, N=6, D=7, M=1, O=0, R=8, Y=2 8 / 122 Programmation par contraintes N
  • 16.
    Introduction Programmation par contraintes ©Modèle déclaratif. I Description des propriétés et relations entre objets partiellement connus. I Gestion d’information exacte, approchée, finie, infinie, complète et incomplètes. © Raisonnement automatique basé sur les contraintes. I Propagation des nouvelles informations. I Simplification extrait les informations implicites. © Résolution efficace de problèmes combinatoires. I Combinaison aisée avec des techniques de recherche et d’optimisation. § Technologie récente et coûteuse. § Résolution de très grandes instances. § Optimisation sous contraintes. 9 / 122 Programmation par contraintes N
  • 17.
    Introduction Il était unefois . . . 1960 Réseau de contraintes en IA 1970 Programmation logique (prolog) 1980 Programmation logique concurrente 1980 Programmation par contraintes 1990 Programmation par contraintes concurrente 1990 Applications commerciales (ILOG) Aujourd’hui http://openjvm.jvmhost.net/CPSolvers/ 10 / 122 Programmation par contraintes N
  • 18.
    Introduction Influences I Mathématiques I Rechercheopérationnelle I Théorie des graphes I Algèbre I Programmation Logique I Informatique I Automate I Preuve automatique I Économie I Linguistique 11 / 122 Programmation par contraintes N
  • 19.
    Introduction Applications I Académiques I sac-à-dos, Ivoyageur de commerce, I coloriage de graphe, I Robotique, I Agents, I . . . I Industrielles I ordonnancement, I allocations de ressources I emploi du temps I design de circuit I séquençage de l’ADN, I . . . 12 / 122 Programmation par contraintes N
  • 20.
    Introduction PLNE versus PPC PLNE IMéthodologie éprouvée pour la résolution de grandes instances I Plusieurs méthodes de résolution pour chaque modèle I Méthodes tournées vers l’optimisation, approche globale PPC I Méthode de modélisation adaptée aux problèmes composites I Modèles déclaratifs et méthodes de résolutions flexibles I Méthodes tournées vers la satisfaction, approche locale 13 / 122 Programmation par contraintes N
  • 21.
    Introduction PLNE versus PPC PLNE IMéthodologie éprouvée pour la résolution de grandes instances I Plusieurs méthodes de résolution pour chaque modèle I Méthodes tournées vers l’optimisation, approche globale PPC I Méthode de modélisation adaptée aux problèmes composites I Modèles déclaratifs et méthodes de résolutions flexibles I Méthodes tournées vers la satisfaction, approche locale branch-and-bound=backtracking I Séparation itérative (branching) I Évaluation (bounding/filtering) I Inférence (cutting plane/propagation) 13 / 122 Programmation par contraintes N
  • 22.
    Introduction PLNE versus PPC PLNE ©opérations algébriques faites sur le système entier © très bonnes bornes pour accélérer la preuve de l’optimalité. © heuristiques de bonne qualité disponibles. § modélisation bas niveau (contraintes linéaires) PPC © solutions réalisables © structure du problème préservée © information sur les domaines © formulation efficace © toutes les solutions © hybridation § propagation trop locale § optimisation 14 / 122 Programmation par contraintes N
  • 23.
    Problème de satisfactionde contraintes Plan 1 Introduction 2 Problème de satisfaction de contraintes 3 Solveurs de contraintes 15 / 122 Programmation par contraintes N
  • 24.
    Problème de satisfactionde contraintes Définitions Problème de satisfaction de contraintes I un ensemble de variables {X1, . . . , Xn} I un ensemble de domaines discrets {D1, . . . , Dn} I Un ensemble de contraintes {C1, . . . , Cm} Affectation Une affectation consiste à instancier des variables. I partielle ou totale I consistante ou inconsistante A = {(X1, V1), (X3, V3), (X4, V4)} Solution Une solution est une affectation totale consistante. 16 / 122 Programmation par contraintes N
  • 25.
    5 8 • Pruning =removing values from non feasible solutions • Search = Systematic exploration of solution space CP = Pruning + Search Only two Ingredients !!!
  • 26.
    5 9 CP in OneSlide • CP = Pruning + Search Xi = V Xi != V Constraint Store Domain store Constraints repeat select a constraint c if c is infeasible wrt the domain store return infeasible else apply pruning algorithm of c until no value can be removed Fix-point Algo
  • 27.
    6 0 Fix Point Algorithm ConstraintStore X ∈ {1,3,4,5} Y ∈ {3,4} X<Y Y<4 Constraints
  • 28.
    6 1 Fix Point Algorithm ConstraintStore X ∈ {1,3,4,5} Y ∈ {3,4} X<Y Y<4 Constraints
  • 29.
    6 2 Fix Point Algorithm ConstraintStore X ∈ {1,3} Y ∈ {3,4} X<Y Y<4 Constraints
  • 30.
    6 3 Fix Point Algorithm ConstraintStore X ∈ {1,3} Y ∈ {3,4} X<Y Y<4 Constraints
  • 31.
    6 4 Fix Point Algorithm ConstraintStore X ∈ {1,3} Y ∈ {3} X<Y Y<4 Constraints
  • 32.
    6 5 Fix Point Algorithm ConstraintStore X ∈ {1,3} Y ∈ {3} X<Y Y<4 Constraints
  • 33.
    6 6 Fix Point Algorithm ConstraintStore X ∈ {1} Y ∈ {3} X<Y Y<4 Constraints
  • 34.
    6 7 Search Tree Variables: • Dom(x1)=[0..3] •Dom(x2)={2,4} • Dom(x3)={1,4} Constraints: Fix Point Dom(x1)=[0..2] Dom(x2)={2,4} Dom(x3)={4} x1+x2=x3 x1 != x2
  • 35.
  • 36.
    6 9 • dsfdsfdf Dom(x1)=[0..2] Dom(x2)={2,4} Dom(x3)={4} x1+x2=x3 x1!= x2 x2==2 Dom(x1)=[0] Dom(x2)={4} Dom(x3)={4} x2==4
  • 37.
  • 38.
    Problème de satisfactionde contraintes Domaine entier Exemple En pratique, la cardinalité du domaine est finie. D = {1, 2, 3, 5, 7, 9, 10} 30 / 122 Programmation par contraintes N
  • 39.
    Problème de satisfactionde contraintes Domaine entier Exemple En pratique, la cardinalité du domaine est finie. D = {1, 2, 3, 5, 7, 9, 10} Opérations I test d’appartenance de valeur(s) I suppression de valeur(s) I itération(s) sur des valeurs 30 / 122 Programmation par contraintes N
  • 40.
    Problème de satisfactionde contraintes Domaine entier Exemple En pratique, la cardinalité du domaine est finie. D = {1, 2, 3, 5, 7, 9, 10} Opérations I test d’appartenance de valeur(s) I suppression de valeur(s) I itération(s) sur des valeurs Représentation Énumération occupation mémoire Intervalle domaine non connexe Liste,arbre complexité des structures de données. 30 / 122 Programmation par contraintes N
  • 41.
    Problème de satisfactionde contraintes Domaine ensembliste Exemple Par bijection, on peut se restreindre à l’étude des ensembles d’entiers. D = {∅, {1, 2}, {1, 2, 3, 4}, {2, 3}, {2, 4}} Opérations Elles s’appliquent à des éléments ou à des ensembles. 31 / 122 Programmation par contraintes N
  • 42.
    Problème de satisfactionde contraintes Domaine ensembliste Exemple Par bijection, on peut se restreindre à l’étude des ensembles d’entiers. D = {∅, {1, 2}, {1, 2, 3, 4}, {2, 3}, {2, 4}} Opérations Elles s’appliquent à des éléments ou à des ensembles. Représentations Énumération occupation mémoire exponentielle I 2n sous-ensembles de [1, n] Noyau-Enveloppe perte d’information I K(D) = ∩S∈DS = ∅ I E(D) = ∪S∈DS = [1, 4] 31 / 122 Programmation par contraintes N
  • 43.
    Problème de satisfactionde contraintes Représentation des domaines Gestion des états/mondes Pendant la résolution, on maintient d’une pile d’états. I variables, domaines, contraintes. Un compromis temps/mémoire § la représentation des domaines influe considérablement sur les performances de la pile. § l’action des contraintes peut différer selon la représentation des domaines. © configuration automatique des solveurs. 32 / 122 Programmation par contraintes N
  • 44.
    Problème de satisfactionde contraintes Contraintes C’est quoi ? Une contrainte porte sur un ensemble de variables et restreint les valeurs que l’on peut affecter simultanément à ces variables I X + Y ≤ Z I A ∪ B 6= C I x2 + y2 = z2 I (ABC) forme un triangle isocèle I x, y, z, distincts deux à deux. I A, B, C forment une partition de E 33 / 122 Programmation par contraintes N
  • 45.
    Problème de satisfactionde contraintes Contraintes Déclaration Extension on énumère les n-uplets admis : I (x = 1 ∧ y = 2) ∨ (x = 0 ∧ y = 3) ∨ (x = 2) Intension formule mathématique : I x + y ≤ z Arité d’une contrainte unaire, binaire, n-aire Exemples non linéaire x2 + y3 = z2 symbolique (x = bleu) ∨ (x = vert) logique x = 3 ⇒ y < z globale allDifferent(x1, . . . , xn), . . . 34 / 122 Programmation par contraintes N
  • 46.
    Problème de satisfactionde contraintes Quelques contraintes globales table (X1, . . . , Xn) prennent leur valeurs parmi un ensemble de tuples. globalCardinality Les valeurs v1, . . . , vm apparaissent Ov1 , . . . , Ovm dans X1, . . . , Xn. allDifferent les valeurs de X1, . . . , Xn sont distinctes. element (1D/2D/3D) La valeur V est égale au I-ème élément de (X1, . . . , Xn). lex (X1, . . . , Xn) est plus petit que (Y1, . . . , Yn) selon l’ordre lexico. Pour les curieux : Global Constraint catalog 35 / 122 Programmation par contraintes N
  • 47.
    Problème de satisfactionde contraintes Résolution X DX = [1, 3] DY = [1, 3] Z DZ = [1, 3] Y 6= < x − y = 1 Réseau de contraintes I multi-graphe I hyper-graphe 36 / 122 Programmation par contraintes N
  • 48.
    Problème de satisfactionde contraintes Résolution X DX = [1, 3] Z DZ = [2, 3] Y 6= < x − y = 1 DY = [1, 2] Filtrage des contraintes I réduction des domaines I instanciation 36 / 122 Programmation par contraintes N
  • 49.
    Problème de satisfactionde contraintes Résolution Z Y 6= < x − y = 1 DY = [1, 2] X DZ = [2, 3] DX = [2, 3] Propagation de contraintes I Le point fixe est indépendant de l’ordre de propagation. I L’ordre peut influer sur la vitesse de convergence. 36 / 122 Programmation par contraintes N
  • 50.
    Problème de satisfactionde contraintes Résolution Z Y 6= x − y = 1 DY = [1, 2] X DX = [2] < DZ = [3] Séparation itérative I P ∪ {X = 2} I ou P ∪ {X 6= 2} 36 / 122 Programmation par contraintes N
  • 51.
    Problème de satisfactionde contraintes Résolution Z Y 6= x − y = 1 X DX = [2] < DZ = [3] DY = [1] Séparation itérative I P ∪ {X = 2} I ou P ∪ {X 6= 2} 36 / 122 Programmation par contraintes N
  • 52.
    Problème de satisfactionde contraintes CSPs binaires et booléens Problème de satisfaction de contraintes binaires Tout CSP peut être converti en un CSP binaire : encodage dual. I inversion du rôle des variables et des contraintes. 37 / 122 Programmation par contraintes N
  • 53.
    Problème de satisfactionde contraintes CSPs binaires et booléens Problème de satisfaction de contraintes binaires Tout CSP peut être converti en un CSP binaire : encodage dual. I inversion du rôle des variables et des contraintes. Problème de satisfaction de contraintes booléennes Tout CSP peut être converti en un CSP booléen : encodage SAT. I un booléen indique si une valeur est assignée à une variable. 37 / 122 Programmation par contraintes N
  • 54.
    Solveurs de contraintes Plan 1Introduction 2 Problème de satisfaction de contraintes 3 Solveurs de contraintes 38 / 122 Programmation par contraintes N
  • 55.
    Solveurs de contraintes Solveurde contraintes Réinventer la poudre ? Il est inutile de programmer toutes les techniques en partant de rien. 39 / 122 Programmation par contraintes N
  • 56.
    Solveurs de contraintes Solveurde contraintes Réinventer la poudre ? Il est inutile de programmer toutes les techniques en partant de rien. Solveur de contraintes Un solveur se présente généralement sous la forme d’une bibliothèque dans un langage de programmation (Prolog, C, Java, . . .). I implémentation des structures de données I variables, domaines, contraintes I cadre général de consistance I stratégies de recherche I interface flexible et évolutive I variables, domaines I contraintes, algorithmes de filtrage I heuristiques, stratégie de recherche 39 / 122 Programmation par contraintes N
  • 57.
    Solveurs de contraintes Cataloguede solveurs I SICStus (Prolog) I ECLIPSe (Prolog) I CHIP (C) I Prolog/C/C++ I ILOG (C++) I C++/Java/Python/OPL I Gecode (C++) I Mozart (Oz) I Koalog (Java) I Choco (Java) I Jacop (Java) I Comet 40 / 122 Programmation par contraintes N
  • 58.
    Solveurs de contraintes Cataloguede solveurs I SICStus (Prolog) I ECLIPSe (Prolog) I CHIP (C) I Prolog/C/C++ I ILOG (C++) I C++/Java/Python/OPL I Gecode (C++) I Mozart (Oz) I Koalog (Java) I Choco (Java) I Jacop (Java) I Comet Hybridation/Spécialisation I intégration avec packages RO I programmation mathématique I recherche locale I ordonnancement I activités I ressources, précédences I stratégies de recherche 40 / 122 Programmation par contraintes N
  • 59.
    Solveurs de contraintes Cataloguede solveurs I SICStus (Prolog) I ECLIPSe (Prolog) I CHIP (C) I Prolog/C/C++ I ILOG (C++) I C++/Java/Python/OPL I Gecode (C++) I Mozart (Oz) I Koalog (Java) I Choco (Java) I Jacop (Java) I Comet Hybridation/Spécialisation I intégration avec packages RO I programmation mathématique I recherche locale I ordonnancement I activités I ressources, précédences I stratégies de recherche Pour les curieux Catalogue of Constraint Programming Tools 40 / 122 Programmation par contraintes N
  • 60.
    Solveurs de contraintes Enrésumé Cadre générale de la PPC I La consistance locale relient les algorithmes de filtrage qui s’appliquent à chaque contrainte. I La recherche arborescente résout les disjonctions restantes. 41 / 122 Programmation par contraintes N
  • 61.
    Solveurs de contraintes Enrésumé Cadre générale de la PPC I La consistance locale relient les algorithmes de filtrage qui s’appliquent à chaque contrainte. I La recherche arborescente résout les disjonctions restantes. Résolution d’un problème I modèle déclaratif d’un problème sous la forme d’un CSP I algorithmes de filtrage encodés dans des contraintes I stratégies de recherche 41 / 122 Programmation par contraintes N
  • 62.
    Lecture 2 L’art dela modélisation Programmation par contraintes 29 octobre 2015 Arnaud Malapert Département d’informatique Université Nice Sophia Antipolis
  • 63.
    Plan 1 SEND+MORE=MONEY 2 Problèmedes dames 3 Séquence magique 4 Règles de Golomb 5 Suite de Langford 43 / 122 Programmation par contraintes N
  • 64.
    Constat Tous les problèmesne sont donnés pas sous la forme d’un CSP ! 44 / 122 Programmation par contraintes N
  • 65.
    Recette I formaliser leproblème I résoudre de petites instances « à la main » I modèle de base I déclaration des variables I déclaration des contraintes I reformulation I déclaration des variables auxiliaires I contraintes difficiles à exprimer ou peu efficace I étude des modèles 0/1, dual et combiné I étude des symétries 45 / 122 Programmation par contraintes N
  • 66.
    SEND+MORE=MONEY Plan 1 SEND+MORE=MONEY 2 Problèmedes dames 3 Séquence magique 4 Règles de Golomb 5 Suite de Langford 46 / 122 Programmation par contraintes N
  • 67.
    SEND+MORE=MONEY À vous dejouer > Solveur, quelle est la solution de SEND+MORE=MONEY ? > Facile! > [9,5,6,7] + [1,0,8,5] = [1,0,6,5,2] 47 / 122 Programmation par contraintes N
  • 68.
    SEND+MORE=MONEY SEND+MORE=MONEY D + E= 10 × r1 + Y (1) r1 + N + R = 10 × r2 + E (2) r2 + E + O = 10 × r3 + N (3) r3 + S + M = 10 × M + O (4) S, M > 0 (5) allDifferent(S, E, N, D, M, O, R, Y ) (6) r1 ∈ [0, 1] r2 ∈ [0, 1] r3 ∈ [0, 1] S ∈ [1, 9] E ∈ [0, 9] N ∈ [0, 9] D ∈ [0, 9] M ∈ [1, 9] O ∈ [0, 9] R ∈ [0, 9] Y ∈ [0, 9] 48 / 122 Programmation par contraintes N
  • 69.
    SEND+MORE=MONEY SEND+MORE=MONEY D + E= 10 × r1 + Y (1) r1 + N + R = 10 × r2 + E (2) r2 + E + O = 10 × r3 + N (3) r3 + S + M = 10 × M + O (4) S, M > 0 (5) allDifferent(S, E, N, D, M, O, R, Y ) (6) r1 ∈ [0, 1] r2 ∈ [0, 1] r3 ∈ [0, 1] S ∈ [1, 9] E ∈ [0, 9] N ∈ [0, 9] D ∈ [0, 9] M = 1 O ∈ [0, 9] R ∈ [0, 9] Y ∈ [0, 9] (4) M ≤ b(r3 + S − O) ÷ 9c ≤ 1 48 / 122 Programmation par contraintes N
  • 70.
    SEND+MORE=MONEY SEND+MORE=MONEY D + E= 10 × r1 + Y (1) r1 + N + R = 10 × r2 + E (2) r2 + E + O = 10 × r3 + N (3) r3 + S + M = 10 × M + O (4) S, M > 0 (5) allDifferent(S, E, N, D, M, O, R, Y ) (6) r1 ∈ [0, 1] r2 ∈ [0, 1] r3 ∈ [0, 1] S ∈ [8, 9] E ∈ [0, 9] N ∈ [0, 9] D ∈ [0, 9] M = 1 O ∈ [0, 1] R ∈ [0, 9] Y ∈ [0, 9] (4) M ≤ b(r3 + S − O) ÷ 9c ≤ 1 (4) O ≤ r3 + S − 9 ≤ 1 (4) S ≥ 9 + O − r3 ≥ 8 48 / 122 Programmation par contraintes N
  • 71.
    SEND+MORE=MONEY SEND+MORE=MONEY D + E= 10 × r1 + Y (1) r1 + N + R = 10 × r2 + E (2) r2 + E + O = 10 × r3 + N (3) r3 + S + M = 10 × M + O (4) S, M > 0 (5) allDifferent(S, E, N, D, M, O, R, Y ) (6) r1 ∈ [0, 1] r2 ∈ [0, 1] r3 ∈ [0, 1] S ∈ [8, 9] E ∈ [2, 9] N ∈ [2, 9] D ∈ [2, 9] M = 1 O = 0 R ∈ [2, 9] Y ∈ [2, 9] (4) M ≤ b(r3 + S − O) ÷ 9c ≤ 1 (4) O ≤ r3 + S − 9 ≤ 1 (4) S ≥ 9 + O − r3 ≥ 8 (6) O = 0 ; E, N, D, R, Y ≥ 2 48 / 122 Programmation par contraintes N
  • 72.
    SEND+MORE=MONEY SEND+MORE=MONEY D + E= 10 × r1 + Y (1) r1 + N + R = 10 × r2 + E (2) r2 + E + O = 10 × r3 + N (3) r3 + S + M = 10 × M + O (4) S, M > 0 (5) allDifferent(S, E, N, D, M, O, R, Y ) (6) r1 ∈ [0, 1] r2 ∈ [0, 1] r3 = 0 S ∈ [8, 9] E ∈ [2, 9] N ∈ [2, 9] D ∈ [2, 9] M = 1 O = 0 R ∈ [2, 9] Y ∈ [2, 9] (4) M ≤ b(r3 + S − O) ÷ 9c ≤ 1 (4) O ≤ r3 + S − 9 ≤ 1 (4) S ≥ 9 + O − r3 ≥ 8 (6) O = 0 ; E, N, D, R, Y ≥ 2 (3) r3 ≤ b(r2 + E − N) ÷ 10c ≤ 0 48 / 122 Programmation par contraintes N
  • 73.
    SEND+MORE=MONEY SEND+MORE=MONEY D + E= 10 × r1 + Y (1) r1 + N + R = 10 × r2 + E (2) r2 + E + O = 10 × r3 + N (3) r3 + S + M = 10 × M + O (4) S, M > 0 (5) allDifferent(S, E, N, D, M, O, R, Y ) (6) r1 ∈ [0, 1] r2 ∈ [0, 1] r3 = 0 S = 9 E ∈ [2, 9] N ∈ [2, 9] D ∈ [2, 9] M = 1 O = 0 R ∈ [2, 9] Y ∈ [2, 9] (4) M ≤ b(r3 + S − O) ÷ 9c ≤ 1 (4) O ≤ r3 + S − 9 ≤ 1 (4) S ≥ 9 + O − r3 ≥ 8 (6) O = 0 ; E, N, D, R, Y ≥ 2 (3) r3 ≤ b(r2 + E − N) ÷ 10c ≤ 0 (4) S = 9 48 / 122 Programmation par contraintes N
  • 74.
    SEND+MORE=MONEY SEND+MORE=MONEY D + E= 10 × r1 + Y (1) r1 + N + R = 10 × r2 + E (2) r2 + E + O = 10 × r3 + N (3) r3 + S + M = 10 × M + O (4) S, M > 0 (5) allDifferent(S, E, N, D, M, O, R, Y ) (6) r1 ∈ [0, 1] r2 ∈ [0, 1] r3 = 0 S = 9 E ∈ [2, 8] N ∈ [2, 8] D ∈ [2, 8] M = 1 O = 0 R ∈ [2, 8] Y ∈ [2, 8] (4) M ≤ b(r3 + S − O) ÷ 9c ≤ 1 (4) O ≤ r3 + S − 9 ≤ 1 (4) S ≥ 9 + O − r3 ≥ 8 (6) O = 0 ; E, N, D, R, Y ≥ 2 (3) r3 ≤ b(r2 + E − N) ÷ 10c ≤ 0 (4) S = 9 (6) E, N, D, R, Y ≤ 8 48 / 122 Programmation par contraintes N
  • 75.
    SEND+MORE=MONEY SEND+MORE=MONEY D + E= 10 × r1 + Y (1) r1 + N + R = 10 × r2 + E (2) r2 + E + O = 10 × r3 + N (3) r3 + S + M = 10 × M + O (4) S, M > 0 (5) allDifferent(S, E, N, D, M, O, R, Y ) (6) r1 ∈ [0, 1] r2 = 1 r3 = 0 S = 9 E ∈ [2, 8] N ∈ [3, 8] D ∈ [2, 8] M = 1 O = 0 R ∈ [2, 8] Y ∈ [2, 8] (4) M ≤ b(r3 + S − O) ÷ 9c ≤ 1 (4) O ≤ r3 + S − 9 ≤ 1 (4) S ≥ 9 + O − r3 ≥ 8 (6) O = 0 ; E, N, D, R, Y ≥ 2 (3) r3 ≤ b(r2 + E − N) ÷ 10c ≤ 0 (4) S = 9 (6) E, N, D, R, Y ≤ 8 (3) ET (6) r2 = 1 ∧ N ≥ 3 48 / 122 Programmation par contraintes N
  • 76.
    SEND+MORE=MONEY SEND+MORE=MONEY D + E= 10 × r1 + Y (1) r1 + N + R = 10 × r2 + E (2) r2 + E + O = 10 × r3 + N (3) r3 + S + M = 10 × M + O (4) S, M > 0 (5) allDifferent(S, E, N, D, M, O, R, Y ) (6) r1 = 1 r2 = 1 r3 = 0 S = 9 E ∈ [2, 8] N ∈ [3, 8] D ∈ [2, 8] M = 1 O = 0 R = 8 Y ∈ [2, 8] (4) M ≤ b(r3 + S − O) ÷ 9c ≤ 1 (4) O ≤ r3 + S − 9 ≤ 1 (4) S ≥ 9 + O − r3 ≥ 8 (6) O = 0 ; E, N, D, R, Y ≥ 2 (3) r3 ≤ b(r2 + E − N) ÷ 10c ≤ 0 (4) S = 9 (6) E, N, D, R, Y ≤ 8 (3) ET (6) r2 = 1 ∧ N ≥ 3 (2) R ≥ 9 − r1 ≥ 8 (2) r1 ≥ 9 − R ≥ 1 48 / 122 Programmation par contraintes N
  • 77.
    SEND+MORE=MONEY SEND+MORE=MONEY D + E= 10 × r1 + Y (1) r1 + N + R = 10 × r2 + E (2) r2 + E + O = 10 × r3 + N (3) r3 + S + M = 10 × M + O (4) S, M > 0 (5) allDifferent(S, E, N, D, M, O, R, Y ) (6) r1 = 1 r2 = 1 r3 = 0 S = 9 E ∈ [5, 7] N ∈ [3, 7] D ∈ [2, 7] M = 1 O = 0 R = 8 Y ∈ [2, 7] (4) M ≤ b(r3 + S − O) ÷ 9c ≤ 1 (4) O ≤ r3 + S − 9 ≤ 1 (4) S ≥ 9 + O − r3 ≥ 8 (6) O = 0 ; E, N, D, R, Y ≥ 2 (3) r3 ≤ b(r2 + E − N) ÷ 10c ≤ 0 (4) S = 9 (6) E, N, D, R, Y ≤ 8 (3) ET (6) r2 = 1 ∧ N ≥ 3 (2) R ≥ 9 − r1 ≥ 8 (2) r1 ≥ 9 − R ≥ 1 (6) E, N, D, Y ≤ 7 48 / 122 Programmation par contraintes N
  • 78.
    SEND+MORE=MONEY SEND+MORE=MONEY D + E= 10 × r1 + Y (1) r1 + N + R = 10 × r2 + E (2) r2 + E + O = 10 × r3 + N (3) r3 + S + M = 10 × M + O (4) S, M > 0 (5) allDifferent(S, E, N, D, M, O, R, Y ) (6) r1 = 1 r2 = 1 r3 = 0 S = 9 E ∈ [5, 7] N ∈ [3, 7] D ∈ [5, 7] M = 1 O = 0 R = 8 Y ∈ [2, 4] (4) M ≤ b(r3 + S − O) ÷ 9c ≤ 1 (4) O ≤ r3 + S − 9 ≤ 1 (4) S ≥ 9 + O − r3 ≥ 8 (6) O = 0 ; E, N, D, R, Y ≥ 2 (3) r3 ≤ b(r2 + E − N) ÷ 10c ≤ 0 (4) S = 9 (6) E, N, D, R, Y ≤ 8 (3) ET (6) r2 = 1 ∧ N ≥ 3 (2) R ≥ 9 − r1 ≥ 8 (2) r1 ≥ 9 − R ≥ 1 (6) E, N, D, Y ≤ 7 (1) (D, E) ≥ 10 + Y − (E, D) ≥ 5 (1) Y ≤ E + D − 10 ≤ 4 48 / 122 Programmation par contraintes N
  • 79.
    SEND+MORE=MONEY 9END+108E=10NEY D + E= 10 + Y (7) N = E + 1 (8) allDifferent(E, N, D, Y ) (9) E ∈ [5, 7] N ∈ [3, 7] D ∈ [5, 7] Y ∈ [2, 4] 49 / 122 Programmation par contraintes N
  • 80.
    SEND+MORE=MONEY 9END+108E=10NEY D + E= 10 + Y (7) N = E + 1 (8) allDifferent(E, N, D, Y ) (9) E ∈ [5, 6] N ∈ [6, 7] D ∈ [5, 7] Y ∈ [2, 4] (8) N ≥ E + 1 ≥ 6 (8) E ≤ N − 1 ≤ 6 49 / 122 Programmation par contraintes N
  • 81.
    SEND+MORE=MONEY 9END+108E=10NEY D + E= 10 + Y (7) N = E + 1 (8) allDifferent(E, N, D, Y ) (9) E ∈ [5, 6] N ∈ [6, 7] D ∈ [6, 7] Y ∈ [2, 3] (8) N ≥ E + 1 ≥ 6 (8) E ≤ N − 1 ≤ 6 (7) D ≥ 10 + Y − E ≥ 6 (7) Y ≤ D + E − 10 ≥ 3 49 / 122 Programmation par contraintes N
  • 82.
    SEND+MORE=MONEY 9END+108E=10NEY D + E= 10 + Y (7) N = E + 1 (8) allDifferent(E, N, D, Y ) (9) E = 5 N ∈ [6, 7] D ∈ [6, 7] Y ∈ [2, 3] (8) N ≥ E + 1 ≥ 6 (8) E ≤ N − 1 ≤ 6 (7) D ≥ 10 + Y − E ≥ 6 (7) Y ≤ D + E − 10 ≥ 3 (9) E = 5 49 / 122 Programmation par contraintes N
  • 83.
    SEND+MORE=MONEY 9END+108E=10NEY D + E= 10 + Y (7) N = E + 1 (8) allDifferent(E, N, D, Y ) (9) E = 5 N = 6 D ∈ [6, 7] Y ∈ [2, 3] (8) N ≥ E + 1 ≥ 6 (8) E ≤ N − 1 ≤ 6 (7) D ≥ 10 + Y − E ≥ 6 (7) Y ≤ D + E − 10 ≥ 3 (9) E = 5 (8) N = 6 49 / 122 Programmation par contraintes N
  • 84.
    SEND+MORE=MONEY 9END+108E=10NEY D + E= 10 + Y (7) N = E + 1 (8) allDifferent(E, N, D, Y ) (9) E = 5 N = 6 D = 7 Y ∈ [2, 3] (8) N ≥ E + 1 ≥ 6 (8) E ≤ N − 1 ≤ 6 (7) D ≥ 10 + Y − E ≥ 6 (7) Y ≤ D + E − 10 ≥ 3 (9) E = 5 (8) N = 6 (9) D = 7 49 / 122 Programmation par contraintes N
  • 85.
    SEND+MORE=MONEY 9END+108E=10NEY D + E= 10 + Y (7) N = E + 1 (8) allDifferent(E, N, D, Y ) (9) E = 5 N = 6 D = 7 Y = 2 (8) N ≥ E + 1 ≥ 6 (8) E ≤ N − 1 ≤ 6 (7) D ≥ 10 + Y − E ≥ 6 (7) Y ≤ D + E − 10 ≥ 3 (9) E = 5 (8) N = 6 (9) D = 7 (7) Y = 2 SOLUTION 49 / 122 Programmation par contraintes N
  • 86.
    Problème des dames Plan 1SEND+MORE=MONEY 2 Problème des dames 3 Séquence magique 4 Règles de Golomb 5 Suite de Langford 50 / 122 Programmation par contraintes N
  • 87.
    Problème des dames CSP,vos papiers ! Sur un échiquier de taille n × n, placer un nombre maximum de dames de telle sorte qu’aucune dame ne puisse en capturer une autre. I Une dame peut en capturer une autre si elles sont sur la même ligne, colonne, ou diagonale. 51 / 122 Programmation par contraintes N
  • 88.
    Problème des dames CSP,vos papiers ! Sur un échiquier de taille n × n, placer un nombre maximum de dames de telle sorte qu’aucune dame ne puisse en capturer une autre. I Une dame peut en capturer une autre si elles sont sur la même ligne, colonne, ou diagonale. Méthode simple Transformer le problème d’optimisation en une séquence de problèmes de satisfaction de contraintes : I 1 dame sur l’échiquier ? I 2 dames sur l’échiquier ? I . . . I n dames sur l’échiquier ? 51 / 122 Programmation par contraintes N
  • 89.
    Problème des dames CSP,vos papiers ! Sur un échiquier de taille n × n, placer un nombre maximum de dames de telle sorte qu’aucune dame ne puisse en capturer une autre. I Une dame peut en capturer une autre si elles sont sur la même ligne, colonne, ou diagonale. Méthode simple Transformer le problème d’optimisation en une séquence de problèmes de satisfaction de contraintes : I 1 dame sur l’échiquier ? I 2 dames sur l’échiquier ? I . . . I n dames sur l’échiquier ? Exercice 1 Résoudre le problème à la main pour n = 2, 3, 4, 5. 51 / 122 Programmation par contraintes N
  • 90.
    Problème des dames Algorithmeglouton (n ≥ 4) List of numbers for vertical positions (rows) of queens with horizontal position (column) simply increasing. I If the remainder from dividing N by 6 is not 2 or 3 then the list is simply all even numbers followed by all odd numbers ≤ n. I Otherwise, write separate lists of even and odd numbers. I 2,4,6,8 – 1,3,5,7 I If the remainder is 2, swap 1 and 3 in odd list and move 5 to the end. I 3,1,7,5 I If the remainder is 3, move 2 to the end of even list and 1,3 to the end of odd list. I 4,6,8,2 – 5,7,9,1,3 I Append odd list to the even list and place queens in the rows given by these numbers, from left to right. I a2, b4, c6, d8, e3, f1, g7, h5 Exemples 52 / 122 Programmation par contraintes N
  • 91.
    Problème des dames Algorithmeglouton (n ≥ 4) List of numbers for vertical positions (rows) of queens with horizontal position (column) simply increasing. I If the remainder from dividing N by 6 is not 2 or 3 then the list is simply all even numbers followed by all odd numbers ≤ n. I Otherwise, write separate lists of even and odd numbers. I 2,4,6,8 – 1,3,5,7 I If the remainder is 2, swap 1 and 3 in odd list and move 5 to the end. I 3,1,7,5 I If the remainder is 3, move 2 to the end of even list and 1,3 to the end of odd list. I 4,6,8,2 – 5,7,9,1,3 I Append odd list to the even list and place queens in the rows given by these numbers, from left to right. I a2, b4, c6, d8, e3, f1, g7, h5 Exemples 14 dames (reste 2) : 2, 4, 6, 8, 10, 12, 14, 3, 1, 7, 9, 11, 13, 5. 52 / 122 Programmation par contraintes N
  • 92.
    Problème des dames Algorithmeglouton (n ≥ 4) List of numbers for vertical positions (rows) of queens with horizontal position (column) simply increasing. I If the remainder from dividing N by 6 is not 2 or 3 then the list is simply all even numbers followed by all odd numbers ≤ n. I Otherwise, write separate lists of even and odd numbers. I 2,4,6,8 – 1,3,5,7 I If the remainder is 2, swap 1 and 3 in odd list and move 5 to the end. I 3,1,7,5 I If the remainder is 3, move 2 to the end of even list and 1,3 to the end of odd list. I 4,6,8,2 – 5,7,9,1,3 I Append odd list to the even list and place queens in the rows given by these numbers, from left to right. I a2, b4, c6, d8, e3, f1, g7, h5 Exemples 14 dames (reste 2) : 2, 4, 6, 8, 10, 12, 14, 3, 1, 7, 9, 11, 13, 5. 15 dames (reste 3) : 4, 6, 8, 10, 12, 14, 2, 5, 7, 9, 11, 13, 15, 1, 3. 52 / 122 Programmation par contraintes N
  • 93.
    Problème des dames Problèmedes n dames (n queens problem) Sur un échiquier de taille n × n, placer n dames de telle sorte qu’aucune dame ne puisse en capturer une autre. 53 / 122 Programmation par contraintes N
  • 94.
    Problème des dames Modèlebooléen I La variable qij ∈ [0, 1] indique si une reine est présente sur la case (i, j). 54 / 122 Programmation par contraintes N
  • 95.
    Problème des dames Modèlelignes/colonnes I La variable li ∈ [1, n] indique la ligne de la dame i. I La variable ci ∈ [1, n] indique la colonne de la dame i. ci 6= cj 1 ≤ i < j ≤ n li 6= lj 1 ≤ i < j ≤ n li + (cj − ci ) 6= lj 1 ≤ i 6= j ≤ n ci + (li − lj ) 6= cj 1 ≤ i 6= j ≤ n 55 / 122 Programmation par contraintes N
  • 96.
    Problème des dames Modèlelignes (binaire) I la dame i se trouve sur la ligne i I La variable ci ∈ [1, n] représente la colonne de la dame i. ci 6= cj 1 ≤ i < j ≤ n ci 6= cj + (j − i) 1 ≤ i < j ≤ n ci 6= cj − (j − i) 1 ≤ i < j ≤ n 56 / 122 Programmation par contraintes N
  • 97.
    Problème des dames Modèlelignes (global) I la dame i se trouve sur la ligne i I La variable ci ∈ [1, n] représente la colonne de la dame i. I Les variables auxiliaires mi et pi représentent les projections de la dame i sur la colonne 0 selon les diagonales. I Des contraintes globales remplacent les cliques d’inégalités binaires. allDifferent(c1, . . . , cn) mi = ci − i 1 ≤ i ≤ n allDifferent(m1, . . . , mn) pi = ci + i 1 ≤ i ≤ n allDifferent(p1, . . . , pn) 57 / 122 Programmation par contraintes N
  • 98.
    Problème des dames Dualité Exercice2 Proposer un modèle dual. Exercice 3 Proposer un modèle combiné, i.e. le modèles primal et le dual. 58 / 122 Programmation par contraintes N
  • 99.
    Problème des dames Dualité Exercice2 Proposer un modèle dual. Solution I Inversion du rôle des lignes et des colonnes. I la dame j se trouve sur la colonne j I La variable lj ∈ [1, n] représente la ligne de la dame j. Exercice 3 Proposer un modèle combiné, i.e. le modèles primal et le dual. 58 / 122 Programmation par contraintes N
  • 100.
    Problème des dames Dualité Exercice2 Proposer un modèle dual. Solution I Inversion du rôle des lignes et des colonnes. I la dame j se trouve sur la colonne j I La variable lj ∈ [1, n] représente la ligne de la dame j. Exercice 3 Proposer un modèle combiné, i.e. le modèles primal et le dual. Solution lj = i ⇔ ci = j 1 ≤ i ≤ n 58 / 122 Programmation par contraintes N
  • 101.
    Problème des dames Symétries Unesolution unique ou fondamentale a au plus 8 variantes (incluant elle-même) : I rotation d’un angle de 90, 180, ou 270 degrés et ensuite I réflexion en miroir selon un axe fixe. # - - - - - - - - # - # - - - # - - - - - - # - - - # - - - - - - # - - - - # - - - - - # - - - # - # - - - - - # - - - - # - - - # - - - - - - # - - - - - - # - - - # - - - # - - - - - - # - - # - - - - - # - - - # - - - - - - # - - # - - - # - - - # - - - - - - # - - - - - - # - - - - # - - - # - # - - - - - # - - - - - # - - - # - - - - - - # - - - - # - # - - - - - - - - # - # - - - # - - - - 59 / 122 Programmation par contraintes N
  • 102.
    Problème des dames Dénombrement Invariantpar rotation de 90 degrés 2 : Identité ; miroir. 2x + 8x = 10 - # - - - # - - - - - - - - # - - # - - - - # - - - - - - # # - - - - - # - - - - - - # - - - - # - 60 / 122 Programmation par contraintes N
  • 103.
    Problème des dames Dénombrement Invariantpar rotation de 90 degrés 2 : Identité ; miroir. Invariant par rotation de 180 degrés 4 : identité ; réflexion ; rotation 90 degrés ; réflexion de la rotation 2x + 8x = 10 - # - - - # - - - - - - - - # - - # - - - - # - - - - - - # # - - - - - # - - - - - - # - - - - # - 60 / 122 Programmation par contraintes N
  • 104.
    Problème des dames Dénombrement Invariantpar rotation de 90 degrés 2 : Identité ; miroir. Invariant par rotation de 180 degrés 4 : identité ; réflexion ; rotation 90 degrés ; réflexion de la rotation Invariant par miroir Impossible, sinon deux reines seraient placées en face l’une de l’autre. 2x + 8x = 10 - # - - - # - - - - - - - - # - - # - - - - # - - - - - - # # - - - - - # - - - - - - # - - - - # - 60 / 122 Programmation par contraintes N
  • 105.
    Problème des dames Éliminationdes symétries Rotation de 180 degrés ∧k−1 j=1 (cj = n + 1 − cn+1−j ) ⇒ ck ≤ n + 1 − cn+1−k 1 ≤ k ≤ b n 2 c 8 dames c1 = n + 1 − c8 ∧ c2 ≤ n + 1 − c7 - - # -|- - - - - - # -|- - - - - - - -|# - - - - - - -|- - # - - - - -|- - - # - # - -|- - - - - - - #|- - - - - - - -|- - - # # - - -|- - - - - - - -|# - - - - - - -|- - # - # - - -|- - - - - # - -|- - - - - - - #|- - - - - - - -|- # - - - - - -|- # - - 61 / 122 Programmation par contraintes N
  • 106.
    Problème des dames Éliminationdes symétries Exercice 4 (Rotation de 90 degrés) 1 Proposer des contraintes pour le modèle primal. 2 Proposer des contraintes pour le modèle combiné. Solution ∧k−1 j=1 (cj = p ∧ cp = n + 1 − j) ⇒ ck ≤ n + 1 − k 1 ≤ k ≤ n − 1 - - # -|- - - - - - - #|- - - - - - - -|# - - - - # - -|- - - - - - - -|- - - # - - - -|- - - # - - - #|- - - - - - - -|# - - - # - - -|- - - - - - - -|- - # - - - - -|- - # - # - - -|- - - - - # - -|- - - - - - # -|- - - - - - - -|- # - - - - - -|- # - - 62 / 122 Programmation par contraintes N
  • 107.
    Séquence magique Plan 1 SEND+MORE=MONEY 2Problème des dames 3 Séquence magique 4 Règles de Golomb 5 Suite de Langford 63 / 122 Programmation par contraintes N
  • 108.
    Séquence magique Énoncé duproblème Une séquence magique de longueur n est I une séquence d’entiers x0, . . . , xn−1 compris entre 0 et n − 1 telle que I le nombre i (i = 0, . . . , n − 1) apparaisse exactement xi fois dans la séquence. Séquence magique (n = 10) i 0 1 2 3 4 5 6 7 8 9 xi 6 2 1 0 0 0 1 0 0 0 I 0 apparaît six fois, I 1 apparaît deux fois, I 2 apparaît une fois, I 6 apparaît une fois 64 / 122 Programmation par contraintes N
  • 109.
    Séquence magique Énoncé duproblème Une séquence magique de longueur n est I une séquence d’entiers x0, . . . , xn−1 compris entre 0 et n − 1 telle que I le nombre i (i = 0, . . . , n − 1) apparaisse exactement xi fois dans la séquence. Séquence magique (n = 10) i 0 1 2 3 4 5 6 7 8 9 xi 6 2 1 0 0 0 1 0 0 0 I 0 apparaît six fois, I 1 apparaît deux fois, I 2 apparaît une fois, I 6 apparaît une fois Exercice 5 Résoudre le problème à la main pour n = 1, 2, 3, 4, 5. 64 / 122 Programmation par contraintes N
  • 110.
    Séquence magique Modèle debase xi (i = 0, . . . , n − 1) est égale au nombre d’occurrences de la valeur i dans le tableau [x0, . . . , xn−1]. xi = |{j | 0 ≤ j ≤ n − 1 ∧ xj = i}| 0 ≤ i ≤ n − 1 65 / 122 Programmation par contraintes N
  • 111.
    Séquence magique Modèle debase xi (i = 0, . . . , n − 1) est égale au nombre d’occurrences de la valeur i dans le tableau [x0, . . . , xn−1]. xi = |{j | 0 ≤ j ≤ n − 1 ∧ xj = i}| 0 ≤ i ≤ n − 1 Rappel : globalCardinality Les valeurs v1, . . . , vm apparaissent Ov1 , . . . , Ovm dans X1, . . . , Xn. 65 / 122 Programmation par contraintes N
  • 112.
    Séquence magique Contrainte redondante Iune contrainte redondante est impliquée par une ou plusieurs autres. I Elle n’est pas nécessaire, mais on espère qu’elle va aider à la résolution. 66 / 122 Programmation par contraintes N
  • 113.
    Séquence magique Contrainte redondantesur la somme La somme des occurrences des valeurs dans la séquence est égale au nombre d’éléments de la séquence : n−1 X i=0 xi = n. n = 10 6 + 2 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 = 10 67 / 122 Programmation par contraintes N
  • 114.
    Séquence magique Contrainte redondantesur la somme des produits La somme des produits des valeurs et de leurs occurrences est égale au nombre d’éléments de la séquence : n−1 X i=0 i × xi = n. n = 10 6 |{z} 0,0,0,0,0,0 , 2 |{z} 1,1 , 1 |{z} 2 , 0, 0, 0, 1 |{z} 6 , 0, 0, 0 68 / 122 Programmation par contraintes N
  • 115.
    Séquence magique Propagation decontraintes (n = 10) 69 / 122 Programmation par contraintes N
  • 116.
    Séquence magique Propagation decontraintes (n = 10) D(x0) = [0, 9] D(x1) = [0, 9] D(x2) = [0, 5] D(x3) = [0, 3] D(x4) = [0, 2] D(x5) = [0, 2] D(x6) = [0, 1] D(x7) = [0, 1] D(x8) = [0, 1] D(x9) = [0, 1] 69 / 122 Programmation par contraintes N
  • 117.
    Séquence magique Propagation decontraintes (n = 10) D(x0) = [0, 9] D(x1) = [0, 9] D(x2) = [0, 5] D(x3) = [0, 3] D(x4) = [0, 2] D(x5) = [0, 2] D(x6) = [0, 1] D(x7) = [0, 1] D(x8) = [0, 1] D(x9) = [0, 1] Shaving ou SAC Pour chaque variable x ∈ X et chaque valeur v ∈ D(x) : I propager la décision x = v. I Si une contradiction est détectée, alors x 6= v. Recommencer jusqu’au point fixe. 69 / 122 Programmation par contraintes N
  • 118.
    Séquence magique Propagation decontraintes (n = 10) D(x0) = [0, 9] D(x1) = [0, 9] D(x2) = [0, 5] D(x3) = [0, 3] D(x4) = [0, 2] D(x5) = [0, 2] D(x6) = [0, 1] D(x7) = [0, 1] D(x8) = [0, 1] D(x9) = [0, 1] Shaving ou SAC Pour chaque variable x ∈ X et chaque valeur v ∈ D(x) : I propager la décision x = v. I Si une contradiction est détectée, alors x 6= v. Recommencer jusqu’au point fixe. Performance Search 8 nœuds et 8 backtracks. Shaving 13 affectations. 69 / 122 Programmation par contraintes N
  • 119.
    Séquence magique Le motde la fin Pour n > 6, le motif suivant représente l’unique ( ?) séquence magique : n − 4, 2, 1, . . . , 1, 0, 0, 0. 70 / 122 Programmation par contraintes N
  • 120.
    Règles de Golomb Plan 1SEND+MORE=MONEY 2 Problème des dames 3 Séquence magique 4 Règles de Golomb 5 Suite de Langford 71 / 122 Programmation par contraintes N
  • 121.
    Règles de Golomb Règlede Golomb Une règle de Golomb R(n, l) est : I un ensemble de n entiers {a1, . . . , an} I de longueur l = maxi,j∈[1,n](ai − aj ) et tel que I les différences ai − aj (i, j ∈ [1, n]) soient distinctes. Une règle est optimale si elle est de longueur minimale. Plus grande règle optimale : R(26, 492) 0 1 33 83 104 110 124 163 185 200 203 249 251 258 314 318 343 356 386 430 440 456 464 475 487 492 Applications radioastronomie, cristallographie 72 / 122 Programmation par contraintes N
  • 122.
    Règles de Golomb Règlede Golomb Une règle de Golomb R(n, l) est : I un ensemble de n entiers {a1, . . . , an} I de longueur l = maxi,j∈[1,n](ai − aj ) et tel que I les différences ai − aj (i, j ∈ [1, n]) soient distinctes. Une règle est optimale si elle est de longueur minimale. Plus grande règle optimale : R(26, 492) 0 1 33 83 104 110 124 163 185 200 203 249 251 258 314 318 343 356 386 430 440 456 464 475 487 492 Applications radioastronomie, cristallographie Exercice 6 Résoudre le problème à la main pour n = 1, 2, 3, 4, 5. 72 / 122 Programmation par contraintes N
  • 123.
    Règles de Golomb Algorithmeglouton : R(n, 2n−1 − 1) Règle exponentielle ai = 2i − 1 i ≥ 0 0, 1, 3, 7, 15, 31, 63, . . . Preuve formelle décomposition en facteurs premiers. intuitive décomposition binaire. ai − aj = 2i − 2j = 2j (2i−j − 1) = (1 . . . 1 | {z } i−j 0 . . . 0 | {z } j )2 73 / 122 Programmation par contraintes N
  • 124.
    Règles de Golomb Éliminationdes symétries 74 / 122 Programmation par contraintes N
  • 125.
    Règles de Golomb Éliminationdes symétries Monotonie a1 < a2 < . . . < an Translation a1 = 0 Réflexion : a0 i = an − an−i La première différence est plus petite que la dernière : a2 − a1 < an − an−1. 1 4 9 11 2 0 7 10 11 0 74 / 122 Programmation par contraintes N
  • 126.
    Règles de Golomb Éliminationdes symétries Monotonie a1 < a2 < . . . < an Translation a1 = 0 Réflexion : a0 i = an − an−i La première différence est plus petite que la dernière : a2 − a1 < an − an−1. 1 4 9 11 2 0 7 10 11 0 Exercice 7 Prouver que deux marques ne peuvent pas être à la même position. 74 / 122 Programmation par contraintes N
  • 127.
    Règles de Golomb Modèlede base ai ∈ [0, l] la position de la i-ème marque (i = 1, . . . , n) de la règle. dij ∈ [1, l] la différence entre les positions des marques i et j (1 ≤ i < j ≤ n). dij = aj − ai 1 ≤ i < j ≤ n allDifferent([dij ]1≤i<j≤n) 75 / 122 Programmation par contraintes N
  • 128.
    Règles de Golomb Modèlede base ai ∈ [0, l] la position de la i-ème marque (i = 1, . . . , n) de la règle. dij ∈ [1, l] la différence entre les positions des marques i et j (1 ≤ i < j ≤ n). dij = aj − ai 1 ≤ i < j ≤ n allDifferent([dij ]1≤i<j≤n) Exercice 8 Proposer des contraintes redondantes. 75 / 122 Programmation par contraintes N
  • 129.
    Règles de Golomb Modèlede base ai ∈ [0, l] la position de la i-ème marque (i = 1, . . . , n) de la règle. dij ∈ [1, l] la différence entre les positions des marques i et j (1 ≤ i < j ≤ n). dij = aj − ai 1 ≤ i < j ≤ n allDifferent([dij ]1≤i<j≤n) Exercice 8 Proposer des contraintes redondantes. Solution I Triplet de différences : dij = dik + dkj 1 ≤ i < k < j ≤ n I Différences consécutives : dij = Pj−1 k=i dk(k+1) 1 ≤ i < j ≤ n 75 / 122 Programmation par contraintes N
  • 130.
    Règles de Golomb Bornesinférieures Quelles propriétés doit vérifier la partie de la règle comprise entre les marques ai et aj ? 1 i j n La sous-règle comprise entre les marques xi et xj est aussi une règle de Golomb (pas forcément optimale) avec j − i + 1 marques. 76 / 122 Programmation par contraintes N
  • 131.
    Règles de Golomb Bornesinférieures Quelles propriétés doit vérifier la partie de la règle comprise entre les marques ai et aj ? 1 i j n La sous-règle comprise entre les marques xi et xj est aussi une règle de Golomb (pas forcément optimale) avec j − i + 1 marques. I Sa longueur est supérieure à la somme des j − i plus petits entiers. dij = aj − ai = j−1 X k=i dk(k+1) ≥ j−i X k=1 k 76 / 122 Programmation par contraintes N
  • 132.
    Règles de Golomb Bornesinférieures Quelles propriétés doit vérifier la partie de la règle comprise entre les marques ai et aj ? 1 i j n La sous-règle comprise entre les marques xi et xj est aussi une règle de Golomb (pas forcément optimale) avec j − i + 1 marques. I Sa longueur est supérieure à la somme des j − i plus petits entiers. dij = aj − ai = j−1 X k=i dk(k+1) ≥ j−i X k=1 k I Soit Lm la longueur optimale de la règle de Golomb d’ordre m < n. dij ≥ Lj−i+1 76 / 122 Programmation par contraintes N
  • 133.
    Règles de Golomb Bornesupérieure Quelle propriété doit vérifier le complémentaire de la sous-règle comprise entre les marques xi et xj ? 1 i j n 77 / 122 Programmation par contraintes N
  • 134.
    Règles de Golomb Bornesupérieure Quelle propriété doit vérifier le complémentaire de la sous-règle comprise entre les marques xi et xj ? 1 i j n I Les différences consécutives du complémentaire sont distinctes. dij = d1n − d1i − djn = xn − i X k=1 dk(k+1) − n X k=j dk(k+1) dij ≥ xn − m−1−j+i X k=1 k I Le complémentaire ne vérifie pas nécessairement la propriété de Golomb. 77 / 122 Programmation par contraintes N
  • 135.
    Suite de Langford Plan 1SEND+MORE=MONEY 2 Problème des dames 3 Séquence magique 4 Règles de Golomb 5 Suite de Langford 78 / 122 Programmation par contraintes N
  • 136.
    Suite de Langford Pourcommencer Exercice 9 Trouver une séquence de huit nombres telle que : I Chaque nombre i (i = 1, . . . , 4) apparaît exactement deux fois ; I deux occurrences du nombre i sont à une distance i Indice : commencez avec [1, 3]. 2 2 1 4 3 3 4 1 Figure: Empilez correctement les cubes. Solutions uniques de L(2,3) et L(2,4) 79 / 122 Programmation par contraintes N
  • 137.
    Suite de Langford Pourcommencer Exercice 9 Trouver une séquence de huit nombres telle que : I Chaque nombre i (i = 1, . . . , 4) apparaît exactement deux fois ; I deux occurrences du nombre i sont à une distance i Indice : commencez avec [1, 3]. 3 2 4 2 1 3 1 4 3 2 1 2 1 3 Figure: Empilez correctement les cubes. Solutions uniques de L(2,3) et L(2,4) 79 / 122 Programmation par contraintes N
  • 138.
    Suite de Langford Énoncédu problème Une suite de Langford L(k, n) est : I une séquence k × n nombres telle que I chacune des k occurrences successives de i ∈ [1, n] I soient séparées par une distance i. Figure: 2 solutions de L(2, 96) issues de Langford’s Problem Graphics Gallery. Les traits bleus représentent les couples de nombres pairs et les traits rouges/jaunes représentent les couples de nombres impairs. 80 / 122 Programmation par contraintes N
  • 139.
    Suite de Langford Modèleprimal xij ∈ [1, k × n] est la position dans la séquence de la j-ème occurrence du nombre i allDifferent([xij ]j∈[1,k],i∈[1,n]) xij+1 = xij + i + 1 81 / 122 Programmation par contraintes N
  • 140.
    Suite de Langford Éliminationdes symétries Exercice 10 1 Est-ce que le problème a des symétries ? 2 Proposer une méthode d’élimination des symétries pour L(3, 9). 82 / 122 Programmation par contraintes N
  • 141.
    Suite de Langford Éliminationdes symétries Exercice 10 1 Est-ce que le problème a des symétries ? 2 Proposer une méthode d’élimination des symétries pour L(3, 9). Solution (Réflexion) Non trivial : X92 < 14 ∨ (X92 = 14 ∧ X82 < 14). I La 2ème occurrence de 9 est dans la première moitié. I ou la 2ème occurrence de 9 est exactement au milieu et la 2ème occurrence de 8 est dans la première moitié), 82 / 122 Programmation par contraintes N
  • 142.
    Suite de Langford Modèlesduals Permutation ! yp représente le p-ème nombre de la séquence. 83 / 122 Programmation par contraintes N
  • 143.
    Suite de Langford Modèlesduals Permutation ! yp représente le p-ème nombre de la séquence. Modèle dual 1 yp = j × n + i si la j-ème occurrence de i occupe la position p. allDifferent(y1, . . . , yk×n) yp = v ⇒ yp+(v mod n)+1 = v + n 83 / 122 Programmation par contraintes N
  • 144.
    Suite de Langford Modèlesduals Permutation ! yp représente le p-ème nombre de la séquence. Modèle dual 1 yp = j × n + i si la j-ème occurrence de i occupe la position p. allDifferent(y1, . . . , yk×n) yp = v ⇒ yp+(v mod n)+1 = v + n Modèle dual 2 yp = i si une occurrence du nombre i occupe la position p. globalCardinality([y1, . . . , yk×n], [1, . . . , n], [k, . . . , k]) yp = i ⇒ yp+i+1 = i 83 / 122 Programmation par contraintes N
  • 145.
    Suite de Langford Modèlescombinés Contraintes de liaison Unicité de la solution du modèle primal et le modèle dual. 84 / 122 Programmation par contraintes N
  • 146.
    Suite de Langford Modèlescombinés Contraintes de liaison Unicité de la solution du modèle primal et le modèle dual. Modèle Combiné 1 xij = p ⇔ yp = j × n + i Modèle Combiné 2 xij = p ⇔ yp = i 84 / 122 Programmation par contraintes N
  • 147.
    Lecture 3 Méthodes derésolution Programmation par contraintes 29 octobre 2015 Arnaud Malapert Département d’informatique Université Nice Sophia Antipolis
  • 148.
    Plan 1 Recherche systématique 2Consistances locales 3 Contraintes globales 4 Algorithmes de recherche 86 / 122 Programmation par contraintes N
  • 149.
    Recherche systématique Plan 1 Recherchesystématique 2 Consistances locales 3 Contraintes globales 4 Algorithmes de recherche 87 / 122 Programmation par contraintes N
  • 150.
    Recherche systématique Résolution d’unCSP Complexité I Prouver la consistance d’un CSP (satisfiabilité) est NP-complet. I Exhiber une solution d’un CSP est NP-difficile dans le cas général. I Solution admissible ou optimale. 88 / 122 Programmation par contraintes N
  • 151.
    Recherche systématique Résolution d’unCSP Complexité I Prouver la consistance d’un CSP (satisfiabilité) est NP-complet. I Exhiber une solution d’un CSP est NP-difficile dans le cas général. I Solution admissible ou optimale. Recherche systématique Generate-and-Test vérification du viol d’une contrainte après instanciation de toutes les variables du problème. Test-and-Generate (backtrack) vérification du viol d’une contrainte après instanciation de toutes les variables inhérentes à la contrainte. 88 / 122 Programmation par contraintes N
  • 152.
    Recherche systématique Résolution d’unCSP Complexité I Prouver la consistance d’un CSP (satisfiabilité) est NP-complet. I Exhiber une solution d’un CSP est NP-difficile dans le cas général. I Solution admissible ou optimale. Recherche systématique Generate-and-Test vérification du viol d’une contrainte après instanciation de toutes les variables du problème. Test-and-Generate (backtrack) vérification du viol d’une contrainte après instanciation de toutes les variables inhérentes à la contrainte. Exercice 11 Appliquer Test-and-Generate sur le problème des 3 dames. 88 / 122 Programmation par contraintes N
  • 153.
    Recherche systématique Backtrack surles 4 dames 89 / 122 Programmation par contraintes N
  • 154.
    Recherche systématique En bref Generate-and-Test §Toutes les affectations sont considérées © Les contraintes sont testées uniquement à chaque affectation totale. Test-and-Generate © Moins d’affectations sont considérées. § Les contraintes sont testées à chaque affectation partielle. 90 / 122 Programmation par contraintes N
  • 155.
    Recherche systématique En bref Generate-and-Test §Toutes les affectations sont considérées © Les contraintes sont testées uniquement à chaque affectation totale. Test-and-Generate © Moins d’affectations sont considérées. § Les contraintes sont testées à chaque affectation partielle. © Facile à mettre en œuvre. § Complexité exponentielle. § Échecs tardifs et découverte redondante d’inconsistance locale. § Perte d’informations triviales sur l’inconsistance d’affectation partielle. 90 / 122 Programmation par contraintes N
  • 156.
    Consistances locales Plan 1 Recherchesystématique 2 Consistances locales 3 Contraintes globales 4 Algorithmes de recherche 91 / 122 Programmation par contraintes N
  • 157.
    Consistances locales Principes Les contraintessont utilisées activement pour supprimer les inconsistances. I Une fonction revise() est associée à chaque contrainte. I Différents niveaux de consistance possibles pour une même contrainte. Calcul un point fixe global par des techniques de consistance locale. I En général, les algorithmes de consistance sont incomplets. 92 / 122 Programmation par contraintes N
  • 158.
    Consistances locales Exemple :x < y revise() xmax ← ymax − 1 (10) ymin ← xmin + 1 (11) 93 / 122 Programmation par contraintes N
  • 159.
    Consistances locales Exemple :x < y revise() xmax ← ymax − 1 (10) ymin ← xmin + 1 (11) Exemple Dx = {1, 2, 3} ∧ Dy {1, 2, 3} (10) ⇒ Dx = {1, 2} (11) ⇒ DY = {2, 3} (10), (11) ⇒ ∅(point fixe) 93 / 122 Programmation par contraintes N
  • 160.
    Consistances locales Exemple (BC): x = y + c revise() xmin ← ymin + c (12) xmax ← ymax + c (13) ymin ← xmin − c (14) ymax ← xmax − c (15) 94 / 122 Programmation par contraintes N
  • 161.
    Consistances locales Exemple (BC): x = y + c revise() xmin ← ymin + c (12) xmax ← ymax + c (13) ymin ← xmin − c (14) ymax ← xmax − c (15) Exemple : x = y + 6 Dx = [1, 20] ∧ Dy = [1, 18] (12) ⇒ Dx = [7, 20] (15) ⇒ DY = [1, 14] (12), (13), (14), (15) ⇒ point fixe 94 / 122 Programmation par contraintes N
  • 162.
    Consistances locales Exemple (AC): x = y + c revise() ∃y ∈ Dy , (y + c) / ∈ Dx ⇒ y / ∈ Dy (16) ∃x ∈ Dx , (x − c) / ∈ Dy ⇒ x / ∈ Dx (17) Exercice 12 Proposer un algorithme effectuant l’AC. 95 / 122 Programmation par contraintes N
  • 163.
    Consistances locales Consistance denœud Un CSP est dit consistant de nœud si pour toute variable X et pour toute valeur v ∈ DX , l’affectation partielle (X, v) satisfait toutes les contraintes unaires. 96 / 122 Programmation par contraintes N
  • 164.
    Consistances locales Consistance denœud Un CSP est dit consistant de nœud si pour toute variable X et pour toute valeur v ∈ DX , l’affectation partielle (X, v) satisfait toutes les contraintes unaires. pas de propagation 96 / 122 Programmation par contraintes N
  • 165.
    Consistances locales Arc-consistance I Unecontrainte est dite arc-consistante si pour chaque valeur de chaque variable, il existe une affectation des autres variables telle que la contrainte soit satisfaite I La valeur est dans le support de la contrainte. I Un CSP est arc-consistant si toutes ses contraintes sont arc-consistantes. I Effectuer la révision de chaque contrainte une fois n’est pas suffisant. AC-1 Répéter la révision de toutes les contraintes jusqu’à ce qu’aucun do- maine n’ait changé. 97 / 122 Programmation par contraintes N
  • 166.
    Consistances locales Arc-consistance :modèle binaire des 4 dames 98 / 122 Programmation par contraintes N
  • 167.
    Consistances locales Arc-consistance :modèle binaire des 4 dames 98 / 122 Programmation par contraintes N
  • 168.
    Consistances locales Arc-consistance :modèle binaire des 4 dames 98 / 122 Programmation par contraintes N
  • 169.
    Consistances locales Arc-consistance :modèle binaire des 4 dames 98 / 122 Programmation par contraintes N
  • 170.
    Consistances locales Arc-consistance :modèle binaire des 4 dames 98 / 122 Programmation par contraintes N
  • 171.
    Consistances locales Arc-consistance :modèle binaire des 4 dames 98 / 122 Programmation par contraintes N
  • 172.
    Consistances locales Autres algorithmesd’AC AC-3 I Utiliser une queue de contraintes qui doivent être révisées I Quand le domaine d’une variable a changé, seules les contraintes portant sur cette variable sont ajoutées à la queue 99 / 122 Programmation par contraintes N
  • 173.
    Consistances locales Autres algorithmesd’AC AC-3 I Utiliser une queue de contraintes qui doivent être révisées I Quand le domaine d’une variable a changé, seules les contraintes portant sur cette variable sont ajoutées à la queue En pratique, AC-3 -> AC-8 I Utiliser une queue de variables dont le domaine a changé. I On filtre le réveil d’une contrainte en fonction d’évènements I réduction, suppression, instanciation, . . . 99 / 122 Programmation par contraintes N
  • 174.
    Consistances locales Consistance debornes un CSP est dit A-consistant de bornes pour une consistance donnée A si et seulement si pour chaque valeur xmin et xmax sont A-consistant. I Variables avec de grands domaines. I Algorithme de filtrage ne créant pas de trous. 100 / 122 Programmation par contraintes N
  • 175.
    Consistances locales AC estincomplète AC ne détecte pas les inconsistances dues à un ensemble de contraintes. Y DY = {1, 2} Z DZ = {1, 2} X DX = {1, 2} X 6= Z Y 6= Z X 6= Y 101 / 122 Programmation par contraintes N
  • 176.
    Consistances locales Consistance dechemin Les variables (X0, X1, . . . , Xm) sont consistantes de chemin si et seulement si pour chaque pair x ∈ D0, y ∈ Dm satisfaisant toutes les contraintes binaires entre X0 et Xm, il existe une affectation des variables X1, . . . , Xm−1 telle que toutes les contraintes binaires Xi , Xi+1 sont satisfaites. I uniquement les contraintes binaires entre voisins I l’exploration des chemins de longueur 2 est suffisante (Montanary, 1974) 102 / 122 Programmation par contraintes N
  • 177.
    Consistances locales Consistance desingleton un CSP est dit singleton A-consistant pour une consistance donnée A si et seulement si pour chaque valeur x ∈ DX le problème P|X=v| est A-consistant. I On supprime des valeurs uniquement I Facile à mettre en œuvre (meta-programmation). I Lenteur d’exécution. 103 / 122 Programmation par contraintes N
  • 178.
    Contraintes globales Plan 1 Recherchesystématique 2 Consistances locales 3 Contraintes globales 4 Algorithmes de recherche 104 / 122 Programmation par contraintes N
  • 179.
    Contraintes globales Un mondeglobal Les contraintes agissent sur de petits ensembles de variables. © contraintes hétérogènes ⇒ aide à la modélisation. § pas de vue globale ⇒ réduction des domaines affaiblie. 105 / 122 Programmation par contraintes N
  • 180.
    Contraintes globales Un mondeglobal Les contraintes agissent sur de petits ensembles de variables. © contraintes hétérogènes ⇒ aide à la modélisation. § pas de vue globale ⇒ réduction des domaines affaiblie. Contrainte globale I Raisonnement sur un sous-problème ou I utilisation d’information sémantique I pour diminuer le temps de calcul ou I augmenter l’efficacité du filtrage 105 / 122 Programmation par contraintes N
  • 181.
    Contraintes globales Un mondeglobal I AC ne déduit toujours rien . . . I PC supprime certaines valeurs des domaines au prix d’une lenteur certaine. I On cherche un compromis . . . Y DY = {1, 2} Z DZ = {1, 2, 3} X DX = {1, 2} X 6= Z Y 6= Z X 6= Y 106 / 122 Programmation par contraintes N
  • 182.
    Contraintes globales Un mondeglobal I AC ne déduit toujours rien . . . I PC supprime certaines valeurs des domaines au prix d’une lenteur certaine. I On cherche un compromis . . . Y DY = {1, 2} Z DZ = {1, 2, 3} X DX = {1, 2} X 6= Z Y 6= Z X 6= Y 106 / 122 Programmation par contraintes N
  • 183.
    Contraintes globales Un mondeglobal I AC ne déduit toujours rien . . . I PC supprime certaines valeurs des domaines au prix d’une lenteur certaine. I On cherche un compromis . . . Y DY = {1, 2} Z DZ = {1, 2, 3} X DX = {1, 2} X 6= Z Y 6= Z X 6= Y 106 / 122 Programmation par contraintes N
  • 184.
    Contraintes globales Un mondeglobal I AC ne déduit toujours rien . . . I PC supprime certaines valeurs des domaines au prix d’une lenteur certaine. I On cherche un compromis . . . Y DY = {1, 2} Z DZ = {3} X DX = {1, 2} X 6= Z Y 6= Z X 6= Y 106 / 122 Programmation par contraintes N
  • 185.
    Contraintes globales Rappel dethéorie des graphes Couplage Étant donné, un graphe simple G = (X, U) non orienté, un couplage est un ensemble d’arêtes K ⊆ U tel que deux arêtes quelconques de U ne sont pas adjacentes. Graphe biparti Un graphe G = (X, U) est dit biparti si l’ensemble des sommets X peut être partitionné en deux sous-ensembles X1 et X2 de telle sorte que, pour toute arête (i, j) ∈ U : i ∈ X1 ⇒ j ∈ X2 ou i ∈ X2 ⇒ j ∈ X1. Chaîne alternée Une chaîne élémentaire de G dont les arêtes sont alternativement dans K et dans U − K. 107 / 122 Programmation par contraintes N
  • 186.
    Contraintes globales Couplage maximal Transfertle long d’un chaîne alternée L Si chaque extrémité est I ou bien est un sommet insaturé, I ou bien est telle que l’unique arête de K lui soit incidente. Alors, un transfert le long L qui donne un nouveau couplage : I échange entre les arêtes de K et celle de U − K dans L. Chaîne alternée augmentante Une chaîne alternée augmentante relie deux sommets insaturés de G. Un transfert augmente la cardinalité du couplage d’une unité. Couplage maximal Un couplage K est maximal si et seulement si il n’existe pas de chaîne alternée augmentante. 108 / 122 Programmation par contraintes N
  • 187.
    Contraintes globales AllDifferent :filtrage X Z 4 W 3 Y 1 2 Principe I Calculer un couplage maximal. 109 / 122 Programmation par contraintes N
  • 188.
    Contraintes globales AllDifferent :filtrage X Z 4 W 3 Y 1 2 Principe I Calculer un couplage maximal. 109 / 122 Programmation par contraintes N
  • 189.
    Contraintes globales AllDifferent :filtrage X Z 4 W 3 Y 1 2 Principe I Calculer un couplage maximal. 109 / 122 Programmation par contraintes N
  • 190.
    Contraintes globales AllDifferent :filtrage X Z 4 W 3 Y 1 2 Principe I Calculer un couplage maximal. 109 / 122 Programmation par contraintes N
  • 191.
    Contraintes globales AllDifferent :filtrage X Z 4 W 3 Y 1 2 Principe I Calculer un couplage maximal. I enlever toutes les arêtes qui n’appartiennent à aucun couplage maximal. 109 / 122 Programmation par contraintes N
  • 192.
    Algorithmes de recherche Plan 1Recherche systématique 2 Consistances locales 3 Contraintes globales 4 Algorithmes de recherche 110 / 122 Programmation par contraintes N
  • 193.
    Algorithmes de recherche Algorithmede recherche Problème I Les méthodes de recherche systématique sont inefficaces. I Les techniques de propagation sont incomplètes. Combinaison des deux prospectif évitement des conflits, look ahead. rétrospectif réparation des conflits, look back. Résolution des disjonctions restantes (labeling) standard labeling X = v ∨ X 6= v, v ∈ DX . domain splitting X < v ∨ X ≥ v, v ∈ DX . variable ordering X < Y ∨ X ≥ Y . 111 / 122 Programmation par contraintes N
  • 194.
    Algorithmes de recherche Principede l’algorithme de recherche 112 / 122 Programmation par contraintes N
  • 195.
    Algorithmes de recherche Heuristiquesde sélection Sélection de variable : first-fail Choisir la variable dont l’affectation a la plus grande probabilité de provoquer un échec. I plus petit domaine, plus contraintes, . . . Définit la forme de l’arbre de recherche. 113 / 122 Programmation par contraintes N
  • 196.
    Algorithmes de recherche Heuristiquesde sélection Sélection de variable : first-fail Choisir la variable dont l’affectation a la plus grande probabilité de provoquer un échec. I plus petit domaine, plus contraintes, . . . Définit la forme de l’arbre de recherche. Sélection de valeur : succeed-first Choisir la valeur qui a la plus grande probabilité d’appartenir à une solution. I plus petite, plus grande, . . . I dépendant du problème Définit l’ordre d’exploration des branches 113 / 122 Programmation par contraintes N
  • 197.
    Algorithmes de recherche Heuristiquesde sélection Sélection de variable : first-fail Choisir la variable dont l’affectation a la plus grande probabilité de provoquer un échec. I plus petit domaine, plus contraintes, . . . Définit la forme de l’arbre de recherche. Sélection de valeur : succeed-first Choisir la valeur qui a la plus grande probabilité d’appartenir à une solution. I plus petite, plus grande, . . . I dépendant du problème Définit l’ordre d’exploration des branches Moins d’informations au début de la recherche ! 113 / 122 Programmation par contraintes N
  • 198.
    Algorithmes de recherche Oracle 114/ 122 Programmation par contraintes N
  • 199.
    Algorithmes de recherche Exemplesd’arbre de recherche DX = [1, 2] ∧ DY = [1, 3] ∧ DZ = [1, 4] Y X Z Z Y X 115 / 122 Programmation par contraintes N
  • 200.
    Algorithmes de recherche Trashing AB A B C D A A B C D E F G H A B C 1 3 4 5 6 2 A B C D E F G H 1 2 3 4 5 6 7 8 A E B C D 116 / 122 Programmation par contraintes N
  • 201.
    Algorithmes de recherche Trashing AB A B C D A A B C D E F G H A B C A B C D E F G H E F G 1 3 4 5 6 2 A B C D E F G H 1 2 3 4 5 6 7 8 A E B C D H 116 / 122 Programmation par contraintes N
  • 202.
    Algorithmes de recherche Trashing AB A B C D A A B C D E F G H A B C 1 3 4 5 6 2 A B C D E F G H 1 2 3 4 5 6 7 8 A E B C D Backtrack La reine sur la 5ème ligne n’entre pas dans le conflit. 116 / 122 Programmation par contraintes N
  • 203.
    Algorithmes de recherche Algorithmesde recherche rétrospectifs Backtrack chronologique On revient sur l’avant-dernier choix. A B A B C D A A B C D E F G H A B C A B C D E F G H E F G 1 3 4 5 6 2 A E B C D H 117 / 122 Programmation par contraintes N
  • 204.
    Algorithmes de recherche ConflitDirected Backjumping (Gaschnig, 1979) I Chaque échec sur le choix d’une valeur est expliqué par les précédents choix qui entre en conflit. I Si toutes les valeurs d’un domaine ont été testées sans succès. L’explication de cette échec est l’union des explications des valeurs du domaine. I On revient sur le choix le plus récent de cette explication. A B A B C D A 1 3 4 5 6 2 A B C D E F G H A B C D C D E F A E B C G 118 / 122 Programmation par contraintes N
  • 205.
    Algorithmes de recherche Dynamicbacktracking (Ginsberg, 1993) I On revient sur le choix le plus récent de l’explication I sans remettre en cause ce qui ne dépend pas de ce choix. I Une réparation plutôt qu’un saut. A B A B C D A 1 3 4 5 6 2 A B C D E F G H A B C D C D E F A E B C G D 119 / 122 Programmation par contraintes N
  • 206.
    Algorithmes de recherche Backmarking(Haralick & Elliot, 1980) I mémoriser les explications (no-goods). I propager ces explications (SAT) 120 / 122 Programmation par contraintes N
  • 207.
    Algorithmes de recherche Backmarking(Haralick & Elliot, 1980) I mémoriser les explications (no-goods). I propager ces explications (SAT) Intérêts I Explication des retraits (précieux pour la mise au point). I Traitement des problèmes sur-contraints. I Résolution interactive. 120 / 122 Programmation par contraintes N
  • 208.
    Algorithmes de recherche Algorithmesincomplets Une limite/curoff arrête l’exploration d’un (sous-)arbre. I temps, backtracks, noeuds, . . . Recherche tronquée I restreindre la profondeur de l’arbre. I restreindre la largeur de l’arbre. Redémarrages Recommencer la recherche quand aucune solution n’est trouvée avec une limite agrandie (politique de redémarrage). I Diversification : randomisation ou apprentissage. I Mémoriser les conflits (backmarking). 121 / 122 Programmation par contraintes N
  • 209.
    Algorithmes de recherche LimitedDiscrepancies Search (LDS) I une heuristique n’est pas infaillible, I mais si l’heuristique est adaptée, on ne doit pas trop s’en éloigner 3 4 2 5 6 7 2 3 4 limited discrepancy search Detph−bounded discrepancy search 1 1 122 / 122 Programmation par contraintes N
  • 210.
    Algorithmes de recherche ReferencesI Remerciements Je me suis inspiré de nombreux cours glanés sur internet. R. Debruyne, I. Gent, H. Simonis, P. Schaus, J. Hooker, . . . Barták, R. (1999). Constraint Programming : In Pursuit of the Holy Grail. Theoretical Computer Science, 17(12) :555–564. Bordeaux, L., Hamadi, Y., and Zhang, L. (2005). Propositional satisfiability and constraint programming : A comparative survey. ACM Comput. Surv, 38 :2006. Galinier, P., Jaumard, B., Morales, R., and Pesant, G. (2001). A Constraint-Based Approach to the Golomb Ruler Problem. In Proceedings of the 3rd International Workshop on integration of AI and OR techniques. Gent, I. P. and Smith, B. M. (2000). Symmetry Breaking in Constraint Programming. In Horn, W., editor, Proceedings ECAI 2000, pages 599–603. IOS Press. 123 / 124 Programmation par contraintes N
  • 211.
    Algorithmes de recherche ReferencesII Rossi, F., Beek, P. v., and Walsh, T. (2006). Handbook of Constraint Programming (Foundations of Artificial Intelligence). Elsevier Science Inc., New York, USA. Smith, B. M., Stergiou, K., and Walsh, T. (1999). Modelling the Golomb Ruler Problem. Technical report. 124 / 124 Programmation par contraintes N