66
Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1 PPC - V. Gabrel

Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

Embed Size (px)

Citation preview

Page 1: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 1

Programmation par contraintes

Virginie gabrelMaster ID apprentissage

2010-2011

Page 2: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 2

Plan

Exemple introductif : SudokuPartie 1 : Définition d’un CSPPartie 2 : Résolution d’un CSPPartie 3 : La PPC avec OPL

Page 3: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 3

Exemple introductif : sudoku

7 5 3

2 5 7

6 1 9

9

4 3 2

7 6 4 2

4 6

4 2

7 5 1

Page 4: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 4

Exemple introductif : sudoku

7 5 3

2 5 7

6 1 9

9

4 3 2

7 6 4 2

4 6

4 2

7 5 1 ?1 2 3 4 5 6 7 8 9 ?

Page 5: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 5

Exemple introductif : suduko

7 5 3

2 5 7

6 1 9

9

4 3 2

7 6 4 2

4 6

4 2

7 5 1 ?

Réduction de domaine par propagation des contraintes Case : 1 2Ligne : 5 7Colonne : 2 7 =>1 2 3 4 5 6 7 8 9

Page 6: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 6

Exemple introductif : sudoku

7 5 3

2 5 7

6 1 9

9

4 3 2

7 6 4 2

4 6

4 2

7 5 1 4

Réduction du domaine3 4 6 8 9Seule position possible pour le 4=> Réduire les domaines des autres cellules

Page 7: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 7

Sudoku et PPC • Cellule = variable qui doit prendre une

valeur dans le domaine : 1..9• Existence de contraintes restreignant les

domaines des variables• Raisonnement par élimination de valeurs et

réduction du domaine• Raisonnement local propagé sur les

domaines admissibles des autres variables

PRINCIPES AU CŒUR DE LA PPC

Page 8: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 8

Sudoku : Modèle• Variables et domaines :x[i,j] 1..9 pour i et j allant de 1 à 9

• Contraintes :Pour i allant de 1 à 9

// valeurs différentes en ligneallDifferent(x[i,j] : j de 1 à 9 ) // valeurs différentes en colonneallDifferent(x[j,i] : j de 1 à 9);

Pour i allant de 0 à 2Pour j allant de 0 à 2

// valeurs différentes dans les cases 3x3allDifferent(x[3*i+k,3*j+q] : k et q de 1 à 3);

Page 9: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 9

Sudoku avec OPL/********************************************* * OPL 6.3 Model * Author: utilisateur * Creation Date: 11 mai 2010 at 20:49:52 *********************************************/using CP;

int taille=9; dvar int x[1..taille,1..taille] in 1..taille;

subject to {forall(i in 1..taille) {

allDifferent(all(j in 1..taille) x[i,j]);allDifferent(all(j in 1..taille) x[j,i]);

}forall(i in 0..2)

forall(j in 0..2)allDifferent(all(k in 1..3, q in 1..3) x[3*i+k,3*j+q]);

x[1,1]==7;x[2,2]==2;x[2,3]==5;x[3,2]==6;x[3,3]==1;x[3,4]==9;x[1,6]==5;x[1,8]==3;x[2,9]==7;

x[5,1]==4;x[6,2]==7;x[5,4]==3;x[5,5]==2;x[6,6]==6;x[4,7]==9;x[6,8]==4;x[6,9]==2;x[7,2]==4;x[7,3]==6;x[9,3]==7;x[8,5]==4;x[9,5]==5;x[8,7]==2;x[9,7]==1;}

Page 10: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 10

Solution

// solutionx = [[7 9 4 2 6 5 8 3 1] [3 2 5 4 1 8 6 9 7] [8 6 1 9 3 7 4 2 5] [6 8 2 5 7 4 9 1 3] [4 5 9 3 2 1 7 6 8] [1 7 3 8 9 6 5 4 2] [5 4 6 1 8 2 3 7 9] [9 1 8 7 4 3 2 5 6] [2 3 7 6 5 9 1 8 4]];

Page 11: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 11

Spécificités de la programmation par contraintes

• Combine des techniques de raisonnement/déduction avec du calcul.

• Méthodologie utilisée :– Modéliser le problème en termes de variables, de

domaines et de contraintes (spécifiant les combinaisons admissibles de valeurs aux variables)

– Choisir un langage pour exprimer les contraintes – Appliquer une méthode de résolution :

énumération et réduction de l’espace de recherche

