• 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, r avec | 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êter au service s

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 raciner au symbole à la racine s é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 estr et celui du service est s, sont les équations qui

permettent de passer der à s et celles qui introduisent s : 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 est s sont, celles composées

de deux équations et qui permettent de passer de r à s et 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 N1 ⇒1s é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 estr et celui du service est s, sont celles composées de

trois équations et qui permettent de passer der à s et celles qui introduisent s. Pour cela, nous passons par deux symboles intermédiaires quelconques N1

etN2 et construisons la transformation à partir der ⇒1 N1,N1 ⇒1 N2 et

N21 s :

r ⇒3s = r ⇒1N1 N1 ⇒1N2 N2 ⇒1 s r ⇒3s = r ⇒1N1 N1 ⇒2s

r ⇒3s = r ⇒2N2 N2 ⇒1s

é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

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) ou root(e1,1) = N op,

– root(en,2) = root(s),

– et∀i ∈ [1, n − 1], root(ei,2) = root(ei+1,1) ou root(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 op se 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 = a obtenue en appliquant la transformation? (x1, 1 ∗ x1), (x2, x2+ 0) : α ∗ X + Y = a? α ∗ X + Y = x? 2+ 0 α ∗ X = x? 2 Y = 0? x2 = 1 ∗ x? 1 x1 = a? α ∗ X = 1 ∗ a? α= 1? X= a?

est également obtenue de cette façon :

α ∗ X + Y = a? α ∗ X + Y = x? 2+ 0 α ∗ X = x? 2 Y = 0? x2= a? α ∗ X= a? α ∗ X = 1 ∗ x? 1 α= 1? X= x? 1 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) ou root(e1,1) = N op,

– root(en,2) = root(s),

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?

que dans le sens

s= r?

s= x? 1∗ (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)