Programmation par contraintes

Slides:



Advertisements
Présentations similaires
Résolution Graphique d'un Programme Linéaire
Advertisements

La Méthode de Simplexe Standardisation
Fabrice Lauri, François Charpillet, Daniel Szer
Licence pro MPCQ : Cours
Distance inter-locuteur
Algorithmes et structures de données avancés
Calcul géométrique avec des données incertaines
Calculs de complexité d'algorithmes
Les identités remarquables
1 UMLV 1. Introduction 2. Hachage ouvert 3. Hachage fermé 4. Implémentation des fonctions Méthodes de hachage.
Journées Francophones
Enseignant responsable :
1. Les caractéristiques de dispersion. 11. Utilité.
Bloc 2 : Modèles d’optimisation par la programmation linéaire
1 Intégration numérique garantie de systèmes décrits par des équations différentielles non-linéaires Application à l'estimation garantie d'état et de paramètres.
Activités Vocabulaire
Chap. 1 INTRODUCTION Beaucoup de problèmes de la vie courante, tels la gestion de réseaux de communication ou l'ordonnancement de tâches, correspondent.
Initiation à la programmation et algorithmique cours 3
Génération de colonnes
Initiation au système d’information et aux bases de données
Les requêtes La Requête est une méthode pour afficher les enregistrements qui répondent à des conditions spécifiques. La requête est donc un filtre.
Eléments d ’algèbre relationnelle
Systèmes d’équations du premier degré à deux variables
Suites numériques.
Les structures de données arborescentes
Algorithmes Branch & Bound
B.Shishedjiev - Modèle relationnel
Programmation logique Logique des prédicats du premier ordre
Programmation linéaire
1.2 COMPOSANTES DES VECTEURS
Détection de co-évolution de gènes Master 2 : Informatique à Finalité Professionnelle et Recherche Unifiée (IFPRU) Parcours Ingénierie de lIntelligence.
Méthode des k plus proches voisins
Titre : Implémentation des éléments finis sous Matlab
Programmation fonctionnelle Le langage LISP
Mai 2001FRANCOROIII - Challenge Recherche Locale Guidée Par Le Coût Des Contraintes Gavranovic Haris Univerzitet U Sarajevu IMAG, Grenoble.
Rappel... Solution itérative de systèmes linéaires (suite et fin).
SYSTEMES D’INFORMATION
La droite dans R2 Montage préparé par : André Ross
MODELE RELATIONNEL concept mathématique de relation
Rappels de logique des prédicats du 1er ordre
Représentation des systèmes dynamiques dans l’espace d’état
Représentation des systèmes dynamiques dans l’espace d’état
Représentation des systèmes dynamiques dans l’espace d’état
Programmation linéaire en nombres entiers Algorithme de la subdivision successive («Branch and Bound Algorithm»)
Génération d’un segment de droite
1 Licence dinformatique Algorithmique des graphes Problèmes dordonnancement. Utilisation de ce document strictement réservée aux étudiants de l IFSIC dans.
Cours N°2 Base de Données & Langage SQL
Introduction à la programmation linéaire
Systèmes semi-linéaires
Titre : Implémentation des éléments finis en Matlab
Inéquations du second degré à deux variables
Résoudre une équation du 1er degré à une inconnue
Michel Tollenaere SQL et relationnel ENSGI Cours MSI 2A Relationnel et SQL version 1.4 du 25 septembre 2007 (ajout jointures) 1 Modèle relationnel Historique.
DONG Xiaoguang HONG Liang OULDBABA Fadel WANG Min
Parcours d'une séquence de longueur fixe
Programmation linéaire en nombres entiers : les méthodes de troncature
Introduction à la programmation linéaire en nombres entiers
ASI 3 Méthodes numériques pour l’ingénieur
Mise en forme en Mathématiques
MAXIMISER les RESULTATS
Présentation de la méthode des Eléments Finis
Coupes efficaces pour la relaxation lagrangienne
1 Notations Asymptotiques Et Complexité Notations asymptotiques : 0 et  Complexité des algorithmes Exemples de calcul de complexité.
Suites numériques Définitions.
Chapitre 3 :Algèbre de Boole
Rappels de statistiques descriptives
Programmation linéaire en nombres entiers
Problèmes de satisfaction de contraintes
Programmation par contraintes Réalisé par: WETCHA Chaima MOKDED Mohamed Ali FIA3-GL-AL 1 1.
1 UE Intro. Optimisation L3 INFO UPSud II. Programmation linéaire en variables entières (ou mixtes)
Transcription de la présentation:

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

Plan Exemple introductif : Sudoku Partie 1 : Définition d’un CSP Partie 2 : Résolution d’un CSP Partie 3 : La PPC avec OPL PPC - V. Gabrel

