• Aucun résultat trouvé

Partie II Décompositions fonctionnelles et structurelles, exactes et approchées 53

5.2 Une nouvelle méthode pour le comptage

Les méthodes structurelles comme Btdsont efficaces pour la résolution de Csp structurés. Nous

proposons d’adapter l’algorithme Btd au dénombrement exact de solutions et ainsi évaluer l’intérêt

de l’utilisation de la structure d’une instance pour le comptage de solutions : #Btd.

Comme pourBtd, la première étape de #Btdconsiste à calculer une décomposition arborescente

du graphe de contraintes. Tandis queBtdutilise la notion de good, pour le dénombrement de solutions

nous utilisons la notion de #good. Le but est de sauver le nombre de solutions des sous-problèmes

induits par la décomposition arborescente.

Définition 5.9 #good

Soit une décomposition arborescenteD. Étant donnés le cluster C

i

et un de ses filsC

j

, un#good est

une paire (A[C

i

∩ C

j

], nb) avecA[C

i

∩ C

j

] une affectation consistante surC

i

∩ C

j

etnbest le nombre de

solutions du sous-problèmeP

A,Ci/Cj

.

Reprenons le Csp de la figure 5.3 page précédente. Si nous considérons l’affectation A ={X

4

a, X5d} sur C

2

∩ C

3

nous obtenons un #good (A,2) car nous avons deux solutions pour le

5.2. Une nouvelle méthode pour le comptage 99

Algorithme 5: #Btd(A,C

i

,X

Ci

) : entier

Entrée:

une affectationA

un clusterC

i

un ensemble de variablesX

Ci

X

Pré-conditions :

X

Ci

contient les variables deC

i

qui ne sont pas affectés dans A

Post-relations :

renvoie le nombre de solutions du problème enraciné enC

i

ayant comme affectation partielle A

—————————————————————————————————————————–

if X

Ci

=∅then

N bSol←1;

F ←Fils(C

i

);

1

while F 6=∅ et N bSol6= 0do

Choisir C

j

dans F;

FF r{C

j

};

if (A[C

i

∩ C

j

], nb) n’est pas un #good dans P then

nb←#Btd(A,C

j

,X

Cj

r(C

i

∩ C

j

));

enregistre le #good (A[C

i

∩ C

j

], nb) deC

i

/C

j

dansP;

N bSolN bSol×nb;

2

return N bSol;

else

Choisir XX

Ci

;

N bSol←0;

DD

X

;

3

whileD6=∅ do

Choisir v dansD;

DDr{v};

4

if A ∪ {Xv} ne viole aucune contrainte cC then

N bSolN bSol+ #Btd(A ∪ {Xv},C

i

,X

Ci

r{X});

5.2.1 L’algorithme #Btd

#Btd explore l’espace de recherche suivant l’ordre des variables induit par la décomposition

arborescente. Ainsi, on commence par les variables du cluster racine C

1

. A l’intérieur du cluster C

i

,

on affecte une valeur à une variable, on “backtrack” si une contrainte est violée. Ce schéma peut être

amélioré avec le maintien de l’arc consistance (ligne4). Lorsque toutes les variables deC

i

sont affectées,

#Btdcalcule le nombre de solutions du sous-problème induit par le premier fils deC

i

, s’il en existe un.

Plus généralement, considéronsC

j

un fils deC

i

. Étant donnée une affectation couranteAsurC

i

, #Btd

vérifie si l’affectation A[C

i

∩ C

j

] correspond à un #good. Si c’est le cas, #Btd multiplie le nombre

de solutions enregistré avec le nombre de solutions de C

i

avec A comme affectation. Sinon, on étend

A sur Desc(C

i

) dans l’ordre pour compter le nombre nb d’extensions consistantes et on enregistre

le #good (A[C

i

∩ C

j

], nb). #Btd calcule le nombre de solutions du sous-problème induit par le fils

