• Aucun résultat trouvé

Approche laire sans heuristique

5.2 Détermination de la frontière de Pareto

5.2.1 Approche laire sans heuristique

Dans le chapitre 4, le principe de détermination de la frontière de Pareto pouvait être grossièrement vu comme une phase de collecte faisant transiter des vecteurs par  paquets  le long des séparateurs, et eectuant des tests de non-dominance à chaque  mouvement  de ces paquets. L'idée de l'approche laire est de faire transiter des vecteurs un par un, et par petits mouvements, c'est-à-dire uniquement en eectuant  un pas  vers la clique suivante.

Pour formaliser ces notions, nous allons d'abord dénir le contenu qui transitera le long de l'arbre de jonction. Nous sommes intéressés par trois informations :

 La valeur vectorielle d'une solution partielle.

 L'instanciation partielle des attributs engendrant cette valeur vectorielle.  La position actuelle du message dans l'arbre de jonction.

Nous appellerons ces associations des labels, la dénition formelle associée à cette idée sera donc :

5. Approche laire pour les réseaux GAI vectoriels 135 Dénition 83 (Label) Un label est un triplet xv, xD, iy où v est un vecteur de Rm, xD

est une instanciation des attributs de XD, et i est l'indice d'une clique Ci P C.

De façon à convertir une sous-fonction d'utilité en un ensemble de labels, nous uti-liserons l'opération de  labelisation , dont le principe consiste simplement à parcourir toutes les valeurs des sous-fonctions d'utilité, comme le montre l'algorithme 20.

Algorithme 20 : Labeliser Entrée : ui :XCi Ñ Rm

V Ð H;

1

pour chaque xCi P XCi faire

2 V Ð V Y txuipxCiq, xCi, iyu; 3 n 4 retourner V; 5

Nous sommes donc capables de générer des labels à faire transiter à partir d'une clique du graphe. Nous allons maintenant dénir en quoi consiste un pas de notre approche laire : il s'agit de sélectionner un label, de le faire transiter le long d'un séparateur pour atteindre la prochaine clique de la phase de collecte. Pour eectuer un tel déplacement, nous pouvons noter certains aspects importants :

 Le déplacement d'un label vers une clique engendre plusieurs labels sur cette clique : il doit en eet être combiné avec tous les labels de cette clique qui lui sont compa-tibles (à valeur de séparateur xée).

 Ce phénomène de démultiplication du vecteur par combinaison n'est pas unique-ment dû à l'arrivée sur une clique, d'autres vecteurs sont peut-être déjà  venus  sur cette clique à partir d'une autre clique via des séparateurs adjacents. Il est donc non seulement nécessaire de stocker le label transitant sur le séparateur (nous note-rons Mij les messages stockés sur le séparateur Sij), mais aussi de le combiner avec tous les autres vecteurs compatibles ayant déjà transité (et qui sont donc stockés) sur les séparateurs adjacents.