Page 12: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 12

Partie 1 : Définition d’un CSP

1 – Le problème des reines2 – Qu'est-ce qu'une contrainte ?3 – Qu'est ce qu'un CSP: Constraint

Satisfaction Problem ?4 –Un deuxième exemple : Intégration

de nouveaux employés dans une entreprise

Page 13: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 13

Exemple : le problème des n reines

Problème : placer n reines sur un échiquier nxn de façon à ce qu’elles ne puissent pas s’attaquer.

1 2 3 4

1

2

3

4

Solution partielle

1 2 3 4

1

2

3

4

Solution complète

Page 14: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 14

Modélisation sous la forme d’un CSP

Variables : X = (x1,…,xn, y1, …, yn)

Associer à chaque reine i deux variables xi et yi correspondant respectivement à la ligne et la colonne sur laquelle placer la reine.

Domaines : D=(Dx1, …, Dxn, Dy1,…, Dyn) avec Dxi = Dyi = 1..n pour tout i

Contraintes : C=(clig,ccol,cdm,cdd)• Les reines doivent être sur des lignes différentes.

clig = {xi≠xj pour tout i=1..n et j=1..n avec i≠j} clig = allDifferent({xi}) • Les reines doivent être sur des colonnes différentes.

ccol = {yi≠yj pour tout i=1..n et j=1..n avec i≠j} ccol = allDifferent({yi}) • Les reines doivent être sur des diagonales montantes différentes.

cdm = {xi+yi≠xj+yj pour tout i allant de 1 à n, pour tout j allant de 1 à n}• Les reines doivent être sur des diagonales descendantes différentes.

Cdd = {xi-yi≠xj-yj pour tout i allant de 1 à n, pour tout j allant de 1 à n}

Une solution du problème des 4 reines, pour cette première modélisation, est A = {(x1,1), (y1,2), (x2,2), (y2,4), (x3,3), (y3,1), (x4,4), (y4,3)}

Page 15: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 15

Qu'est-ce qu'une contrainte ?

• Une contrainte est une relation logique (une propriété qui doit être vérifiée) entre différentes inconnues, appelées variables, chacune prenant ses valeurs dans un ensemble donné, appelé domaine.

• Une contrainte restreint les valeurs que peuvent prendre simultanément les variables. Par exemple, la contrainte "x + 3*y = 12" restreint les valeurs que l'on peut affecter simultanément aux variables x et y.

Page 16: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 16

Qu'est-ce qu'une contrainte ?

Une contrainte peut être définie en extension

On énumére les tuples de valeurs satisfaisant la contrainte . Exemple : si les domaines des variables x1 et x2 sont {0,1,2} alors on peut définir la contrainte x1 < x2 en extension par "(x1,x2) élément-de {(0,1),(0,2),(1,2)}"

Variable : xj et son domaine de définition Dj

Contrainte : c(i) est définie par un couple (v(i),r(i)) où :• v(i)=(x1,…,xk) : liste de k variables • r(i) : une liste de k-uplets admissibles, sous-ensemble du

produit cartésien D1X…XDk

↔ ensemble des combinaisons de valeurs admissibles

Page 17: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 17

Qu'est-ce qu'une contrainte ?

Une contrainte peut être définie en intension

• n variables : X=(x1,…,xn)• n domaines (finis) : i=1,..,n, xiDi• m contraintes : C=(c(1),…,c(m))• c(i) = (v(i), r(i)) où v(i) une liste de k

variables et r(i) une relation.

Page 18: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 18

Arité d’une contrainte

C’est le nombre de variables sur lesquelles elle porte =|v(i)|.

Si k=1 : contrainte unaire Si k=2 : contrainte binaire : x1 ≠ x2Si k=3 : contrainte ternaire : x1x2x3 Si k=n : contrainte n-aire :

allDifferent(v(i)) = contraint toutes les variables appartenant à v(i) à prendre des valeurs différentes.

Page 19: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 19

Différents types de contraintes

Fonction des domaines de valeurs des variables :

• numériques portent sur des variables à valeurs numériques = une égalité (=) , une différence (≠) ou une inégalité (<, ≤, >, ≥) entre 2 expressions arithmétiques. On distingue : les contraintes numériques sur les réels, les contraintes numériques sur les entiers, les contraintes numériques linéaires, les contraintes numériques non linéaires , …