suivant deC

i

(ligne 1). Finalement lorsque chaque fils deC

i

a été examiné, #Btdbacktrack et essaye

de modifier l’affectation courante de C

i

. Le nombre de solutions de C

i

est la somme des solutions de

chaque affectation.

#Btdest décrit par l’algorithme 5. Le premier appel est BTD(∅,C

1

,C

1

) et il renvoie le nombre de

solutions.

Exemple 5.10 Reprenons le Csp de la figure 5.3 page 97. Soit l’affectation A = {X

1

a, X

2

b, X3c} comme affectation de C

1

alors S

A,C1/C2

=S

A∪{X4a,X5d},C1/C2

+S

A∪{X4d,X5a},C1/C2

=

2 + 2 = 4.

Le nombre de solutions deP

A,C1/C2

est4sur{X

4

, X

5

, X

6

}et6solutions pourP

A,C1/C4

sur{X

7

, X

8

}.

Donc, il y a24 solutions sur {X1, X2, X3, X4, X5, X6, X7, X8} avecA.

Notons que pour [C

1

∩ C

4

], ({X

3

c},6) est un #good. Pour une autre affectation sur C

1

, par

exempleA

0

={X1b, X2a, X3c}, il n’est pas nécessaire de calculer les solutions surC

4

car le

#good ({X

3

c},6) peut être utilisé pourA

0

.

5.2.2 Propriétés

Théorème 5.11 L’algorithme #Btd est correct, complet et termine.

Démonstration. Cette preuve s’effectue par induction en exploitant les propriétés des #goods

struc-turels. L’induction est réalisée sur le nombre de variables apparaissant dans la descendance du cluster

C

i

, exceptée celle de C

i

déjà affectées. Cet ensemble de variables est noté :

Var

i

=Var(C

i

,X

Ci

) =X

Ci

  [ Cj∈fils(Ci)

Desc(C

j

)r(C

i

∩ C

j

)

 

Var(C

i

,X

Ci

) correspond à l’ensemble des variables à affecter pour déterminer le nombre d’extensions

cohérentes deA sur les variablesX

Ci

et sa descendance (Desc(C

i

)).

5.2. Une nouvelle méthode pour le comptage 101

Pour démonter que l’algorithme #Btdest correct, nous devons prouver la propriétéP(A,Var(C

i

,X

Ci

))

définie par : “#Btd(A,C

i

,X

Ci

) renvoie le nombre d’extensions cohérentes de A sur les variablesX

Ci

et sur la descendance de C

i

”.

Initialisation : ConsidéronsP(A,∅)

Si Var(C

i

,X

Ci

) = ∅ alors X

Ci

= ∅ et fils(C

i

) = ∅. Puisque A est une affectation cohérente

sur X

Ci

et sur la descendance de C

i

. Il n’y a qu’une seule extension de A sur X

Ci

et sur la

descendance deC

i

,Aelle-même. Donc P(A,∅) est vérifiée.

Induction : P(A,Var

i

) avec Var

i

6=∅. Supposons que∀Var

i0

⊂ Var

i

P(A,Var

i0

) soit vérifiée.

1

er

cas : X

Ci

6=∅.

Durant la boucle while (ligne3) l’assertion N bSol est le nombre d’extensions cohérentes de A

sur X

Ci

et la descendance de C

i

avec les valeursv deX déjà examinée” est vérifiée. Nous allons

montrer qu’elle est vraie à l’issue de la boucle. Soitv une valeur deX à examiner :

• A ∪ {Xv} est incohérente. Il n’y a pas d’extension possible, N bSol est inchangé,

l’as-sertion est donc vérifiée.

• A ∪ {Xv} est cohérente. et Var(C

i

, X

Ci

r{X}) ⊂ Var(C

i

, X

Ci

). L’hypothèse

d’induc-tion nous permet de déduire que #Btd(A ∪ {Xv},C

i

, X

Ci