Exemple introductif : sudoku 7 5 3 2 6 1 9 4 PPC - V. Gabrel

Exemple introductif : sudoku 7 5 3 2 6 1 9 4 ? 1 2 3 4 5 6 7 8 9 ? PPC - V. Gabrel

Exemple introductif : suduko 7 5 3 2 6 1 9 4 ? Réduction de domaine par propagation des contraintes Case : 1 2 Ligne : 5 7 Colonne : 2 7 =>1 2 3 4 5 6 7 8 9 PPC - V. Gabrel

Exemple introductif : sudoku 7 5 3 2 6 1 9 4 Réduction du domaine 3 4 6 8 9 Seule position possible pour le 4 => Réduire les domaines des autres cellules PPC - V. Gabrel

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 PPC - V. Gabrel

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 ligne allDifferent(x[i,j] : j de 1 à 9 ) // valeurs différentes en colonne allDifferent(x[j,i] : j de 1 à 9); Pour i allant de 0 à 2 Pour j allant de 0 à 2 // valeurs différentes dans les cases 3x3 allDifferent(x[3*i+k,3*j+q] : k et q de 1 à 3); PPC - V. Gabrel

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; PPC - V. Gabrel

Solution // solution x = [[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]]; PPC - V. Gabrel

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 PPC - V. Gabrel

Partie 1 : Définition d’un CSP 1 – Le problème des reines 2 – 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 PPC - V. Gabrel

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 Solution complète PPC - V. Gabrel

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)} PPC - V. Gabrel

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. PPC - V. Gabrel

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 PPC - V. Gabrel

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, xiDi 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. PPC - V. Gabrel

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 ≠ x2 Si k=3 : contrainte ternaire : x1x2x3 Si k=n : contrainte n-aire : allDifferent(v(i)) = contraint toutes les variables appartenant à v(i) à prendre des valeurs différentes. PPC - V. Gabrel

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. PPC - V. Gabrel

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, xiDi C=(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 } PPC - V. Gabrel

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ées Affectation 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 PPC - V. Gabrel

Différents problèmes de CSP SP = 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). PPC - V. Gabrel

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

Deuxième exemple Pour 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 PPC - V. Gabrel

Modèlisation sous la forme d’un CSP Variables : xi = numéro d’équipe affecté à l’employé i, i=0..59 Domaines : Di = {1,..,6} pour tout I Contraintes : 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) PPC - V. Gabrel

Exemple d’applications industrielles Allocation de ressources (tournées de véhicules) Emploi du temps Planification de production Ordonnancement Vérification et diagnostic … PPC - V. Gabrel

Partie 2 : Résolution d’un CSP Procédure d’exploration Engendrer et tester Procédure Retour Arrière Simple La consistance locale Filtrage a priori Filtrage en cours de résolution Heuristiques On ne limite à des CSP à variables entières !! PPC - Virginie Gabrel

1. Procédure Engendrer et tester Obj : Enumérer l’ensemble des affectations complètes jusqu’à en trouver une qui soit consistante PPC - Virginie Gabrel

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 fsi Sinon choisir xj non instanciée pour tout v dans Dj faire si EngTest(A(xj,v),X,D,C) alors retourner vrai fin pour retourner faux Fsi Appel : EngTest(,X,D,C) PPC - Virginie Gabrel

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 PPC - Virginie Gabrel

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 PPC - Virginie Gabrel

2. Procédure Retour Arrière Simple Procédure RAS(A,X,D,C) Si A est totale alors retourner A fsi Sinon 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 pour Fsi Appel : RAS(,X,D,C) PPC - Virginie Gabrel

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. PPC - Virginie Gabrel

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>=Y Si x=1, pas de valeur dans Dy pour vérifier la contrainte Suppression de 1 dans Dx PPC - V. Gabrel

Nœud-consistance S’applique aux contraintes unaires Définition : Un CSP est nœud-consistant si xX, c(i)C telle que |v(i)|=1, vDx, (x,v) vérifie r(i). PPC - V. Gabrel

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} vDx, v’Dy: {(x,v),(y,v’)} vérifie r(i) vDy, v’Dx: {(x,v’),(y,v)} vérifie r(i) Remarque :  algo polynomiaux pour rendre arc-consistant un CSP. PPC - Virginie Gabrel

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 xv(i) et vDx,  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. PPC - V. Gabrel

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 PPC - V. Gabrel

4-Filtrage a priori Comment rendre un CSP arc-consistant ? Par le Filtrage. PPC - Virginie Gabrel