• booléennes portent sur des variables à valeur booléenne (vrai ou faux) : une contrainte booléenne est une implication (=>), une équivalence (<=>) ou une non équivalence (<≠>) entre 2 expressions logiques.

Page 20: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 20

Qu'est ce qu'un CSP ?Un pb de Satisfaction de Contraintes (CSP) est un problème P modélisé sous la forme d'un ensemble de contraintes posées sur des variables, chacune de ces variables prenant ses valeurs dans un domaine.

CSP est définie par un triplet (X,D,C) oùX=(x1,…,xn)D=(D1,…,Dn) avec i=1,..,n, xiDiC=(c(1),…,c(m))avec c(i) = (v(i), r(i)) où c(i) est une relation entre les variables de v(i), restreignant les valeurs que peuvent prendre simultanément ces variables.

CSP binaire : Ne contient que des contraintes binaires Exemple : soit le CSP (X,D,C) suivant :

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

Page 21: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 21

Qu'est ce qu'un CSP ?Une solution du CSP (X,D,C) : affectation des valeurs aux variables de

telle sorte que toutes les contraintes soient satisfaites. A = { (x1,v1), (x2,v2), ..., (xn,vn) } = l'affectation qui instancie la variable

xk par la valeur vk, k=1..n. Affectation totale : toutes les variables du problème sont instanciéesAffectation partielle : seule une partie des variables est instanciées. Xk

(inclus dans X) est le domaine de l’affectation

Une affectation A viole une contrainte c(k) si toutes les variables de v(k) sont instanciées dans A, et si la relation définie par r(k) n'est pas vérifiée pour les valeurs des variables de v(k) définies dans A.

Une affectation (totale ou partielle) est consistante si elle ne viole aucune contrainte, et inconsistante si elle viole une ou plusieurs contraintes.

Une solution est une affectation totale consistante, c'est-à-dire une instanciation de toutes les variables du problème qui ne viole aucune contrainte

Page 22: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 22

Différents problèmes de CSPSP = ensemble de solutions du CSP P

P est consistant ssi SP ≠ .Þ Prouver qu’un CSP est consistantÞ Exhiber une solution qui maximise un ou plusieurs

critèresÞ Calculer ou estimer le nombre de solutions d’un

CSP• Si SP = .

=>Trouver l'affectation totale qui viole le moins de contraintes possibles = max-CSP ou min-VCSP lorsque chaque contrainte a un poids (= une valeur proportionnelle à l'importance de la contrainte, et on cherche l'affectation totale qui minimise la somme des poids des contraintes violées).

Page 23: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

23

Autre modélisation du pb des n reines

n variables X = {x1,…,xn} : xi = position de la reine i sur la colonne i.

Domaines : D(xi) = {1,…,n} pour tout i allant de 1 à n Contraintes : • les reines doivent être sur des lignes différentes

Clig = {xi ≠ xj / pour i allant de 1 à n, pour j allant de 1 à n et i ≠ j}

• les reines doivent être sur des diagonales montantes différentes Cdm = {xi+i ≠ xj+j / pour tout i allant de 1 à n, pour tout j allant de 1 à n et i ≠ j}

• les reines doivent être sur des diagonales descendantes différentes Cdd = {xi-i ≠ xj-j / pour tout i allant de 1 à n, pour tout j allant de 1 à n et i ≠ j}

Solution du problème des 4 reines : A = {(x1,2), (x2,4), (x3,1), (x4,3)}.

PPC - V. Gabrel

Page 24: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 24

Deuxième exemplePour l’accueil de 30 nouveaux employés, on souhaite constituer 10 équipes de 6 personnes avec 30 employés. Chaque équipe doit être constituée de 6 personnes : 3 nouveaux + 3 employés. Chacun des employés est affecté à un service indicé de A à F et chaque équipe doit être contenir au plus 4 employés du même service. Les employés des services A et B ne peuvent être dans la même équipe ; même contrainte pour les employés des services E et F.

Données :• Les employés sont indicés de 0 à 59 : les nouveaux employés ont

un numéro pair alors que les autres ont un numéro impair.• Les affectations aux services sont :

• L’employé 5 doit être dans la même équipe que l’employé 41.• L’employé 15 doit être soit avec l’employé 40 soit avec l’employé

51.• Soit l’employé 20 est avec 24, soit l’employé 22 est avec 50.

service A B C D E F

intervalle

0-19

20-39

40-44

45-49

50-54

55-59

