• Aucun résultat trouvé

Les Diagrammes de Décision Binaire

Remarque 4.7 La complexité de la procédure de réduction d’un BDD est O(nlog n)

4.4 Manipulation Des ROBDDs

Définition 4.11 Deux BDDs D et D’ sont isomorphes s’ il existe une application δ de sommets de D sur les sommets de D’ tel que pour tout sommet v : si δ(v) = v’, alors v et v’ sont des sommets terminaux avec value(v) = value(v’), ou v et v’ sont des sommets non terminaux avec index(v) = index(v’), δ (low(v)) = low(v’) et δ(high(v)) = high(v’).

4.4.1 L’approche Depth-First search (profondeur d’abord)

Les algorithmes typiques de BDD sont basés sur la procédure Depth-first search introduite par Bryant. Nous présentons trois algorithmes importants.

Le premier algorithme calcul n’importe quelle opération logique de base, par exemple AND, OR,…. Bryant a montré que la complexité de ces opérations est quadratique dans la taille du graphe des arguments des entrés.

Cet algorithme prend l’opérateur logique (op) et ses deux opérandes (f et g), et retourne un BDD comme résultat de l’opération f op g. Le résultat BDD est construit par l’exécution récursive de la

38

décomposition de Shannon, dans la manière Depth-first search. Cette décomposition récursive s’arrête quand le nouvel opérateur crée est un cas terminal (ligne 1) ou quand le résultat est disponible dans la table calculée (ligne 2). La ligne 3 détermine le top variable de f et g. Les lignes 4 et 5 exécutent récursivement la décomposition de Shannon sur le cofacteur. A la fin de cette décomposition récursive, l’étape de réduction (ligne 6) assure que le résultat est un BDD réduit. Le BDD est ainsi inséré dans la table unique (lignes 7-11) et finalement l’opérateur est inséré dans la table calculée avec son résultat.

Figure 4.5: La procédure Depth-first Search de Bryant

Le deuxième algorithme est appelé le produit relationnel (relational product). Celui-ci calcule ∃ v. f g . L’idée de base est que le produit f g sélectionne l’ensemble des transitions valides et la quantification existentielle ∃v. La complexité de cet algorithme est NP-hard.

Le troisième algorithme est appelé restrict est un algorithme utilisé pour minimiser la représentation BDD d'une fonction booléenne par le choix des valeurs appropriées et ne se soucie pas de l’espace utilisé d’où son appellation en anglais (don’t care-space).

Procedure RP(v,f,g)

/*calcul du produit relationnel : ∃ v.f∧ g, ou v est l’ ensemble de variables à quantifier et f et g sont deux BDDs*/ if (cas terminal) return simplified result

if the result of (RP,v,f,g) is cached, return the result let τ be the top variable of f and g

r0 ← RP(v,f|τ←0,g|τ←1) /*Shannon expansion on 0-cofactors*/

if (τ ∈v) /* existential quantification on τ ≡ OR (r0, RP(v,f|τ←1,g|τ←1*/ if (r0 ==1)/* OR (1, RP(v,f|τ←1,g|τ←1) ≡ 1*/ r←1

else r1← RP(v,f|τ←1,g|τ←1)/* Shannon expansion on 1-cofactors*/ r←df_op(OR,r0,r1)

else r1← RP(v,f|τ←1,g|τ←1)/* Shannon expansion on 1-cofactor*/ r ←reduced, unique BDD node for(τ,r0,r1)

39

Procedure restrict (f,c)

*compute care-space optimization :

* if c then f else choose some value to minimize the result *Precondition : c<>0. */

if(f is constant ) or (c==1) return f

if the result of(restrict, f ,c) is cached, return the result let τ be the top variable of f and c

if(τ is not the top variable of f ) /*c has variables not in f. Quantify, then recurse*/ r← restrict(f,df_op(OR, c|τ←0, c|τ←1))

else if (c|τ←0= = 0) /* don’t care about 0-branch*/ r ← restrict(f|τ←1, c|τ←1))

else if (c|τ←1= = 0) /* don’t care about 1-branch*/ r ← restrict(f|τ←0, c|τ←0))

else /*normal Shannon decomposition */ r0 ← restrict(f|τ←0, c|τ←0)) /*0-cofactors*/ r1 ← restrict(f|τ←1, c|τ←1)) /*1-cofactors*/ r ← reduced, unique BDD node for (τ,r0,r1) return r

