Les
contraintes globales ont été introduites
afin daméliorer la recherche en PPC. Les
trois types principaux de contraintes sont :
- Contraintes
sémantiquement globales
Il est impossible ou difficile de modéliser avec
les contraintes basiques.
- Contraintes
algorithmiquement globales
La complexité de lalgorithme de filtrage
et / ou de la phase de propagation est plus faible.
- Contraintes
opérationnellement globales
Le filtrage est plus efficace : le raisonnement supprime
plus de valeurs inconsistantes.
Exemple
1 : la contrainte AllDifferent
Un
exemple typique est la contrainte globale allDifferent.
Cependant ce nest pas une contrainte sémantiquement
globale :
allDifferent
( { X1, X2,
Xn }
) = { X1!=X2, X1!=X3,
X1!=Xn, X2!=X3
}
Au
moins deux types dimplémentations ont été
proposées :
- Obtenir
lAC généralisée
On garantit quil existe un support pour toute valeur
autorisée.
- Obtenir
la consistance de borne généralisée
On garantit quil existe un support pour toutes les
bornes.
Un
des algorithmes efficaces de filtrage proposé pour
cette contrainte globale est basé sur la recherche
des Composantes Fortement Connexes (CFC) dans un graphe
biparti daffectation.
Exemple 2 : La contrainte Occurence
On
souhaite avoir une contrainte prenant un ensemble de variables
(x1, x2,
xn),
une valeur l et un nombre doccurrence minimal
et maximal de cette valeur dans la liste. Comment mettre
en place la contrainte ?
Le principe va être le suivante : si la borne maximale
est atteinte, on retire la valeur des autres domaines. Si
le borne minimale est atteinte, on instancie toutes les
variables le pouvant à la valeur l. Pour faire tout
cela efficacement, il est important de maintenir des compteurs
incrémentalement.
Conclusion
- Les
contraintes globales filtrent mieux et permettent
donc de réduire lespace de recherche
- Les
contraintes globales peuvent simplifier la modélisation
dun problème
- Les
contraintes globales demandent un développement
dédié : peu de contraintes globales
en commun entre tous les solveurs.
-
Les contraintes globales peuvent se révéler
inefficaces sur des problèmes de petite taille
(le gain en recherche ne compense pas les calculs supplémentaires)
Voici
le plan de cette présentation sur la programmation par contraintes
- Les
notions de base
:
- Quelques
notions avancées :
- Quelques
exemples pour utiliser la P.P.C. :
Cette page
a été co-réalisée avec Guillaume
Rochart, docteur en mathématiques dans mon équipe de
recherche au Bouygues
e-lab.10/03/2009.