• Aucun résultat trouvé

5.4 Méthode de génération des directives order

5.4.1 Présentation de la méthode

-,-F + , + -,-1 F2 F3

FIG. 5.6 – (a) Anomalie structurelle dans un circuit sur deux fonctions de base rattachées à un espace 1D. (b) Présence d’une anomalie, qui peut être structurelle ou non.

Remarque : La méthode de détection des anomalies présentée ci-dessus ne peut pas, en général, distinguer entre les deux types d’anomalies, sauf dans un cas particulier. Il s’agit de l’anomalie

structurelle, qui concerne l’existence d’un circuit dans le GDR dont tous les vecteurs distance

associés aux arcs sont nuls.

5.4 Méthode de génération des directives order

5.4.1 Présentation de la méthode

Dans la section précédente, nous avons présenté d’une manière descriptive la méthode de dé-tection des anomalies des directives ctin. En pratique, la dédé-tection des anomalies est très liée à la génération des boucles imbriquées et par conséquent des directives order. La méthode que nous présentons permet de générer des boucles en analysant chaque composante fortement connexe. D’autre part, elle fait apparaître la nature récursive de la démarche. Comme nous l’avons vu au résultat 2, les fonctions de base d’une même CFC sont associées à un même espace de calcul, celui-ci est caractérisé par sa dimension (1, 2 ou 3) et la liste des axes qui lui sont associés. Ainsi, pour une dimension 2, le sous-espace peut être associé à la liste des axes(i, j), (i, k) ou ( j, k). On

définira par la suite une procédure de génération de l’order qui s’applique à une CFC X donnée. Cette procédure doit tenir compte de la CFC, de la dimension de son espace de calcul et de la liste des axes qui lui sont associés. On notera cette procédure génération_CFC(GX, list), où GX

représente le sous-graphe restreint à X qui est donc fortement connexe et list représente la liste de ses axes. Ainsi, pour un GDR qui se décompose en N CFC, si l’on note X1, X2, . . . , XN ses CFC ordonnées par ordre topologique relativement à leur graphe réduit GDRr, la liste des N instruc-tions suivantes permet, en l’absence d’anomalies, de générer des directives order qui permettent le parcours du graphe modulaire complet :

génération_CFC(GX1, list1); génération_CFC(GX2, list2); ...

listireprésente la liste des axes de l’espace de calcul commun aux fonctions de base de la CFC Xi. La procédure génération_CFC() est une procédure récursive que nous présentons ci-dessous. Nous introduisons, pour cela, les notations qui suivent. Etant donné un sous-ensemble X de fonctions de

base et une liste d’axes list, contenant 0, 1, 2 ou 3 indices d’axes, on note GX,list le sous-graphe du

GDR, qui a pour ensemble de sommets X et qui est formé par les arcs ayant des distances nulles

relativement aux axes qui n’appartiennent pas à la liste list. D’une manière générale, l’appel de la procédure génération_CFC(GX,list, list) suppose que le sous-graphe GX,list est fortement connexe. Cette procédure permet de générer des directives order qui assurent le parcours des espaces affines dont les axes sont définis par la liste list et permettent le calcul en chaque point des fonctions de

base de l’ensemble X . La procédure génération_CFC(GX,list, list) procède de manière analogue à

la méthode de détection des anomalies, qui a été décrite au paragraphe précédent. La procédure se présente de la manière suivante :

– Si list est vide et X contient plus d’un élément, alors signaler une anomalie et arrêter la génération de l’order (il existe dans ce cas un circuit formé de vecteurs distances nulles). – Si list est vide et X contient un élément, alors retenir l’instruction qui consiste à calculer la

fonction de base correspondante à la fonction de base (unique) de X . Retourner à la récursion

précédente.

– Si list est non vide, choisir un axe l pour lequel les distances dl, relatives aux arcs de GX,list, sont toutes de même signe (≥ 0 ou ≤ 0).

– Si un tel axe n’existe pas, alors arrêter la génération de l’order et signaler une anomalie. – Si un tel axe l existe, alors faire les étapes suivantes :

– Retenir l’axe l comme axe de parcours d’une directive order. Choisir le sens croissant (respectivement décroissant) si le signe commun est 0≤ (respectivement ≥ 0). Par contre,

le sens sera considéré indéterminé si toutes les distances dldes arcs de GX,listsont nulles. – Supprimer l de la liste (list est alors réduite d’un élément).

– Considérer les CFC du graphe GX,list (relatif à la nouvelle list), soient X1, X2, . . . , Xpces CFC.

– Parcourir ces CFC suivant l’ordre topologique de leur graphe réduit. Pour toute CFC Xi, appeler la procédure génération_CFC(GXi,list, list).