4.4.2 L’ Approche Breadth-First Search

La deuxième approche qui est aussi bien connue et utilisée pour la construction du BDD est l'approche Breadth-First search. Dans cette approche, l'expansion de Shannon pour une opération de niveau supérieur est exécutée de la variable la plus haute (position) vers celle qui possède le rang le plus bas. Toutes les opérations avec le même ordre de variables seront étendues en même temps et de la même façon. La phase de réduction est exécutée de bas en haut selon l’ordre des variables et toutes les variables de même ordre seront étendues en même temps.

Pour illustrer le processus de construction du BDD avec l’algorithme breadth-first, on utilise une approche graphique pour visualiser le processus de construction du BDD. Figure (4.6) illustre l’expansion de Shannon pour l’opération f op g. Dans la partie gauche de cette figure, l’opérateur est représenté avec un nœud d’opérateur lequel fait référence aux représentations BDD de f et g comme des opérandes de cet opérateur. La partie droite de cette figure montre l’expansion de Shannon de cet opérateur et ou le nœud original fera référence au top variable τ. Les deux nouveaux nœuds d’opérateur crées représentent l’opération sur les cofacteurs-0 et cofacteurs-1.

40

La Figure (4.6) illustre les deux règles utilisées dans la phase de réduction. La Figure (4.7.a) montre le cas où les résultats de deux branches (bdd0 et bdd1) sont distincts. La Figure (4.7.b) illustre le cas où les deux branches sont les mêmes et donc le BDD résultant ne dépend pas de la variable τ.

Figure 4.7 : Opération de La réduction

4.5 Algorithme ITE

On peut manipuler de façon simple les ROBDD à l’aide de la fonction ITE(f,g,h) (If Then Else) qui est définie par : ite( f,g,h) = f.g + f’.h (i.e. If f Then g Else h)

Soit x la première variable (i.e. Ordre(x) = 1) de f,g et h.

Soit z = ite(f,g,h). La fonction z est associée au sommet de variable x et dont les fils implantent ite(fx, gx, hx) et ite(fx’, gx’, hx’). En effet :

z = x. Z. x + x’. Z. x’

= x (f .g + f’. h)x + x’ (f.g + f’.h) x’

= x (f x . gx + f’x .h’ x ) + x’ (f x’.g x’ + f’ x’. h x’ ) = ite (x, ite (f x , g x , h x ), ite (f x’ , g x’ , h x’ ))

En plus du calcul récursif de la fonction ite, nous utilisons des identités remarquables pour éviter de les recalculer chaque fois. Ces identités sont consignées dans ce qui suit:

ite(f, 1, 0) = f ; ite(1, g , h) = g ; ite(0, g, h) = h ; ite(f, g , g) = g ; ite(f, 0, 1) = f’

De plus toutes les opérations habituelles peuvent être traduites en termes de l’opérateur ite : Table 4.8: Fonctions Booléennes Pré-calculées et Exprimées sous forme de la fonction ITE

41

Figure 4.9: L’algorithme du Calcul de la Fonction ITE

Cet algorithme utilise deux tables : Table et Table calculée. Table est un tableau dont chaque ligne représente un sommet (c-à-d le tableau précédent). Ses colonnes représentent l’identificateur du sommet, le nom de la variable associée, l’identificateur du fils gauche et l’identificateur du fils droit.

4.6 Ordre Des Variables

Un des problèmes liés aux OBDDs qui a été bien mis en valeur par Bryant [Bry86] est l'ordonnancement des variables de la fonction. En effet, pour une même fonction suivant l'ordre que l'on prend sur les variables, la taille de l’ OBDD peut passer de l'exponentiel au linéaire (Figure 4.10).

Il y a plusieurs approches utilisées pour le classement des variables. On peut citer quelques-unes : Approche dynamique [Rud93] : Cette approche consiste à faire des modifications directement dans l'OBDD. En effet, les ordres des variables dans l'OBDD ne sont plus statiques mais dynamiques (changeant au fur et à mesure de la construction de l’ OBDD).

Approche échange de variables [ISY91] : Propose de pondérer la permutation à l'aide du concept d'énergie. Le déplacement des variables dans l'OBDD est assuré, comme le ferait un électron sur les couches électroniques d'un atome.

Figure 4.10: L'influence des ordres sur la taille du BDD, appliquée à la formule « (x1x2) (x3 x4)

(x5 x6) »

4.7 Implantation des techniques de représentation et de