Page 25: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 25

Modèlisation sous la forme d’un CSP

Variables : xi = numéro d’équipe affecté à l’employé i, i=0..59Domaines : Di = {1,..,6} pour tout IContraintes :• Pour tout j allant de 1 à 6

– count(pour i allant de 0 à 59 avec i%2=0 : xi= j)=3– count(pour i allant de 0 à 59 avec i%2=1 : xi= j)=3– count(pour i allant de 0 à 19, xi=j)<=4– count(pour i allant de 20 à 39, xi=j)<=4– count(pour i allant de 40 à 44, xi=j)<=4– count(pour i allant de 45 à 49, xi=j)<=4– count(pour i allant de 50 à 54, xi=j)<=4– count(pour i allant de 55 à 59, xi=j)<=4

•Pour tout j allant de A à F…

•x5=x41•(x15=x40)(x15=x51)

Page 26: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 26

Exemple d’applications industrielles

• Allocation de ressources (tournées de véhicules)

• Emploi du temps• Planification de production• Ordonnancement• Vérification et diagnostic• …

Page 27: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - Virginie Gabrel 27

Partie 2 : Résolution d’un CSP

1. Procédure d’exploration Engendrer et tester2. Procédure Retour Arrière Simple3. La consistance locale4. Filtrage a priori5. Filtrage en cours de résolution6. Heuristiques

On ne limite à des CSP à variables entières !!

Page 28: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - Virginie Gabrel 28

1. Procédure Engendrer et tester

Obj : Enumérer l’ensemble des affectations complètes jusqu’à en trouver une qui soit consistante

Page 29: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - Virginie Gabrel 29

Procédure Engendrer et tester

Procédure EngTest(A,X,D,C)Si A est totale alors

si A est consistante alors retourner vrai sinon faux fsiSinon

choisir xj non instanciée

pour tout v dans Dj faire

si EngTest(A(xj,v),X,D,C) alors retourner vrai

fin pourretourner faux

Fsi

Appel : EngTest(,X,D,C)

Page 30: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - Virginie Gabrel 30

Procédure Engendrer et tester

• On ne teste que la consistance des affectations totales

• Pas de détection d’inconsistance sur les affectations partielles

• Le nb de solutions explorées peut être très grand = |D1|x…x|Dn|

Si |Dj|=2 => 2n solutions. Dès que n>15 => impossible à résoudre

=> TRES MAUVAISE PROCEDURE

Page 31: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - Virginie Gabrel 31

Pistes d’amélioration

• Ne développer que les affectations partielles consistantes => Procédure RetourArrièreSimple

• Réduire les tailles des domaines des variables en enlevant les valeurs inconsistantes

Page 32: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - Virginie Gabrel 32

2. Procédure Retour Arrière Simple

Procédure RAS(A,X,D,C)Si A est totale alors retourner A fsiSinon

choisir xj non instanciée

pour tout v dans Dj faire

si A(xj,v) est consistante alors RAS(A (xj,v),X,D,C)

fin pourFsi

Appel : RAS(,X,D,C)

Page 33: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - Virginie Gabrel 33

Procédure Retour Arrière Simple

• Permet d’éliminer des solutions partielles par paquet !

• Pistes d’amélioration : s’apercevoir plus tôt qu’un sous-arbre ne contient pas de solutions.

Page 34: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 34

3. La consistance locale

Obj : Supprimer des valeurs des variables qui ne mènent à aucune solution valeurs inconsistantes avec une ou plusieurs contraintes

Exemple: Dx={1,2,3}, Dy={2,3,4}, x>=YSi x=1, pas de valeur dans Dy pour vérifier

la contrainteÞ Suppression de 1 dans Dx

Page 35: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 35

Nœud-consistance

• S’applique aux contraintes unaires

Définition : Un CSP est nœud-consistant si xX, c(i)C telle que |v(i)|=1, vDx,(x,v) vérifie r(i).

Page 36: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - Virginie Gabrel 36

Arc-consistance• S’applique sur les contraintes binaires

Définition : Un CSP est arc-consistant ssi c(i)C telle que |v(i)|=2 avec v(i)={x,y}– vDx, v’Dy: {(x,v),(y,v’)} vérifie r(i)– vDy, v’Dx: {(x,v’),(y,v)} vérifie r(i)

Remarque : algo polynomiaux pour rendre arc-consistant un CSP.

Page 37: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 37