Pour mieux comprendre ces étapes, considérons les trois exemples de la figure 5.7. La figure 5.7a représente une CFC rattachée à un espace 1D sur l’axe i et sa directive order générée. La CFC a une boucle négative, ce qui impose à la directive order d’être ascendante (YA1) sur l’axe

i. Ce sens permet à F1(i) d’être correctement alimentée par F1(i − 1). On remarque que c’est le

seul parcours cohérent. La description de la procédure présentée permet de faire correctement cette génération. On a une seule CFC avec X= {F1} et list = (i). Après avoir lancé la procédure génération_CFC(G{F1},list,(i)), on choisit l’axe i, en retenant le sens de la boucle i, qui sera

ascen-dante, puisque le signe commun est négatif et on vide la liste. On lance récursivement la procédure

génération_CFC(G{F1},list,()). Dans ce cas la liste est vide et X contient un seul élément, F1, ce qui consiste à le retenir.

La figure 5.7b représente une CFC rattachée à un espace 1D sur l’axe i et sa directive order générée. La CFC a un signe commun négatif sur i, ce qui impose un sens ascendant. En

suppri-5.4. MÉTHODE DE GÉNÉRATION DES DIRECTIVES ORDER (a)

-F

1 order YA1 F1 (b) 0 F2 F1 -F3 0 -order YA1 F2 F1 F3 (c)

-,-F

-,-0 , + 1

F

2

F

3 0,0

FIG. 5.7 – Exemples de GDR rattachés aux espaces 1D et 2D relativement aux axes(i) et (i, j).

La génération des directives order est également donnée pour (a) et (b). (a) CFC composée d’une

fonction de base F1 et une boucle. (b) CFC composée de plusieurs fonctions de base. En reti-rant les axes avec un dl négatif, on peut visualiser dans quel ordre les fonctions de base doivent être exécutées. La génération des directives order est également donnée. (c) RDG composé de trois fonctions de base rattachées à un espace 2D. Les différentes transformations de ce GDR, en appliquant l’algorithme, sont visualisées en figure 5.8.

mant les connexions qui ont des signes négatifs, on obtient le graphe qui permet de comprendre comment planifier l’exécution des fonctions de base. F2 doit être exécutée en premier, puis F1 et F3 peuvent être exécutées dans un ordre quelconque. En suivant le pseudo-code, la procédure

génération_CFC() est appelée avec X= {F1, F2, F3} et list = (i). On choisit l’axe i et on vide la

liste. Le graphe GX,list consiste à retirer les arcs avec di6= 0. On lancera alors la procédure sur trois

instances : génération_CFC(G{F2},(),()), génération_CFC(G{F1},(),()) et génération_CFC(G{F3}, ()), l’ordre F2, F1, F3correspondant à un tri topologique du GX,list. Comme dans ces trois appels la liste est vide, et les Xicontiennent un élément, on retient pour chacun l’instruction qui calcule la

fonction de base correspondante, ce qui donne la génération de la figure 5.7b.

La figure 5.7c est un GDR composé d’une seule CFC, son espace de calcul est un espace 2D sur les axes i et j. On lance donc la procédure génération_CFC() avec X = {F1, F2, F3} et list= (i, j). La figure 5.8 montre l’évolution de la génération des directives order et les différentes

étapes de la transformation du graphe. Le signe commun de la composante se trouve sur i, il est négatif. L’algorithme identifie la première directive : order YA1, l’axe i est retiré de la liste qui sera réduite à( j). Le graphe initial est transformé, comme le montre la figure 5.8a, la procédure génération_CFC() est appelée récursivement sur les CFC du graphe G{F1,F2,F3},( j). Le nouveau calcul des CFC donne deux CFC, X1et X2(la première composée de{F1} et la seconde composée

de {F2, F3}). En supposant que le tri topologique est X1, X2, on lance la procédure d’abord sur

X 1, puis sur X2. Etant donné que le graphe GX1,( j) (formé par les seuls nœuds de X1) n’a pas de connexion et que la liste contient un élément, l’algorithme identifie la directive order YX2, où X peut être A ou B (figure 5.8b). Ensuite l’instruction qui calcule la fonction F1 est retenue (figure 5.8c). A noter que la CFC X2, composée de F2et F3, est toujours en attente d’être traitée par la récursion précédente, pendant que X1 (composée de F1) a déjà terminé son processus de

génération. Une fois X1 traitée, on lance génération_CFC(G{F2,F3},( j),( j)). Le signe commun de X2est sur l’axe j, il est positif. Une directive order YB2 est identifiée et le graphe transformé est présenté à la figure 5.8d. A nouveau la génération_CFC() est appelée sur le graphe transformé. Le calcul des CFC donne deux CFC, composées respectivement de F2 et F3, le tri topologique étant F2, F3. On retient les fonctions de base en suivant le tri topologique, comme le montre la figure 5.8e. Ceci est fait par deux appels de génération_CFC() et génération_CFC() avec G{F2},() et G{F3},().