De manière à simplier le pseudo-code et les notations utilisées, nous allons introduire une série d'opérateurs :

 L'opérateur b eectue une combinaison de deux ensembles de labels : si V et W sont deux ensembles de labels, alors V b W  txv w, xDYE, iy {xv, xD, iy P V et xw, xE, jy P Wu. Cet opérateur génère donc l'ensemble des labels qu'il est possible d'obtenir par une somme vectorielle des vecteurs contenus dans ces la-bels. Notons que les valeurs des attributs de xD et xE doivent être compatibles : pxDqDXE  pxEqDXE. Les instanciations des attributs sont regroupées entre elles. Il est à noter que cet opérateur a un eet absorbant sur l'indice de la clique contenu dans les labels (i est toujours conservé).

 Un opérateur (Ñ) permettant de modier l'indice de clique contenu dans un en-semble de labels : VÑj  txv, xD, jy{xv, xD, iy P Vu.

 Tous les labels d'un ensemble contiennent une instanciation du même ensemble d'attributs, l'opérateur rs vise à extraire l'ensemble des labels compatibles avec une instanciation partielle de ces attributs : VrySs  txv, xD, iy P V{pxDqS  ySu.

 VóXE ”xEPXENDPpVrxEsq, l'opérateur vise à eectuer un test de non-dominance de Pareto uniquement sur les labels compatibles entre eux selon certains attributs (XE), puis à reformer l'ensemble des labels.

Algorithme 21 : UnPas Entrée : xv, xD, iy : un label j Ð Succ(i); 1 Mij Ð Mij Y txv, xD, iyu; 2 V Ð Labeliser(uj) btxv, xD, iyu; 3

pour chaque z P Pred(j) faire

4 si z  i alors 5 VÐ pV b Mzjq; 6 n 7 n 8 si j  root alors 9 V Ð NonDominés(V); 10 sinon 11 succÐ Succ(j); 12 V Ð VóXSj,succ; 13 n 14 V Ð VÑj; 15 retourner V; 16

L'algorithme 21 implante cette notion de mouvement et s'interprète de la façon sui-vante : j est initialisé comme étant le successeur de i dans l'ordre de collecte. Comme le label va transiter de la clique Ci vers la clique Cj, il est stocké dans la liste des messages transitant sur ce séparateur : Mij. Le label va ensuite être combiné au contenu de l'uti-lité uj pour former l'ensemble de labels V, qui va lui même être combiné aux messages compatibles ayant déjà transité sur les séparateurs adjacents (les Mzj). Finalement, si le label a atteint la clique racine, un test de non-dominance est exécuté globalement sur V. Sinon, un test de non-dominance sera eectué uniquement à valeur de séparateur XSj,succ

xée, puis les labels seront modiés pour prendre en compte le changement d'indice de leur position actuelle (ils auront transité de Ci vers Cj).

On peut toutefois objecter à cette notion de mouvement qu'il est nécessaire que les ensembles de labels ayant déjà transité sur des séparateurs adjacents à la clique de destination (les Mzj) ne soient pas vides. En eet, si un label transite de la clique Ci

vers la clique Cj, et s'il existe une clique Cz telle que j  Succ(z) avec Mzj  H, alors il sera impossible d'obtenir une combinaison de labels cohérents à stocker dans Cj. Pour résoudre ce problème, il est nécessaire d'élaborer un précalcul initialisant les Mzj sur tous les séparateurs du réseau GAI.

L'idée de l'algorithme 22 est d'initier un déplacement à partir des feuilles du réseau GAI vers la clique racine. Seul un label pour chaque instanciation possible de séparateur se déplacera à partir des feuilles. Puis les combinaisons de labels seront eectuées, formant ainsi un ensemble de labels ayant déjà transité vers une clique. De nouveau, un label pour chaque valeur de séparateur sera choisi pour transiter sur la clique suivante et ainsi de

5. Approche laire pour les réseaux GAI vectoriels 137 suite jusqu'à la clique racine.

Remarque 25 Pour simplier l'écriture et la lecture de l'algorithme, nous allons nous servir d'un  faux  séparateur : Sroot,root = Croot.

Algorithme 22 : InitialiserMouvement Entrées :

act : indice de clique succ : indice de l'appelant V Ð Labeliser(ui);

1

pour chaque clique Ci voisine de Cact faire

2 si i  succ alors 3 InitialiserMouvement(i, act); 4 V Ð V b Mi,act; 5 n 6 n 7 V Ð VóXSact,succ; 8 V Ð VÑact; 9 Mact,succДx

Sact,succPXSact,succ Plus prometteur de VrxSact,succs;

10

LopenÐ LopenY pVzMact,succq;

11

Il est important de noter deux conséquences de ce précalcul :

 Au fur et à mesure de la propogation des labels jusqu'à la racine, des combinaisons des labels sont formées sans atteindre la racine, toutes ces combinaisons sont sto-ckées dans un ensemble noté Lopen. Nous dirons que cet ensemble est l'ensemble des labels  ouverts  de l'algorithme.

 Un des ensembles M ne correspond pas à un séparateur : il s'agit de Mroot,root. Cet ensemble correspond aux labels qui ne sont pas encore dominés ayant transité jusqu'à la clique racine.

Nous disposons maintenant de toutes les briques de base pour dénir une première version de l'approche laire de l'algorithme de détermination de la frontière de Pareto (algorithme 23). Le fonctionnement de l'algorithme va consister en un lancement de InitialiserMouvement dans un premier temps. Le résultat de ce précalcul va ensuite être exploité : Mroot,root va être stocké dans une variable nommée Lpareto, et tant que Lopen ne sera pas vide, on choisira un label de Lopen pour lui faire eectuer un pas de déplacement vers la racine. Chaque fois qu'un ensemble de labels atteint la clique racine, Lparetoest mis à jour pour toujours contenir une liste de labels non dominés ayant achevé leur déplacement. Lorsque des labels sont déplacés mais qu'ils n'atteignent pas encore la racine, Lopen est mis à jour pour prendre en compte ces nouveaux labels (ayant besoin d'eectuer de nouveaux déplacements pour atteindre la clique racine).

Remarque 26 L'algorithme 23 a uniquement pour but d'introduire la notion de dépla-cement de labels, toutefois on peut faire un parallèle avec l'algorithme exact présenté dans le chapitre 4 : Le principe de ces deux algorithme est exactement le même, à savoir ef-fectuer des tests de non-dominance locaux et des combinaisons de labels pour déterminer la frontière de Pareto. La grande diérence entre ces deux algorithmes est que l'un fait

Algorithme 23 : ParetoSansHeuristique DeterminerOrdreCollecte();

1

InitialiserMouvement(Croot, Croot);

2

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

3

tant que Lopen H faire

4

xv, xD, iy Ð Choisir(Lopen);