Hyper-arc-consistance

• S’applique sur des contraintes d’arité qqconque

Définition : Soit une contrainte c(i) d’arité k, c(i) est hyper-arc-consistant si xv(i) et vDx, une affectation A des variables de v(i)\{x} telle que A(x,v) vérifie r(i)

Un CSP est hyper-arc-consistant ssi toute ses contraintes sont hyper-arc-consistantes.

Page 38: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 38

Hyper-arc-consistance

Un CSP est hyper-arc-consistante si chaque valeur v de n’importe quel domaine de variable peut participer à une affectation totale consistante.

Pour une contrainte binaire : hyper-arc-consistance = arc-consistance

Page 39: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - Virginie Gabrel 39

4-Filtrage a priori

Comment rendre un CSP arc-consistant ?

Par le Filtrage.

Page 40: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - Virginie Gabrel 40

Procédure Filtrage a prioriProcédure FAP1(X,D,C)L<- {(xi,xj), (xj,xi) avec ij liées par une contrainte binaire}Répéter

modification <- fauxpour tout (xi,xj) dans L

modification <- REVISE (xi,xj)modificationfin pour

Tant que modification= vrai

Procédure REVISE(xi,xj)modification <- fauxpour tout v dans Di faire

S’il n’existe pas v’Dj tel que {(xi,v), (xj,v’)} est consistance alorsDi <- Di\{v} modification <- vrai

fin siFin pourRetourner modification

Page 41: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - Virginie Gabrel 41

Procédure Filtrage a prioriLimite de FAP1 : A chaque réduction de domaine on

parcours de nouveau L = > TRES LONG

Procédure FAP2(X,D,C)L<- {(xi,xj), (xj,xi) avec ij liées par une contrainte}Tant que L

choisir et supprimer de L un couple (xi,xj)si REVISE(xi,xj) alors

L <- L{(xk,xi): contrainte liant xk et xi}fin si

Fin tant que

Si à l’issue de FAP1 ou FAP2, il existe un domaine vide CSP inconsistant

Page 42: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 42

Exercice 1Peut-on rendre le CSP suivant arc-consistant ?Appliquer FAP1 puis FAP2

Variables : x,y,zDomaines :

Dx={0,1,2}Dy={0,1,2}Dz={0,1,2,3,4}

Contraintes(x,y){(0,1),(1,0),(2,2)}(x,z){(0,2),(0,3),(1,1),(2,1)}(y,z){(0,2),(1,4)}

Page 43: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 43

Exercice 2 : Planification de tâches

On doit planifier 6 tâches dans un délai de 6 heures

Graphe potentiel-tâcheChaque tâche ne peut commencer qu’en début d’heure. La tâche T1 ne peut pas être planifiée à la même heure que la tâches T4.1. Modéliser ce problème comme un CSP2. Rendre ce CSP arc-consistant.

T1

T3

T2

T4

T5

T6

1

1 1 2

2

Page 44: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 44

Limites du filtrage a priori

• Procédure longue et pas nécessairement efficace

Exemple: • X=(x1,…,xn)• Di={1,…,n} pour tout i allant de 1 à n• C=(X, all-diff(x1,…,xn))Þ le filtrage a priori n’enlève aucune valeur.

Amélioration : utiliser le filtrage en cours d’énumération

Page 45: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 45

5-Filtrage en cours de résolution

A chaque instanciation : anticiper les conséquences de l’affectation partielle sur les domaines des variables restant à instancier

Filtrer les domaines des variables non affectées en enlevant les valeurs inconsistantes

Différents filtrages possibles

Page 46: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 46

Différents filtrages étant donné une affectation partielle A

• Pour chaque variable xi non affectée, enlever de Di toute valeur v telle que l’affectation A{(xi,v)} ne soit pas consistante ( on anticipe d’une étape dans l’énumération)

FILTRAGE PAR CONSISTANCE DE NŒUD

Page 47: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - Virginie Gabrel 47

Procédure Forward CheckingProcédure FC(A,V,D,C)Si V= alors A est une affectation totale consistanteSinon

choisir xk dans V pour tout v dans Dksi check-forward(xk,v,V\{xk},D,C) alorsFC(A(xk,v),V\{xk},D,C)fin sifin pour

Fin si

Procédure check-forward(xk,v,V,D,C)pour tout xj V

pour chaque v’ Dj si {(xk,v),(xj,v’)} inconsistant alors Dj <- Dj\{v’} fin pour