r{X}) renvoie le nombre

d’extensions de Atelles que X =v. Le résultat obtenu est ajouté àN bSol, l’assertion est

vérifiée.

Après la boucle (ligne5), #Btd(A,C

i

,X

Ci

) renvoie le nombre d’extensions cohérentes deA sur

X

Ci

et sur la descendance deC

i

. DoncP(A,Var(C

i

,X

Ci

)) est vérifiée.

2

nd

cas : X

Ci

=∅.

Durant la bouclewhile(ligne 1) l’assertion“Pour chaque enfant deC

i

déjà examiné il existe au

moins une extension cohérente de Asur Desc(C

i

).N bSol est le nombre d’extensions cohérentes

deA sur les fils de C

i

déjà examinés.”

Nous allons montrer qu’elle est vraie à l’issue de la boucle. SoitC

j

un fils deC

i

.

• S’il existe un #goodg= (B, nb) deC

i

/C

j

tel queA[C

i

∩ C

j

] =B, par la définition5.9 d’un

#goodA possède nbextensions surDesc(C

j

).

• S’il n’existe pas de #good g = (B, nb) de C

i

/C

j

tel que A[C

i

∩ C

j

] = B alors #Btd est

appelée avec l’affectationAetVar(C

j

,C

j

r(C

i

∩ C

j

))⊂ Var(C

i

,∅). L’hypothèse d’induction

nous permet de déduire que #Btd(A,C

j

,Var(C

j

,C

j

r(C

i

∩ C

j

))) renvoie nb le nombre

d’extensions cohérentes queA possède surDesc(C

i

)

Enfin la propriété 5.2 permet de conclure que N bSolN bSol ×nb vérifie l’assertion. Si

N bSol = 0 la boucle est terminée, car il n’existe pas d’extension cohérente de A. Après la

boucle (ligne 2) #Btd(A,C

i

,∅) renvoie le nombre d’extensions cohérentes de A sur Desc(C

i

).

DoncP(A,Var(C

i

,X

Ci

)) est vérifiée.

Pour résumer, l’algorithme #Btd satisfait la propriété P(A,Var(C

i

,X

Ci

)), et en particulier la

propriétéP(∅,Var(C

1,

X

C1

)) pour le premier appel.

#Btda la même complexité que Btd.

Théorème 5.12 #Btd a une complexité en O(nmd

w+1

) en temps et O(nsd

s

) en espace avec n le

nombre de clusters, d la taille du plus grand domaine, s la taille du plus grand séparateur, m est le

nombre de contraintes et w la largeur de la décomposition arborescente traitée par #Btd.

Démonstration.

Complexité en temps Dans le pire des cas, #Btd explore tous les clusters (au plus n) et essaye

toutes les valeurs de chaque variable à l’intérieur de chaque cluster. A chaque instant au plus

mcontraintes sont vérifiées (cf.ligne4 de l’algorithme). Grâce au principe d’enregistrement des

#goods, il est impossible d’explorer un même cluster avec une même affectation deux fois. Le

nombre d’affectations d’un cluster est borné pard

w+1

avecw= max

CiC

| C

i

| −1 la largeur de la

décomposition arborescente. Par conséquent, #Btda une complexité en temps enO(nmd

w+1

).

Complexité en espace #Btd ne mémorise que les #goods. Ces affectations sur les intersections

C

i

∩ C

j

avecC

j

un enfant deC

i

. Donc, sisest la taille de la plus grande intersection, #Btda une

complexité en espace enO(nsd

s

) car le nombre de ces intersections est majoré par n, le nombre

de #goods pour une intersection est majoré pard

s

et la taille d’un #good est au pluss.

En pratique, pour les problèmes ayant une grande largeur d’arbre, Btd explose en temps et

en mémoire, voir à la section 5.4 page 108. Dans ce cas, nous sommes intéressés par une méthode

d’approximation.

Documents relatifs