Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
rappels
- Un "problme de satisfaction de
contraintes" (ou CSP), est un problme
modlis sous la forme d'un ensemble de
contraintes poses sur des variables,
chacune de ces variables prenant ses
valeurs dans un domaine. De faon plus
formelle, un CSP est dfini par un triplet
(X,D,C) tel que
X = { X1, X2, ..., Xn} est l'en. des
variables (les inconnues) du problme ;
D est la fonction qui associe chaque
variable Xi son domaine D(Xi) ;
C = {C1, C2, ..., Ck} est l'ensemble des
contraintes. Chaque contrainte Cj est
une relation entre certaines variables de
X, restreignant les valeurs que peuvent
prendre simultanment ces variables.
Solution :
On dfinit le CSP (X,D,C) tel que
X = {XE2, XE1, XC50, XC20, XC10}
o XE2 dsigne le nombre de
pices de 2 Euros retourner, XE1
dsigne le nombre de pices de 1
Euro retourner, ...
Les domaines spcifient que la quantit
de pices retournes, pour un type de
pice donn, est comprise entre 0 et le
nombre de pices de ce type que l'on a
en rserve :
D(XE2) = {0,1,...,E2}
D(XE1) = {0,1,...,E1}
D(XC50) = {0,1,...,C50}
D(XC20) = {0,1,...,C20}
D(XC10) = {0,1,...,C10}
Les contraintes spcifient que la
somme retourner doit tre gale la
somme insre moins le prix payer :
C = { 200*XE2 + 100*XE1 +
50*XC50 + 20*XC20 + 10*XC10
= T-P }
Dans cette modlisation, nous avons
utilis une contrainte arithmtique linaire
sur les entiers. Cette contrainte est globale
dans le sens o elle fait intervenir toutes
les variables du problme.
Pour exprimer le fait que l'on souhaite que
le distributeur rende le moins de pices
possibles, on pourrait ajouter ce CSP une
fonction "objectif" minimiser
f(X) = XE2 + XE1 + XC50 + XC20 +
XC10
Dans ce cas, rsoudre le CSP revient
chercher une affectation de X complte et
consistante qui minimise f(X).
Solution :
On dfinit le CSP (X,D,C) tel que
X = {X1, X2, ..., X14}
(On associe une variable Xi
diffrente par rgion i colorier.)
pour tout Xi lment de X,
D(Xi) = { bleu, rouge, vert, jaune }
(Chaque rgion peut tre colorie
avec une des 4 couleurs.)
C = { Xi Xj / Xi et Xj sont 2 variables
de X correspondant des rgions
voisines }
(2 rgions voisines doivent tre de
couleurs diffrentes.)
Pour tre plus prcis, on
explicitement les relations
entre rgions, par exemple
prdicat voisines/2, tel que
peut dfinir
de voisinage
l'aide d'un
voisines(X,Y)
Solution :
Premire modlisation
Variables : on associe une variable
chaque lettre
X = {S,E,N,D,M,O,R,Y}
Domaines : les variables correspondant
au premier chiffre d'un mot (S et M)
doivent prendre une valeur diffrente
de 0 ; les autres peuvent prendre
n'importe quelle valeur entre 0 et 9.
D(S) = D(M) = {1,2,3,4,5,6,7,8,9}
D(E) = D(N) = D(D) = D(O) =
D(R) = D(Y) =
{0,1,2,3,4,5,6,7,8,9}
Contraintes :
Une premire contrainte exprime le
fait que SEND+MORE=MONEY :
Rsolution de CSPs
On va maintenant tudier quelques
algorithmes permettant de rsoudre, de
faon gnrique, certains de ces CSPs.
On se restreindra aux CSPs sur les
domaines finis, c'est--dire, les CSPs
dont les domaines des variables sont
des ensembles finis de valeurs. Le
principe commun tous les
algorithmes que nous allons tudier est
d'explorer mthodiquement l'ensemble
des affectations possibles jusqu', soit
trouver une solution (quand le CSP est
consistant), soit dmontrer qu'il n'existe
pas de solution (quand le CSP est
inconsistant).
Nombre
d'affectations
totales 2^n
environ 10^3
20
environ 10^6
30
40
50
60
70
environ 10^9
environ 10^12
environ 10^15
environ 10^18
environ 10^21
environ 1 millionime
de seconde
environ 1 millime de
seconde
environ 1 seconde
environ 16 minutes
environ 11 jours
environ 32 ans
environ 317 sicles
"localement
consistantes"
avec
l'affectation en cours de construction, et
ds lors que le domaine d'une variable
devient vide, on arrte l'numration
pour cette affectation partielle ;
ci-dessous.
Dans cette fonction, A contient une
affectation partielle et (X,D,C) dcrit le
CSP rsoudre (au premier appel de cette
fonction, l'affectation partielle A sera
vide). La fonction retourne vrai si on peut
tendre l'affectation partielle A en une
affectation
totale
consistante
(une
solution), et faux sinon.
fonction simpleRetourArrire(A,(X,D,C))
retourne un boolen
Prcondition :
A = affectation partielle
(X,D,C) = un CSP sur les domaines
finis
Postrelation :
retourne vrai si A peut tre tendue en
une solution pour (X,D,C), faux sinon
dbut
4 - L'algorithme "anticipation"
4.1 - Notions de filtrage et de
consistance locale
Pour amliorer l'algorithme "simple
retour-arrire", on peut tenter d'anticiper
("look
ahead"
en
anglais)
les
consquences de l'affectation partielle en
appele 1-consistance.
un filtrage plus fort, mais aussi plus
long effectuer, consiste anticiper de
deux tapes l'numration : pour
chaque variable Xi non affecte dans A,
on enlve de D(Xi) toute valeur v telle
qu'il existe une variable Xj non affecte
pour laquelle, pour toute valeur w de
D(Xj), l'affectation A U {(Xi,v),(Xj,w)}
soit inconsistante.
Par exemple pour le problme des
4 reines, aprs avoir instanci X1
1, on peut enlever la valeur 3 du
domaine de X2 car si X1=1 et
X2=3, alors la variable X3 ne
peut plus prendre de valeurs :
- si X3=1, on viole la contrainte
X3 X1 ;
- si X3=2, on viole la contrainte
X3+3 X2+2 ;
filtrage revient rsoudre le CSP, c'est-dire que toutes les valeurs restant
dans les domaines des variables aprs
un tel filtrage appartiennent une
solution.
4.2 - Principe de l'algorithme
"anticipation"
Le principe gnral de l'algorithme
"anticipation"
reprend
celui
de
l'algorithme "simple retour-arrire", en
ajoutant simplement une tape de filtrage
chaque fois qu'une valeur est affecte
une variable. Comme on vient de le voir
au point 4.1, on peut effectuer diffrents
filtrages plus ou moins forts, permettant
d'tablir diffrents niveaux de consistance
locale (nud, arc, chemin, ...).
Par exemple, la fonction rcursive
"anticipation/nud(A,(X,D,C))"
dcrite
ci-dessous effectue un filtrage simple qui
Postrelation :
retourne vrai si A peut tre tendue en
une solution pour (X,D,C), faux sinon
dbut
si toutes les variables de X sont
affectes une valeur dans A alors
/* A est une affectation totale et
consistante = une solution */
retourner vrai
sinon /* A est une affectation partielle
consistante */
choisir une variable Xi de X qui n'est
pas encore affecte une valeur dans
A
pour toute valeur Vi appartenant
D(Xi) faire
/* filtrage des domaines par
rapport A U {(Xi,Vi)} */
pour toute variable Xj de X qui
n'est pas encore affecte faire
Dfiltr(Xj) <- { Vj lment de
D(Xj) / A U {(Xi,Vi),(Xj,Vj)}
est consistante }
si Dfiltr(Xj) est vide alors
retourner faux
finpour
si anticipation(A U {(Xi,Vi)},
(X,Dfiltr,C))=vrai alors retourner vrai
finpour
retourner faux
finsi
fin
4.3 - Exemple de "trace d'excution" de
"anticipation"
Considrons de nouveau le problme du
placement de 4 reines sur un chiquier
4x4. Lenchanement des appels successifs
la fonction "Anticipation/nud" peut
tre reprsent par l'arbre suivant (les
valeurs supprimes par le filtrage sont
marques d'une croix) :
la
fonction
"Anticipation/arc"
correspondante serait le suivant (les
valeurs supprimes par le filtrage sont
marques d'une croix) :