• Aucun résultat trouvé

L’algorithme

Dans le document Courtage sémantique de services de calcul (Page 83-87)

3.5 Réalisation

3.5.1 L’algorithme

L’algorithme naïf (Algorithme 1) a ensuite été amélioré pour être plus efficace.

Algorithme 1 Algorithme initial sans optimisation compare(s, r)=

compares,ravec

|Cste1,Cste2

siCste16=Cste2alors Échec

|s,V ar→ Assign(s,r)

|V ar,r→ Assign(s,r)

|f(f1, ..., fn),f(g1, ..., gm)→

Comparer les filsfi etgiet appliquer les transformations qui conserventf

|s,r→

Appliquer les transformations qui permettent de passer de la requêterau services fin compare

Il reste à définir ce que « Appliquer les transformations qui conservent f » et « Ap-pliquer les transformations qui permettent de passer de la requête au service » signifient.

Optimisations Nous vérifions si la comparaison de tous les fils peut aboutir, c’est-à-dire s’il existe une transformation dont la taille en accord avec la quantité d’énergie restante, avant de faire le travail sur les fils.

Si nous effectuons un traitement en séquence des fils, nous prenons en compte la quantité d’énergie minimale pour obtenir une solution pour un fils et les fils suivants ne sont traités qu’avec l’énergie totale moins cette énergie. S’il n’y a pas de résultat sur un fils, le calcul n’est pas poursuivi.

Le même principe est appliqué pour les sous-problèmes obtenus à partir de l’applica-tion d’une transformal’applica-tion.

Ces deux optimisations ne sont plus applicables si nous faisons un traitement en pa-rallèle des fils.

3.5.2 Traitement des équations

Nous avons vu que l’algorithme a été adapté pour appliquer une suite d’équations (transformation) et non une unique équation. Nous allons maintenant voir comment sont

construites les transformations et quelles sont les contraintes que nous leur imposons.

Une équation est composée de deux termes. Ces termes ont des symboles à la racine : n1etn2. Nous noteronsn1→ n2 pour faire référence à l’une de ces équations. Nous note-ronsN op(pour No operator) dans le cas des variables. Nous appellerons « transformation

» toute suite d’équations.

– Dans un premier temps, les transformations qui permettent de passer du symbole à la racinerau symbole à la racinesétaient définies comme suit :

1. Les transformations de taille 1, applicables sur un problème dont le symbole à la racine de la requête estret celui du service ests, sont les équations qui permettent de passer deràset celles qui introduisents:

r⇒1s

équation 1

r r → s s

r Nop→ s s

2. Les transformations de taille 2, applicables sur un problème dont le symbole à la racine de la requête estr et celui du service estssont, celles composées de deux équations et qui permettent de passer de r à set celles qui intro-duisents. Pour cela, nous passons par un symbole intermédiaire quelconque N1et construisons la transformation à partir der⇒1N1 etN11s: r⇒2s = r⇒1N1 N11s

équation 1 équation 2

r r →N1 N1→ s s

r r →N1 Nop→ s s

r Nop→N1 N1→ s s

r Nop→N1 Nop→ s s

3. Les transformations de taille 3, applicables sur un problème dont le symbole à la racine de la requête estret celui du service ests, sont celles composées de trois équations et qui permettent de passer deràset celles qui introduisent s. Pour cela, nous passons par deux symboles intermédiaires quelconquesN1 etN2 et construisons la transformation à partir der ⇒1 N1,N11 N2 et N21 s:

r⇒3s = r⇒1N1 N11N2 N21 s r⇒3s = r⇒1N1 N12s

r⇒3s = r⇒2N2 N21s équation 1 équation 2 équation 3 r r →N1 N1→N2 N2→ s s r r →N1 N1→N2 Nop→ s s r r →N1 Nop→N2 N2→ s s

r r →N1 Nop→N2 Nop→ s s

r Nop→N1 N1→N2 N2→ s s r Nop→N1 N1→N2 Nop→ s s r Nop→N1 Nop→N2 N2→ s s r Nop→N1 Nop→N2 Nop→ s s 4. . . .

Les transformations étaient donc de la forme : (e1,1, e1,2), ...,(ei,1, ei,2), ...,(en,1, en,2)avec : – root(e1,1) =root(r)ouroot(e1,1) =N op, – root(en,2) =root(s),

– et∀i∈[1, n−1], root(ei,2) =root(ei+1,1)ouroot(ei+1,1) =N op.

Notons ici la grande importance des «N op» qui permettent d’introduire un sym-bole quelconque. Les éléments neutres jouent donc un rôle particulier.