Si Dj= alors retourner fauxfin pourRetourner vrai

Appel : FC(,X,D,C)

Page 48: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 48

Différents filtrages étant donné une affectation partielle A

• Pour chaque variable xi non affectée, enlever de Di toute valeur v telle qu’il existe une variable xj non affectée pour laquelle, pour toute valeur w de Dj, l’affectation A{(xi,v),(xj,w)} ne soit pas consistante ( on anticipe de deux étapes)

FILTRAGE PAR CONSISTANCE D’ARC

Page 49: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 49

Procédure full Look-Ahead

Après chaque instanciation, réaliser une arc-consistance complète sur les variables non instanciées

+ réduit les domaines encore mieux que le FC- beaucoup plus gourmand en tps de calcul

A faire :• Simuler sur le pb des 4 reines• Comparer FC et FLA sur le CSP suivant :

X={x,y,z}, Dx=Dy=Dz={1,2}, C={xy,yz,xz}

Page 50: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 50

Différents filtrages étant donné une affectation partielle A

• Anticipe de 3 étapes dans l’énumération

FILTRAGE PAR CONSISTANCE DE CHEMIN ou 3-CONSISTANCE

• …

• Plus un filtrage est fort, plus il sera long à exécuter !

Page 51: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 51

Traitement de contraintes spécifiques

• La contrainte allDifferent

1 ? 2

4

3

2

x[1,1] == 1=> x[1,2]{2,3,4}x[1,4] == 2=> x[1,2]{3,4}x[3,2] == 3=> x[1,2]{4}

Page 52: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 52

La contrainte allDifferent

allDifferent(x1,…,xn)• Calculer nv : nbre de variables non

instanciées• R : ensemble des valeurs restantes

dans les domaines des variables non instanciées

Si nv > |R| alors CSP inconsistant

Page 53: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 53

Traitement de allDifferent

c est une contrainte allDifferent(X)nv=|X|

Procedure filtrageAllDifferent(c)V<- XTant que xV telle que Dx ={v}

V<- V\{x}pour tout x’V, Dx’ <- Dx’\{v}

Fin tqU<-Pour tout xX faire U<-UDxSi nv >|U| alors retourner Inconsistance

Page 54: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 54

Traitement de allDifferent

Limite de la procédure filtrageAllDifferent(c)

Après réduction de domaine :

{1,2}

4{1,2}

3

3{1,2

}{1,2

} 4

4 3{1,2

}{1,2

}

{1,2}

{1,2}

{1,2,3,4

}

{1,2}

allDifferent(x33,x34,x43,x44)nv=4|X|=4=> CSP consistant ?Réponse : non

Page 55: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 55

Traitement de allDifferent

Pour aller plus loin :1. Calculer un couplage

maximal dans un graphe biparti (cmax est la valeur du couplage) avec par ex un algorithme de flot

2. Si nv>cmax => CSP inconsistant

x33

x34

x43

x44

1

2

3

4

cmax=3

Page 56: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 56

5. HeuristiquesObj : faire apparaître les échecs le plus tot possible

Ordre des variables à instancier :• Priorité aux variables liées (par des contraintes)

au plus grand nombre de variables déjà instanciées

• Priorité aux variables ayant le domaine de + petite cardinalité

• Priorité aux variables intervenant dans le plus grand nombre de contraintes

Ordre de vérification des contraintes : priorité aux contraintes les moins satisfiables

Page 57: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 57

CSP qqconque -> CSP binaire

Soit un CSP=(X,D,C) avec C=C2Ck , C2 contient les contraintes binaires et Ck les m contraintes d’arité > 2

Obj : Le transformer en CSP binaire équivalent (même ensemble de solutions)

A toute contrainte c(i) d’arité k (k>2), associer une var yi dont le domaine est l’ensemble des k-uplets consistants de c(i)

Définir CSP’=(X’,D’,C’) = CSP de la façon suivante :X’=XYC’=C2{i=1..m, xj : jeme var de v(i), xj=j-eme-arg(yi)}

avec j-eme-arg(yi) la fonction unaire qui renvoie la jeme variable du k-uplet

Page 58: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 58

ExempleCSP=(X,D,C) avec X={x1,x2,x3,x4}, Di={0,1}, C={c2(1),ck(1),ck(2)}, c2(1): x1x2=1 et ck(1):

