• Aucun résultat trouvé

Intégration de l'heuristique

5.2 Détermination de la frontière de Pareto

5.2.2 Intégration de l'heuristique

LopenÐ Lopenztxv, xD, iyu;

6

V Ð UnPas(xv, xD, iy);

7

si Succ(i)  root alors

8

LP aretoÐ NonDominés(LP aretoY V);

9 sinon 10 LopenÐ LopenY V; 11 n 12 n 13

transiter directement l'intégralité des labels (et donc, après extraction des labels d'une clique, il ne s'intéresse jamais plus à cette clique), tandis que l'autre n'eectue que des petits déplacements d'une clique vers une autre. Cette diérence à un impact direct sur les temps de calculs : Dans le cas de ParetoSansHeuristique, il est nécessaire de gérer de nombreux ensembles qui s'avèrent plus coûteux que la première approche.

5.2.2 Intégration de l'heuristique

Nous avons précédemment vu comment générer des fonctions heuristiques à partir d'un réseau GAI vectoriel, et un premier algorithme déterminant la frontière de Pareto par transition de labels. Nous allons maintenant assembler ces deux notions pour bâtir un algorithme capable d'exploiter ces heuristiques. Dans ParetoSansHeuristique, à chaque itération, un label de xv, xD, iy P Lopen est choisi pour eectuer un déplacement de la clique Ci vers la clique Cj. Étant donné que Sij € D, pxDqSij est une projection valide d'une instanciation de XD sur les attributs de XSij. On a donc que v HjippxDqSijq est une estimation majorante des vecteurs d'utilité qu'il est possible de produire en faisant transiter le label jusqu'à la clique racine. Donc, si v HjippxDqSijq est dominé par un vecteur de Lpareto, il n'est plus nécessaire de continuer le déplacement, car n'importe quel vecteur d'utilité obtenu en n de déplacement sera lui aussi dominé par un vecteur de Lpareto. En appliquant cette idée, on obtient donc directement l'algorithme 24.

5.2.3 Validité et complexité de l'algorithme

Nous allons maintenant établir les preuves de validité et de complexité de l'algo-rithme 24. Pour la validité, il est important de noter qu'il sut de démontrer la validité de ParetoSansHeuristique (proposition 19), puis de montrer que les coupes dûes à l'heuristique sont valides (proposition 20).

Proposition 19 (Validité de ParetoSansHeuristique)

L'algorithme ParetoSansHeuristique calcule la frontière de Pareto (Lpareto) d'un ré-seau GAI vectoriel.

5. Approche laire pour les réseaux GAI vectoriels 139 Algorithme 24 : ParetoHeuristique

DeterminerOrdreCollecte();

1

CollecteHeuristique(Croot, Croot);

2

DiffusionHeuristique();

3

InitialiserMouvement(Croot, Croot);

4

LP aretoÐ NonDominés(Mroot,root);

5

tant que Lopen H faire

6

xv, xD, iy Ð Choisir(Lopen);

7

LopenÐ Lopenztxv, xD, iyu;

8

j Ð Succ(i);

9

si v HjippxDqSijq non dominé dans LP areto alors

10

V Ð UnPas(xv, xD, iy);

11

si Succ(i)  root alors

12

LP aretoÐ NonDominés(LP aretoY V);

13 sinon 14 LopenÐ LopenY V; 15 n 16 n 17 n 18

Preuve. Eectuons une récurrence sur les cliques du réseau GAI vectoriel pour montrer la validité des calculs et le fait qu'il n'y ait pas de  perte  de labels en cours d'exécution de l'algorithme :

 Si le réseau est réduit à une unique clique, alors InitialiserMouvement eectue un test de non-dominance sur tous les labels composant la clique (étant donné que Sroot,root  Croot), le résultat sera stocké dans Lpareto, on aura Lopen  H, donc la boucle  tant que  ne sera pas exécutée. À la n de l'exécution de l'algorithme, Lpareto contiendra donc tous les labels composant la frontière de Pareto.

 Sur les feuilles de l'arbre de jonction (en considérant Croot comme la racine de l'arbre), InitialiserMouvement eectue un test de non-dominance à valeur de séparateur xé (voir le chapitre 4 pour la validité de ce test), puis fait transiter un label pour chaque instanciation de séparateur possible, il n'existera donc pas de message vide pour une instanciation donné du séparateur. De plus, les messages n'ayant pas transité seront stockés dans Lopen, il n'y aura donc pas de perte de labels : Soit un label appartient au message du séparateur, soit il appartient à Lopen. Dans ParetoSansHeuristique, tout label transitant par la suite le long du séparateur est bien supprimé de Lopen, et stocké dans Mij (j successeur de i dans l'ordre de collecte).

 Sur une clique Ci n'étant ni une feuille de l'arbre de jonction, ni la clique racine, InitialiserMouvement combinera les labels envoyés sur les séparateurs par les pré-decesseurs de i. Ces combinaisons sont valides car les messages Mij (j prédecesseur de i) ne sont pas vides par hypothèse de récurrence. Puis, la fonction eectuera un test de non-dominance à valeur du séparateur Si,succ xé (avec succ successeur de idans la phase de collecte). De la même façon que pour les feuilles, un label sera