– Dans un second temps, nous avons diminué cette grande importance des éléments neutres. En effet, alors que la présence duN opse justifie en début de transforma-tion, elle se justifie moins en milieu de transformation. En effet, elle est nécessaire pour introduire un symbole, mais en cours de transformation, elle n’est pas indis-pensable car cette équation peut être appliquée une fois la décomposition effectuée.

Le symbole à la racine du nouveau problème est alors connu et les équations sont alors mieux choisies.

Exemple 3.5.1

La solution du problèmeα∗X+Y =? aobtenue en appliquant la transformation (x1,1∗x1),(x2, x2+ 0):

α∗X+Y =? a α∗X+Y =? x2+ 0

α∗X =? x2 Y = 0?

x2 = 1? ∗x1 x1 =? a

α∗X = 1? ∗a α= 1? X=? a est également obtenue de cette façon :

α∗X+Y =? a α∗X+Y =? x2+ 0 α∗X=? x2 Y = 0?

x2=? a

α∗X=? a α∗X = 1? ∗x1 α= 1? X=? x1

x1 =? a

Les transformations sont donc de la forme : (e1,1, e1,2), ...,(ei,1, ei,2), ...,(en,1, en,2)avec : – root(e1,1) =root(r)ouroot(e1,1) =N op, – root(en,2) =root(s),

– et∀i∈[1, n−1], root(ei,2) =root(ei+1,1).

Les transformations qui introduisent un symbole sont celles qui permettent de passer de N opà ce symbole et celles qui conservent un symbole sont celles qui permettent de passer de ce symbole à lui-même (diagonale de la matrice).

Les équations sont stockées dans une matrice, les indices de la case sont liés aux deux symboles à la racine des deux membres de l’équation. Une équation est donc stockée dans chaque sens d’orientation. Les transformations sont ensuite engendrées grâce à une fermeture transitive sur le nombre d’équations, en en supprimant certaines pour que les transformations respectent les contraintes énoncées ci-dessus. Il y a une matrice par taille de transformation (nombre d’équations composant la transformation).

Nous voyons apparaître ici une valeur importante : la taille des transformations. Pour un ensemble fini d’équations qui peuvent être appliquées, le nombre de transformations est, quant à lui, infini. Toutes les transformations ne peuvent donc pas être appliquées en un temps fini. Notre algorithme est donc paramétré par la taille maximale des transforma-tions appliquées et le nombre total d’équatransforma-tions appliquées. Ces deux valeurs font partie des paramètres en entrée de l’algorithme. Ce sont des éléments de ce qui a été appelé précédem-ment « la quantité d’énergie » allouée à l’algorithme. L’autre valeur intervenant dans cette quantité d’énergie est la profondeur maximale de composition autorisée.

Les transformations choisies sont plus contraintes que celles du système de déduc-tion de Gallier et Snyder. Elles sont choisies de façon à ce qu’il existe une possibilité pour qu’elles aboutissent à une solution. La façon d’aboutir à une solution est la décomposition des problèmes, nous rendons donc les symboles à la racine égaux.

Optimisations Une équation n’est pas appliquée consécutivement dans un sens et dans le sens inverse car cela revient à appliquer l’identité.

La façon dont sont créées les suites de transformations implique que le même travail est fait plusieurs fois de façon consécutive. En effet, l’application d’une transformation de la formee1.e2.e3.e4 (où lesei sont des équations deE) est généralement suivie de l’appli-cation d’une transformatione1.e2.e3.e5. Le début étant identique, il est donc souhaitable de factoriser les opérations. Pour cela, les résultats d’une transformation sont stockés. Quand une nouvelle transformation est appliquée, le calcul ne reprend qu’à partir du moment où les deux transformations sont différentes. La reprise des calculs sur les termes qui diffèrent doit donc être réalisée avec les bonnes variables intermédiaires, celles-ci seront elles aussi stockées. Cela permet un gain de temps important.

Nous pouvons ajouter un poids strictement positif à chaque équation ou à chaque orientation de l’équation, pour distinguer les équations coûteuses. Lors de l’application d’une équation, au lieu de décrémenter la quantité d’énergie de un, nous la décrémentons du poids associé à l’équation.

Exemple 3.5.2

Une équation de distributionx1∗(x2+x3) =x1∗x2+x1∗x3, coûte plus chère dans le

sens s=? r

s=? x1∗x2+x1∗x3 x1∗(x2+x3)=? r

que dans le sens

s=? r

s=? x1∗(x2+x3) x1∗x2+x1∗x3 =? r

car cela conduit à une solution où les services réalisent deux multiplications au lieu d’une.

Dans le document Courtage sémantique de services de calcul (Page 83-87)