x1x2=x3, ck(2): x1x2=x4

y={y1,y2}Dy1={(x1,x2,x3) : ck(1) est vérifiée} = (0,0,0)(0,1,0)(1,0,0)(1,1,1)} Dy2 ={(x1,x2,x4) : ck(1) est vérifiée}

={(0,0,0)(0,1,1)(1,0,1)(1,1,1)}C’={c2(1)}{x1=1er-arg(y1), x2=2eme-arg(y1), x3=3eme-arg(y1), x1=1er-arg(y2), x2=2eme-

arg(y2), x4=3eme-arg(y2)}

Page 59: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 59

La PPC avec OPL

Plusieurs solveurs disponibles proposant des librairies

• IBM ILOG CP Optimizer (C++, java, OPL development studio)

• Microsoft Solver Foundation (C++, Python, inclus dans EXCEL 2007)

• Choco Solver (java) www.choco-constraints.net gratuit

Page 60: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 60

Exemple Accueil des nouveaux sous OPL

using CP;range persons=0..59; range teams=1..10; {string} serviceNames={"A","B","C","D","E","F"}; {int} service[serviceNames]=[asSet(0..19),asSet(20..39),asSet(40..44),

asSet(45..49),asSet(50..54),asSet(55..59)]; dvar int team[persons] in teams; subject to {forall(t in teams) {

count(all(i in persons: i%2==1) team[i],t)==3;count(all(i in persons: i%2==0) team[i],t)==3; forall(f in serviceNames)

count(all(i in service[f]) team[i],t)<=4;}forall(pA in service["A"],pB in service["B"]) team[pA]!=team[pB]; forall(pE in service["E"],pF in service["F"]) team[pE]!=team[pF]; team[5]==team[41];(team[15]==team[40]) || (team[15]==team[51]); (team[20]==team[24]) || (team[22]==team[50]); }

Page 61: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 61

Les contraintes sous OPL

• Arithmétiques : min, max, count, abs, element

• Logiques : &&, ||,!, =>,!=,==• Explicites : allowedAssignments,

forbiddenAssignments• Spécialisées : allDifferent,

allMinDistance, inverse, lex, pack

Page 62: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 62

allowedAssignments

Purpose : OPL function to define the allowed combinations of values.

Type : boolean (1 if the constraint is true, 0 otherwise)

Syntax : allowedAssignments({tuple-type},int, ...) Description : This constraint allows you to easily define the

allowed combinations of values for several integer decision variables. This constraint can apply to any number of variables (and therefore each has a variable number of arguments). The set of allowed combinations is given by a tuple with an arity (number of fields) equal to the number of considered variables. Each tuple defines an allowed combination.

Page 63: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 63

Exemple

using CP; tuple C { int a; int b; }; {C} possibles = {<1,1>, <2,4>}; {C} forbidden = {<3,5>}; dvar int+ x; dvar int+ y; subject to {

allowedAssignments(possibles, x, y); forbiddenAssignments(forbidden, x, y);

}

Page 64: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 64

Contraintes spécialisées

• allDifferent : constrains variables within a dvar array to all take different values

• allMinDistance : constrains variables within a dvar array to all take values that are one-to-one different by at least a given gap

• inverse : takes two arrays of integer variables that must be indexed by an integer and be one-dimensional

• lex : states that the first array of variables is less than or equal to the second array of variables in the alphabetical order

• pack : represents some simple but powerful one-dimensional packing constraint

Page 65: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 65

Contrainte pack

Purpose : a constraint to maintain the load of a set of containers.

Type : boolean (1 if the constraint is true, 0 otherwise)

Syntaxpack([dvar] int[], [dvar] int[],

int[])pack([dvar] int[], [dvar]

int[],int[], [dvar] int)

j=1..n ((p[j]==i)*(w[j]))==l[i] i using CP; int m = 2; //nb containersint n = 3; //nb objetsdvar int l[j in 1..m] in 0..10000; dvar int p[i in 1..n] in 1..m; dvar int nb; int w[1..n] = [i : 1 | i in 1..n]; subject to {

pack(l, p, w, nb); } assert nb==m-count(l,0);

Page 66: Programmation par contraintes Virginie gabrel Master ID apprentissage 2010-2011 1PPC - V. Gabrel

PPC - V. Gabrel 66

Références

• http://www710.univ-lyon1.fr/~csolnon/Site-PPC

• Principles of constraint programming K. R. Apt