choisi pour chaque instanciation de XSi,succ pour composer un nouveau message vers Csucc. Les autres labels formés sont insérés dans Lopen, il n'y a donc pas de perte de labels : tout label calculé appartient soit à un séparateur, soit à Lopen. Dans ParetoSansHeuristique, tout label transitant par la suite sur cette clique se combine avec les labels compatibles déjà créés pour former un ensemble V qui est bien stocké dans Lopen et aecté à la clique i.

 Sur la clique racine Croot, pour les mêmes raisons que pour les cliques qui ne sont pas des feuilles, les combinaisons de labels sont valides. Toutefois, InitialiserMouvement n'eectue pas un choix de labels, mais eectue un test de non-dominance pour com-poser Lpareto(étant donné que Sroot,root  Croot), qui correspond bien à la frontière de Pareto des labels ayant atteint la clique. De plus, pendant l'exécution de la boucle  tant que , chaque ensemble V de combinaison de labels arrivant jusqu'à Croot contient bien la somme de toutes les sous-fonctions d'utilité vectorielles et une instanciation complète des attributs ayant engendrés ces valeurs. La frontière de Pareto Lpareto est bien mise à jour et, à la n d'une itération, contient bien la frontière de Pareto de tous les labels ayant transité jusqu'à Croot.

Par récurrence, puisque les calculs sont justes, et qu'aucune information ne se perd (tous les labels transitant se retrouvent bien dans Lpareto ou dans Lopen avec le bon indice de clique), dès lors que Lopen  H, Lpareto correspond donc bien aux labels de la frontière

de Pareto du problème. 