Procédure Filtrage a priori Procédure FAP1(X,D,C) L<- {(xi,xj), (xj,xi) avec ij liées par une contrainte binaire} Répéter modification <- faux pour tout (xi,xj) dans L modification <- REVISE (xi,xj)modification fin pour Tant que modification= vrai Procédure REVISE(xi,xj) pour tout v dans Di faire S’il n’existe pas v’Dj tel que {(xi,v), (xj,v’)} est consistance alors Di <- Di\{v} modification <- vrai fin si Fin pour Retourner modification PPC - Virginie Gabrel

Procédure Filtrage a priori Limite 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 ij 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 PPC - Virginie Gabrel

Exercice 1 Peut-on rendre le CSP suivant arc-consistant ? Appliquer FAP1 puis FAP2 Variables : x,y,z Domaines : 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)} PPC - V. Gabrel

Exercice 2 : Planification de tâches On doit planifier 6 tâches dans un délai de 6 heures Graphe potentiel-tâche Chaque 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. Modéliser ce problème comme un CSP Rendre ce CSP arc-consistant. 1 T1 T6 1 1 2 T2 T4 T5 T3 2 PPC - V. Gabrel

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 PPC - V. Gabrel

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 PPC - V. Gabrel

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 PPC - V. Gabrel

Procédure Forward Checking Procédure FC(A,V,D,C) Si V= alors A est une affectation totale consistante Sinon choisir xk dans V pour tout v dans Dk si check-forward(xk,v,V\{xk},D,C) alors FC(A(xk,v),V\{xk},D,C) fin si fin 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’} Si Dj= alors retourner faux Retourner vrai Appel : FC(,X,D,C) PPC - Virginie Gabrel

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 PPC - V. Gabrel

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={xy,yz,xz} PPC - V. Gabrel

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 ! PPC - V. Gabrel

Traitement de contraintes spécifiques La contrainte allDifferent 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} 1 ? 2 4 3 PPC - V. Gabrel

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 PPC - V. Gabrel

Traitement de allDifferent c est une contrainte allDifferent(X) nv=|X| Procedure filtrageAllDifferent(c) V<- X Tant que xV telle que Dx ={v} V<- V\{x} pour tout x’V, Dx’ <- Dx’\{v} Fin tq U<- Pour tout xX faire U<-UDx Si nv >|U| alors retourner Inconsistance PPC - V. Gabrel

Traitement de allDifferent Limite de la procédure filtrageAllDifferent(c) Après réduction de domaine : {1,2} 4 3 {1,2,3,4} allDifferent(x33,x34,x43,x44) nv=4 |X|=4 => CSP consistant ? Réponse : non PPC - V. Gabrel

Traitement de allDifferent Pour aller plus loin : Calculer un couplage maximal dans un graphe biparti (cmax est la valeur du couplage) avec par ex un algorithme de flot Si nv>cmax => CSP inconsistant x33 x34 x43 x44 1 2 3 4 cmax=3 PPC - V. Gabrel

5. Heuristiques Obj : 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 PPC - V. Gabrel

CSP qqconque -> CSP binaire Soit un CSP=(X,D,C) avec C=C2Ck , 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’=XY C’=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 PPC - V. Gabrel

Exemple CSP=(X,D,C) avec X={x1,x2,x3,x4}, Di={0,1}, C={c2(1),ck(1),ck(2)}, c2(1): x1x2=1 et ck(1): x1x2=x3, ck(2): x1x2=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)} PPC - V. Gabrel

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 PPC - V. Gabrel

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]); PPC - V. Gabrel

Les contraintes sous OPL Arithmétiques : min, max, count, abs, element Logiques : &&, ||,!, =>,!=,== Explicites : allowedAssignments, forbiddenAssignments Spécialisées : allDifferent, allMinDistance, inverse, lex, pack PPC - V. Gabrel

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. PPC - V. Gabrel

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); } PPC - V. Gabrel

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 PPC - V. Gabrel

Contrainte pack Purpose : a constraint to maintain the load of a set of containers. j=1..n ((p[j]==i)*(w[j]))==l[i] i  using CP; Type : boolean (1 if the constraint is true, 0 otherwise) int m = 2; //nb containers int n = 3; //nb objets dvar int l[j in 1..m] in 0..10000; Syntax dvar int p[i in 1..n] in 1..m; pack([dvar] int[], [dvar] int[], int[]) dvar int nb; pack([dvar] int[], [dvar] int[],int[], [dvar] int) int w[1..n] = [i : 1 | i in 1..n]; subject to { pack(l, p, w, nb); } assert nb==m-count(l,0); PPC - V. Gabrel

Références http://www710.univ-lyon1.fr/~csolnon/Site-PPC Principles of constraint programming K. R. Apt PPC - V. Gabrel