Proposition 20 (Validité de l'heuristique) Soit v, v1, w et z quatre vecteurs de Rm

vériant v1 ÁP v, alors on a :

P w v1 ùñ z ¡P w v

Preuve. Cette preuve est automatique : par dénition on a v1 ÁP v, donc w v1 ÁP w v,

donc si z ¡P w v1, on aura forcément z ¡P w v. 

La proposition 20 permet d'armer que les coupes eectuées par l'algorithme ParetoHeuristique sont valides : v1correspond à l'estimation majorante obtenue lors de l'extraction du label,

et v à la véritable valeur que l'on pourrait obtenir en poursuivant le mouvement du label jusqu'à la racine, z est un vecteur contenu dans Lpareto et w le vecteur d'utilité actuel-lement contenu dans le label. Donc si l'estimation de la valeur nale du label (w v1) est dominée au sens de Pareto par un vecteur composant la frontière de Pareto courante, nous pouvons être sûrs qu'il ne sert à rien d'eectuer son déplacement : il sera de toutes façons dominé par un vecteur de la frontière de Pareto lorsqu'il atteindra la clique racine. Nous allons maintenant établir la complexité de l'algorithme (proposition 21). Il est toutefois à noter que cette complexité n'est qu'une borne théorique, car il n'est pas pos-sible de prendre en compte les coupes dûes aux fonctions heuristiques dans ce résultat. En pratique, l'algorithme est bien meilleur, comme nous le verrons dans les expérimentations (section 5.4).

Proposition 21 (Complexité) L'algorithme ParetoSansHeuristique s'exécute en un temps en Opm|C||XCmax|2K3mq, avec K une borne supérieure sur la valeur des utilités uj et |XCmax|  maxCiPC±

5. Approche laire pour les réseaux GAI vectoriels 141 Preuve. Pour démontrer nement la complexité de cet algorithme, nous n'allons pas suivre exactement l'ordre des instructions présentées dans le pseudo-code, mais un ordre diérent correspondant néanmoins aux mêmes calculs. L'algorithme fait des appels à la fonction UnPas. Cette fonction prend en argument des labels xv, xD, iy et les fait transiter d'une clique (Ci) vers une clique adjacente (Cj). Pour cela, elle eectue toutes les com-binaisons possibles du label xv, xD, iy avec les labels compatibles de Cj (ligne 03) ainsi qu'avec tous les labels compatibles envoyés par messages sur les séparateurs adjacents à Cj (les messages Mzj, ligne 06). Pour un label donné xv, xD, iy transitant sur le message Mij, la complexité de calcul de la ligne 03 de UnPas est en Opm|XCmax|q. Par hypothèse, il ne peut exister plus de Km labels diérents transitant sur le message Mij pour une valeur xSij P XSij donnée. Notons que, pour deux valeurs diérentes xSij, ySij P XSij, les combinaisons eectuées sur la ligne 03 vont faire intervenir des sous-parties distinctes de la table uj. Par conséquent, la totalité des combinaisons eectuées sur la ligne 03 de UnPas pour l'ensemble des labels du message Mij est calculé en OpmKm|XCmax|q. À la n de l'algorithme ParetoSansHeuristique, on aura appelé UnPas avec les messages de tous les séparateurs. Donc, globalement, à la n de ParetoSansHeuristique, l'ensemble des appels à la ligne 03 de UnPas aura été réalisé en Opm|C|Km|XCmax|q.

La boucle des lignes 0408 de UnPas eectue toutes les combinaisons possibles des labels de V avec ceux des messages Mzj. Par hypothèse, il ne peut exister plus de Km

labels diérents transitant sur les messages Mzj pour une valeur xSzj P XSzj donnée. Donc, lorsque l'on eectue la première fois la ligne 06 de UnPas pour l'ensemble des labels de Mij, on réalise OpK2m|XCmax|q combinaisons car, pour chaque xCj P XCj, on est potentiellement amené à combiner Km labels par Km labels. Par hypothèse, on ne pourra obtenir plus de Km vecteurs diérents (donc labels diérents) pour chaque valeur de xCj. Donc, globalement, sur une clique donnée, le nombre de combinaisons de labels réalisées sur les lignes 0408 est en OpsK2m|XCmax|q, où s est le nombre de séparateurs adjacents à la clique (moins 1). Donc, globalement, sur tout l'arbre de jonction, et donc à la n de ParetoSansHeuristique, les lignes 0408 auront engendré Op|C|K2m|XCmax|q combinaisons. Chaque combinaison étant réalisée en Opmq opérations, on aura donc eectué Opm|C|K2m|XCmax|q opérations.

Nous avons vu que, dans la fonction UnPas, V ne pouvait pas contenir plus de Km|XCmax| éléments. Avec une structure de données appropriée, on peut supprimer en OpmKm|XCmax|q les vecteurs d'utilité identiques, permettant de restreindre |V| à, au plus, Km vecteurs/labels diérents. Ensuite, il ne faut que mK2m opérations pour cal-culer les non-dominés de la ligne 10. Globalement, dans ParetoSansHeuristique, on est amené à appeler la ligne 10 de UnPas pour chaque label possible de chaque sépa-rateur adjacent à root. Autrement dit, on a potentiellement Op|C|Km|XCmax|q appels possibles. Donc, sur l'ensemble des appels de la ligne 10 de UnPas, on a une complexité en Opm|C|K3m|XCmax|q opérations. Enn, la ligne 13 de UnPas réalise des projections de V sur des séparateurs. Chaque appel à cette ligne est réalisée en Opm|XCmax|K2mq opérations. Étant donné que UnPas est potentiellement appelé pour chaque label possible de chaque séparateur, la ligne 13 est appelée Op|C||XCmax|Kmq fois. Donc, globalement, l'ensemble des appels à la ligne 13, et plus généralement, l'ensemble des appels de UnPas, est réalisé en Opm|C||XCmax|2K3mq opérations.

Pour terminer cette démonstration, notons qu'outre les appels à UnPas, la complexité de ParetoSansHeuristique provient aussi de la ligne 9 de ParetoSansHeuristique (les

lignes 5, 6, 11 pouvant chacune être eectuée en Op1q). Chaque appel à la ligne 9 calcule des non-dominés sur un ensemble d'au plus Km vecteurs diérents. Comme nous l'avons vu dans le paragraphe précédent, cette ligne peut être appelée au plus Op|C|Km|XCmax|q fois. On a donc une complexité en Op|C|K3m|XCmax|q pour les appels à la ligne 9. En conclusion, globalement, l'algorithme ParetoSansHeuristique a une complexité en

Opm|C||XCmax|2K3mq.