Vous êtes sur la page 1sur 39

Thorie et algorithmique des graphes - LINMA1691 Rapport de projet - Les graphes volutifs

Professeur titulaire
Vincent Blondel

Auteurs
Hadrien Van Lierde Patrick Lambert Pierre-Alexandre Beaufort

Dcembre 2012

Table des matires


Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Notions de graphes volutifs . . . . . . . . . . . . . . . . . . . . . . 1.1 Les rudiments . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Voyager dans le temps . . . . . . . . . . . . . . . . . . . . . 1.3 Les arbres volutifs . . . . . . . . . . . . . . . . . . . . . . . 2 Le plus court chemin . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1 Hypothses . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Algorithmes . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Connexit travers le temps . . . . . . . . . . . . . . . . . . . . . . 3.1 Dnitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Vrier la connexit forte . . . . . . . . . . . . . . . . . . . 3.3 Identier les composantes connexes . . . . . . . . . . . . . . 4 Arbre de recouvrement . . . . . . . . . . . . . . . . . . . . . . . . . 4.1 Optimalit dun arbre de recouvrement . . . . . . . . . . . . 4.2 Trouver un arbre de recouvrement : un problme NP dicile 4.3 Algorithme de larbre de recouvrement minimum . . . . . . 5 Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1 LEO Satellites . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Les interactions sociales . . . . . . . . . . . . . . . . . . . . Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ii 1 1 2 3 4 4 4 7 7 8 9 10 11 11 12 15 15 16 I

Annexes
A Implmentations . . . . . . . . . . . . . . A.1 Le plus court chemin . . . . . . . . A.2 Larbre de recouvrement minimum Bibliographie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

II
. III . III . X . XIX

Introduction
Notre socit est en perptuelle volution. Lillustration de la page de garde en est une preuve. Elle met en scne un rseau de satellites en orbite, interagissant avec des systmes terrestres de communication ; il sagit des LEO Satellites. Ce support de communication a t instaur an de permettre la diusion dinformations travers le monde, ce qui est devenu primordial dans notre socit. Dailleurs, la technologie tend de plus en plus favoriser laccs et lchange dinformations via des systmes wireless et mobiles. La thorie des graphes est une excellente piste pour la modlisation de ces situations. Toutefois, les graphes reprsentant ces objets devront exprimer le caractre mobile de la situation, tout en soulignant les interactions au cours du temps. On devine que ces graphes devront voluer au cours du temps, suivant les transformations dynamiques quils subissent. Ce type de graphe sappelle Graphe volutif . Lobjet de ce rapport est de dnir les graphes volutifs et les notions fondamentales qui y sont lies et densuite dvelopper lensemble des outils ncessaires pour eectuer une analyse topologique de ces graphes : pour chaque problme (plus court chemin, arbre de recouvrement...), nous donnons soit un algorithme de rsolution en temps polynomial, soit une dmonstration de NP-compltude ou NP-dicult. La structure de ce rapport est la suivante. Tout dabord, nous prsentons les notions propres aux graphes volutifs, sans ngliger leur dnition formelle. Ce formalisme nous permettra de faire le contraste entre les graphes statiques et les graphes dynamiques. Ensuite, nous considrons le problme de vhiculer le plus rapidement possible une information. Ce problme est exprim par celui du plus court chemin dans un graphe dynamique. On tablira les algorithmes qui permettent de construire des plus courts chemins qui conservent linformation par hypothse, puisque cest notre souhait. Par aprs, il est logique de discuter des zones o linformation, manant dun objet, peut vhiculer an dvaluer linuence de linformation. Ce paramtre est dcrit au moyen de la connexit travers le temps. Dans notre analyse, nous prsentons dabord une mthode pour dterminer si un graphe est connexe ou non, puis nous analysons le problme de la dtermination des composantes connexes dun graphe. Par la suite, nous nous intressons aux structures graphiques qui permettent linformation mise par un objet dtre diuse un maximum dobjets et ce pour un cot minimal (ou une dpense dnergie minimale). Plus particulirement, nous tudierons celles qui minimisent leur complexit spatiale, savoir les arbres de recouvrement minimum. En plus de donner lalgorithme permettant dobtenir ce type de structure dans certains cas particuliers, nous analyserons les dicults rencontres pour trouver un arbre de recouvrement minimum dans le cas gnral. Enn, nous clturons ce rapport par deux exemples dapplication : les LEO satellites et les Interactions Sociales. Dans chaque cas, des informations sont manipules au cours du temps.

ii

Notions de graphes volutifs [3]

Dans cette section, nous ralisons une premire approche de la notion de graphe volutif. Cette approche permet de mieux apprhender les concepts abords dans les sections suivantes. Ainsi, nous prsentons dans un premier temps les notions lmentaires lies au caractre dynamique des graphes volutifs. Ensuite, nous introduisons un nouveau concept, celui de voyage au sein dun graphe temporel. Enn, nous voyons ce quil advient des arbres dans le cas de graphes volutifs

1.1

Les rudiments

La notion de graphe volutif permet la formalisation du concept de graphe travers le temps. Cette formalisation permet de reprsenter de manire abstraite et ecace les rseaux dynamiques qui sont aujourdhui nombreux - voire omniprsents - dans notre socit moderne. Grossirement, la notion de graphe volutif peut tre dcrite comme une succession de sousgraphes au cours du temps. Chaque sous-graphe correspond un intervalle de temps. Nous dnissons donc une squence de temps de prsence dune arte ainsi quune squence de temps de prsence dun sommet. Dnition 1.1 (Squence de temps de prsence dune arte (respectivement, dun sommet)). Ce qui indique les instants durant lesquels larte (respectivement, le noeud) est prsent(e). Il est possible dajouter les direntes caractristiques de larte (respectivement, le noeud) durant ces intervalles. Maintenant, nous pouvons formuler une dnition plus formelle de graphe volutif. Dnition 1.2 (Graphe volutif). Soient un graphe G(V, E ) et une squence ordonne de ses sous-graphes, SG = G1 , G2 , ..., GT tel que T i=1 Gi = G. Soit une squence ordonne dinstants ST = t0 , t1 , ..., tT . Alors, lensemble G = (G, SG , ST ), o chaque Gi est le sous-graphe prsent durant [ti1 ; ti [, est un graphe volutif. Nous notons |V | = N et |E | = M . On pose VG = V et EG = E . La dnition G = (G, SG , ST ) dtermine G de faon univoque. Toutefois, pour allger les notations utilises dans les dmonstrations, nous dnissons G = (VG , EG ), en supposant connus les pas de temps durant lesquels chaque arte est active. Ds lors, nous pouvons dnir quelques caractristiques en lien avec lactivit et la dynamique dun graphe volutif. Dnition 1.3 (Activit dun sommet v (respectivement, dune arte e)). Le nombre dintervalles de prsence du sommet v (respectivement, arte e), not V (v ) (respectivement, E (e)). Dnition 1.4 (Activit sommet (respectivement, arte)). Le maximum de lactivit des sommets (respectivement, artes), not V (respectivement, E ) tel que : V = max(V (v ))|v VG (respectivement, E = max(E (e))|e EG ) Dnition 1.5 (Activit dun graphe volutif). Le maximum entre lactivit sommet et lactivit noeud, not tel que : = max(V , E ) Dnition 1.6 (Dynamique dun graphe volutif). Dni par la relation nombre de sous-graphes au cours du temps. 1
1 , T

o T est le

1.2

Voyager dans le temps

Dans les graphes traditionnels, on tudie gnralement les types de chemins que lon peut eectuer en leur sein. Il est donc utile de dvelopper le concept de chemin pour un graphe volutif, cest--dire un chemin travers le temps. Nous analyserons ensuite brivement la notion de plus court chemin dans un graphe volutif. Celle-ci sera dveloppe davantage dans le chapitre 2 Le bon sens nous amne considrer les chemins temporels qui progressent travers le temps. Ce concept est celui du voyage dans un graphe volutif. Dnition 1.7 (Voyage). Soit un chemin R = e1 , e2 , ..., ek o ei EG . Soit R = 1 , 2 , ..., k , un instant indiquant que larte ei est parcourue au temps i . Ds lors, J est un voyage si et seulement si R est en concordance avec R et G , cest--dire si J permet la traverse de u v au sein de G au cours du temps. En gnral, nous souhaitons minimiser un voyage, de telle sorte quil soit le plus court possible. Toutefois, on peut optimiser un voyage selon dirents critres. En eet, on peut minimiser soit le temps auquel le voyage sachve, soit le nombre dartes parcourues ou soit la dure du voyage. Ces trois optimisations sappellent - respectivement - les premiers, les min-sauts et les plus rapides voyages. Les premiers voyages Il sagit des voyages qui arrivent le plus tt possible tous les sommets du graphes en partant dun noeud source s. Lalgorithme de Dijkstra semble tre une mthode correcte de minimisation, tant donn quil construit un ensemble S de manire itrative. Cet ensemble contiendra au nal tous les sommets du graphe, puisquon ajoute un un les dirents sommets. Avant lajout dun sommet v / S, on calcule la distance d(v ) entre u et ses sommets voisins v ; ensuite, si d(v ) + d(u) < d( v ), o d(u) est la distance entre u et le sommet s de rfrence et o d( v ) est la distance entre s et certains v nots v , alors la distance d( v ) est mise jour. On constate que lalgorithme se base sur le fait que les chemins les plus courts sont eux-mmes composs de chemins les plus courts. Nanmoins, la transposition dle de lalgorithme au cas volutif ne fonctionne pas. En eet, les premiers voyages ne sont pas forcment composs de premiers voyages. Toutefois, il existe au moins un premier voyage qui prsente cette proprit. Il est donc possible de concevoir un algorithme qui dtermine ce type de voyage optimis (cf. section 2). Les min-sauts voyages Lobjectif est de minimiser le nombre dartes parcourues. Comme prcdemment, les min-sauts voyages ne sont pas forcment composs de min-sauts voyages. Toutefois, une proprit se dgage. Notons (u; v ), la dernire arte dun min-saut voyage seectuant du sommet s au sommet v et arrivant au temps t. Si une telle arte existe, alors ce min-saut voyage est plus court que tous les voyages seectuant de s u et sachevant avant t. Ds lors, on considre tous les couples (u; t), pour lesquels on calcule les min-sauts voyages de s u existant avant le temps t. De cette manire, nous pouvons construire un arbre illustrant les dirents voyages de s aux couples (u; t). A partir de cet arbre, nous pouvons dterminer lensemble des min-sauts voyages de s u, tant donn que chaque sommet u apparat au moins

une fois dans larbre construit pour autant quun voyage existe de s u. La complexit de lalgorithme (daprs larticle [3]) est O(M dlogE ) si G est connexe, o d est lexcentricit de s. Si G nest connexe, alors la complexit est de O(N M logE ) . Les plus rapides voyages Nous souhaitons minimiser la dure du voyage. Atteindre lobjectif nest pas simple. Dune part, il est possible quun voyage plus rapide apparaisse au cours du temps. Dautre part, la dure dune partie dun voyage ne dtermine pas la dure du voyage tout entier. De fait, une attente prolonge en un sommet peut tre avantageuse, si elle est rentable par rapport au gain de temps obtenu lors du parcours des artes. Lalgorithme procde saut par saut, dont le nombre k est born par N . Pour toute valeur k possible, on constitue une liste des voyages de longueur k , dmarrant dun sommet s. Cette liste est construite partir de celle des voyages constitus de k 1 sauts. De fait, on tend chacun de ces voyages k sauts, cest--dire en leur ajoutant une arte. Pour ce faire, on examine chaque arte du graphe volutif, an de dterminer les voyages tendus qui peuvent contenir larte courante. Ces voyages constituent la liste des voyages de k sauts. La N -ime liste contient les voyages de N sauts, parmi lesquels certains sont des plus rapides voyages. Ds lors, il sura de les identier au sein de la liste. La complexit de cet algorithme (daprs larticle [3]) est borne O(N M 2 E ).

1.3

Les arbres volutifs

La notion darbre volutif nest pas aise dvelopper tant donn quil est dicile dexprimer la connexit dun graphe volutif. Nous exprimons cette notion dune manire proche de celle dun arbre de recouvrement traditionnel, tant donn quon souhaite souligner le fait quun arbre est une structure qui minimise la connexit dun graphe. Pour ce faire, il nous faut dnir ce quest un sous-graphe volutif. Dnition 1.8 (Sous-graphe volutif). Soit un arbre volutif G = (G, SG , ST ). Le graphe volutif G = (G , SG , ST ) est un sous-graphe volutif de G , si G est un sous-graphe de G et sil existe une fonction monotone f : N N tel que pour tout i, Gi est un sous-graphe de Gf (i) et [ti1 ; ti [ [tf (i1) ; tf (i) [. Ds lors, on peut dnir lhomologue temporel de larbre de recouvrement. Dnition 1.9 (Arbre volutif de racine r dans un graphe volutif G ). Soit un sommet s V . Un arbre volutif de racine r dans un graphe volutif G est un sous-graphe volutif Gr G : tel que Gr est un arbre ; tel que chaque arte a exactement un intervalle de prsence ; tel quil existe un voyage de r chaque sommet de larbre. On dit que larbre volutif de racine r est un arbre de recouvrement sil contient tous les sommets de V . Par consquent, un arbre volutif de racine r minimise la complexit spatiale du graphe, tant donn que larbre permet la diusion partir de r via des artes dactivit unitaire. Ainsi, un arbre volutif de racine r permet de dnir le temps de diusion dinformations dans le graphe volutif quil recouvre. Cest pertinent, puisque ce type darbre est compos de premiers voyages. Finalement, il est vident que le graphe qui en contient un autre a un cot plus important que celui de son contenu. 3

Le plus court chemin [2]

Nous venons de dnir les concepts lis aux parcours dans un graphe volutif. Nous avons notamment vu quun chemin dun sommet un autre ncessite un voyage dans lespace et dans le temps, car les artes parcourues ne sont pas ncessairement actives pendant toute la dure du parcours. Nous avons galement vu quil existait deux manires doptimiser un parcours dun sommet un autre : soit on souhaite minimiser la dure du trajet, soit on souhaite que linformation arrive le plus tt possible destination (le min-saut voyage est un cas particulier du voyage le plus rapide) 1 . Les solutions de ces deux problmes sont implmentes par des algorithmes dirents. Dans ce chapitre, nous tablissons un algorithme calculant partir dun sommet le plus court chemin (en dure) vers chacun des autres sommets. Nous conrmerons que lalgorithme de Dijkstra ne peut pas tre utilis dans le cas volutif. Lutilit du calcul du chemin le plus rapide transparat dans lapplication suivante. Le rseau du transport arien mondial peut tre peru comme un vaste graphe volutif dont les sommets sont les aroports et les artes sont les vols. Comme il nest pas possible de prendre un avion nimporte quel moment, il sagit bien dun graphe volutif. Lorsquun voyageur cherche se rendre dun aroport un autre, le rle de son agence de voyage est de trouver le trajet le plus rapide entre les deux villes 2 . Plus les deux villes sont loignes et moins les aroports sont importants, plus le voyage ncessite descales. Lagence est donc amene trouver le plus court chemin entre le point de dpart et la destination dans un graphe volutif. Elle devra tenir compte des heures de dpart et de la dure totale de chaque vol pour assurer au voyageur quil aura le temps de passer dun vol lautre.

2.1

Hypothses

Avant dlaborer un algorithme du plus court chemin, plusieurs hypothses peuvent tre formules propos des caractristiques dun graphe volutif. Ces dirents scnarios donnent lieu des algorithmes spciques, nous en dcrivons trois dans cette section. Dans chaque algorithme, nous associons chaque sommet une liste dadjacence, cest--dire une liste donnant lensemble des voisins de ce sommet et les pas de temps o ceux-ci sont connects. Pour plus de clart, nous considrerons que le calcul du plus court chemin consiste transporter une information dun sommet tous les autres sommets en un temps minimal. Les dirences entre les scnarios dcrits ci-dessous portent sur les deux points suivants : le nombre de pas de temps mis par une information pour traverser une arte (le cot de larte) ou le nombre dartes qui peuvent tre traverses en un pas de temps.

2.2

Algorithmes

Intervalle de prsence unitaire Nous mettons les hypothses suivantes : les cots (nombre de pas de temps pour traverser une arte) valent tous 1 ; il y a conservation de linformation : si un sommet disparat et rapparat ensuite, il contient toujours les informations reues prcdemment ;
1. Nous ne traiterons pas le cas de la minimisation du cot du trajet (en connaissant le cot de chaque arte). 2. En pratique, il est galement question de cot des billets davion. Mais nous ne considrerons pas ce cas.

linformation ne peut traverser plus dune arte en un mme pas de temps ; Lalgorithme se dcrit de la faon suivante : On cherche itrativement le plus court chemin de a vers chacun des autres sommets. On insre les sommets au fur et mesure quils sont parcourus dans un arbre de plus court chemin. Algorithme 2.1. 1. Initialiser les distances : d(a) = 0 et d(v ) = v = a. Initialiser Q, une liste classe par ordre croissant de la racine root(Q) au sommet : Q = (, d() = )|(a, d(a) = 0). Initialiser i 0 (i reprsente lvolution des pas de temps) 2. While d(root(Q)) = do (a) While d(root(Q)) = i do i. Extraire x, le sommet root(Q) ii. Supprimer root(Q) iii. Parcourir la liste dadjacence de x, et pour tout voisin v calculer fa (v ) (le premier temps suprieur ou gal i+1 o v est accessible partir de x) iv. Insrer v dans Q sil ny tait pas dj v. Si fa (v ) < d(v ) alors mettre jour d(v ) avec fa (v ) et mettre jour la position de v dans Q. vi. Fermer x, linsrer dans larbre de plus court chemin. (b) Passer au pas de temps suivant : i i + 1 La variable fa (v ) indique le premier pas de temps o le sommet a peut transmettre son information au sommet v . Par consquent, si en un sommet x, on obtient pour un voisin v , fa (v ) > i + 1, linformation stationne en x pendant un temps fa (v ) (i + 1) avant dtre transmise v . La complexit de cet algorithme est la suivante. Soient N le nombre de sommets, M le nombre dartes et T le nombre de pas de temps. Pour un sommet v , on parcourt ses d+ (v ) voisins, on dtermine pour chacun le premier pas de temps o il est connect v et enn on lintroduit dans Q en respectant lordre de classement des sommets dans Q. Pour chaque sommet v , si on utilise un algorithme de recherche ecace, cela demande O(log (T ) + log (N )) oprations. Le nombre total doprations est donc O( vV d+ (v )(log (T ) + log (N ))) ou encore O(M (log (T ) + log (N ))). Nous avons implment lalgorithme en utilisant le langage JAVA. Le code et la description de chaque classe sont fournis en annexe. Le programme principal (cf. Implmentations A.1) fonctionne comme suit. Les sommets du graphe sont numrots de 0 N 1. Les paramtres du programme sont le numro du sommet racine ( partir duquel on dtermine les chemins) et un tableau contenant pour chaque sommet la liste de ses voisins et la liste des pas de temps durant lesquels ils sont connects. Le programme renvoie une liste chane contenant chaque sommet, le pas de temps durant lequel il reoit linformation et le sommet qui lui transmet linformation. Pendant que le programme est en cours dexcution, une liste chane Q reoit ou perd des sommets chaque itration (conformment la description de Q dans lalgorithme 2.1). Limplmentation a ncessit la dnition de plusieurs classes (outre celle rsolvant le problme) : des classes permettant la cration et lutilisation des listes chanes et une classe

dnissant un sommet dans larbre de plus court chemin (on lui associe trois variables dinstance : son label, le temps o il reoit linformation et le sommet qui lui transmet linformation). Ci-dessous, nous donnons un graphe (celui de gauche) ainsi que son arbre de plus court chemin (celui de droite) en partant du noeud 1. Les chires cts de chaque arte reprsentent les pas de temps durant lesquels cette arte est active. Ce graphe peut reprsenter un rseau daroports (par exemple lchelle dun pays) utilis par une agence de voyage pour dterminer le premier trajet permettant daller de laroport 1 un autre aroport.

1
1 2 3 1

1
2

2
2

3
4

2
2

3
4

Cet algorithme peut tre tendu pour des cas plus gnraux dcrits ci-aprs. Parcourir plusieurs artes en un pas de temps Relaxons lgrement le problme prcdent en permettant une information de traverser k arcs en un pas de temps. Cest le cas lorsque le temps mis par linformation pour traverser une arte est court par rapport la dure de vie de larte. On observe cela notamment dans le domaine de la communication entre satellites LEO (dont nous reparlerons dans la section 5). On modie lalgorithme 2.1, en associant chaque sommet v visit une variable n donnant le nombre dartes visite avant v au cours dun mme pas de temps. Tant que cette variable v na pas atteint k , il est toujours possible datteindre un autre sommet au cours du mme pas de temps. Concrtement, cela signie quon change seulement les points suivants dans lalgorithme du plus court chemin : Algorithme 2.2. 1. Initialiser n(v ) = 0v V et Q = (dummy, d(dummy ) = , n(dummy ) = 0)|(a, d(a) = 0), n(a) = 0) 2. on ne modie que les points 2(a)iii et 2(a)iv de lalgorithme 2.1 : pour tout voisin v de x, on calcule fa (v ) de la faon suivante et on met ensuite jour d(v), key(v) et n(v) : Si n(x) < k alors on cherche fa (v ), le premier temps suprieur ou gal i, o x et v sont connects. On met jour les autres variables : si fa (v ) < d(v ) alors on met jour d(v ) avec fa (v ) et n(v ) avec n(x) + 1. Enn, on met jour la position de v dans Q. Si n(x) = k alors on cherche fa (v ), le premier temps suprieur ou gal i + 1, o x et v sont connects. On met jour les autres variables : si fa (v ) < d(v ), alors mettre jour d(v ) avec fa (v ) et n(v ) avec 1. Enn, on met jour la position de v dans Q. La complexit de lalgorithme 2.2 est identique celle de lalgorithme 2.1. Limplmentation ne demande quune modication mineure du programme prcdent A.1. 6

Parcourir une arte en plusieurs pas de temps Supposons prsent que parcourir une arte prenne un nombre entier de pas de temps, not c(u, v ). Il faut donc veiller ce quaucune arte ne disparaisse lorsquune information la parcourt. En pratique, cette situation rete mieux le travail dune agence de voyage que lalgorithme 2.1 car il tient compte du fait que la dure de chaque vol peut-tre dirente. On tend lalgorithme 2.1 en apportant les modications suivantes : Algorithme 2.3. 1. Initialisation : si, dans la liste dadjacence dun sommet, la connexion avec un voisin dure un laps de temps infrieur au cot de larte qui les connecte, alors on supprime cette connexion de la liste dadjacence. 2. On ne modie que les points 2(a)iii et 2(a)iv de lalgorithme 2.1. Pour tout voisin v de x, + (v )], (v ); fa on met jour d(v ) de la faon suivante : on cherche un intervalle de temps [fa + o v et x sont connects et qui ralise minfa (v ) tel que fa (v ) i + 1 et fa (v ) fa (v ) c(u, v ). Si on trouve un tel intervalle de temps, alors on met jour les autres variables : Si fa (v ) + c(u, v ) < d(v ) alors mettre jour d(v ) avec fa (v ) + c(u, v ). Enn, on met jour la position de v dans Q. La complexit de lalgorithme 2.3 est identique celle de lalgorithme 2.3 (Ltape dinitialisation ne demande quun temps O(M )).. Limplmentation ne demande quune modication mineure du programme prcdent (cf. Implmentations A.1) : en traversant une arte, linformation natteint pas le sommet destinataire un pas de temps plus tard, mais bien un temps x c(u, v ) plus tard.

Connexit travers le temps

Dans cette section, nous dnissons dabord les concepts lis la connexit dans le cas dynamique. Ensuite, nous voyons comment vrier la connexit forte dun graphe volutif. Enn, nous discutons de la procdure qui identie les composantes connexes travers le temps.

3.1

Dnitions [3]

On se souvient que la connexit dans un graphe traditionnel sexprime par le fait quon peut atteindre partir de nimporte quel sommet du graphe, tous les autres sommets de ce mme graphe. Cependant, dans un graphe volutif, la notion de connexit se complexie vu le caractre dynamique de la gomtrie du graphe. Par consquent, on prfrera parler de connexit-temporel. Dnition 3.1 (Connexit-temporel). Un graphe volutif est connexe-temporel, sil existe des voyages dans G pour tout couple de sommets de VG . Par abus de langage, nous appellerons graphe volutif fortement connexe tout graphe connexe-temporel. Gnralement, nous souhaitons avoir la plus grande composante connexe dun graphe volutif. De fait, imaginons un projet sur lequel deux compagnies travaillent en partenariat. Les compagnies souhaitent voir un maximum de ses employs collaborer les uns avec les autres, aussi bien inter que intra compagnie. Cette collaboration peut tre directe ou indirecte, cest-dire quun employ travaille soit directement avec les autres, soit il ne travaille pas directement 7

avec certains employs, mais alors il travaille avec des employs qui eux travaillent directement ou indirectement avec ces employs. Evidemment, un employ ne peut pas travailler simultanment avec tout le monde tant donn les horaires varis des employs. Cette situation peut tre reprsente au moyen dun graphe volutif, o les sommets reprsentent les employs des deux compagnies et les artes signient que les employs correspondant travaillent directement durant lintervalle de prsence de larte. Le souhait des compagnies de voir linteraction maximise consiste en la composante maximale connexe-temporel. Dnition 3.2 (Composante maximale connexe-temporel (MTCC)). Ensemble reprenant un maximum de sommets UG VG , tel que pour toute paire u, v UG , il existe un voyage de u v et un voyage de v u, en utilisant uniquement des sommets UG . Par abus de langage, nous parlerons de composante fortement connexe dun graphe volutif pour dsigner une composante connexe maximale de ce graphe. Maintenant, imaginons quune des deux entreprises souhaite mettre en vidence la collaboration directe et indirecte de ses propres employs. Ds lors, on considre que la collaboration indirecte peut seectuer via des employs de lautre entreprise. Cette mise en vidence correspond la composante maximale ouverte connexe-temporel de lensemble des employs des deux compagnies restreint une des deux compagnies. Dnition 3.3 (Composante maximale ouverte connexe-temporel (o-MTCC)). Ensemble reprenant un maximum de sommets UG VG , tel que pour toute paire u, v UG , il existe un voyage de u v et un voyage de v u utilisant uniquement des sommets de VG . On constate quil y a deux types de composante maximale connexe travers le temps, ce qui nexiste pas dans le cas statique. Dans les sous-sections 3.2 et 3.3, nous nous intressons deux problmes lis la connexit : prouver quun graphe volutif est fortement connexe et trouver lensemble de ses composantes fortement connexes maximales. Contrairement au cas statique, ces deux problmes ne peuvent tre traits simultanment, car le premier peut tre rsolu en un temps polynomial, alors que le second est NP-complet. Nous navons pas analys le problme de la dtermination des composantes connexes temporelles ouvertes, mais une dmonstration plus gnrale montre quil sagit galement dun problme NP-complet.

3.2

Vrier la connexit forte [1]

Proposition 3.1. Soit un graphe volutif G compos de N nuds et M sommets, dni sur une squence ordonne de T instants. Il existe un algorithme de complexit O(N M (log(N )+log(T )) dmontrant si ce graphe est fortement connexe ou non. Dmonstration Pour chaque sommet du graphe, on applique lalgorithme du plus court chemin de complexit O(M (log(N ) + log(T )). Si partir de chaque sommet, tous les autres sommets sont accessibles, le graphe est fortement connexe. La complexit de cet algorithme est de O(N M (log(N ) + log(T ))). Illustrons cette proposition par une application. Revenons au problme du voyageur en avion (expos la section 2). On peut vrier en un temps polynomial si le graphe volutif form par lensemble des aroports et des vols est fortement connexe. Si cest le cas, partir de nimporte quel aroport, le voyageur peut eectuer un parcours de lensemble des aroports en ne passant quune seule fois par chaque aroport. Si le graphe nest pas fortement connexe, il est intressant pour le voyageur de connatre les composantes fortement connexes. Nous dmontrons que ce problme est NP-complet. 8

3.3

Identier les composantes connexes [1]

Dans le cas statique, il existe un algorithme polynomial pour dterminer lensemble des composantes fortement connexes dun graphe orient. A partir dun sommet v , on eectue une exploration du graphe (en largeur ou en profondeur) et on note lensemble V1 des sommets accessibles partir de v . Ensuite, on inverse le sens de chaque arte du graphe et on eectue nouveau une exploration du graphe partir de v et on note V2 lensemble des sommets partir desquels on peut accder v . V1 V2 est une composante fortement connexe du graphe. On comprend facilement que cet algorithme nest pas gnralisable au cas des graphes volutifs, car les artes ne sont pas toutes actives durant les mmes intervalles de temps. Ainsi, sil existe un voyage dun sommet v un sommet u dans un graphe G , il nexiste pas forcment un voyage de u v dans le graphe form en inversant le sens de chaque arte de G et en conservant les mmes squences de temps de prsence. Pour dmontrer que ce problme est NP-complet, on dmontre quun problme de dcision P1 est NP-complet, avec P1 dnit de la faon suivante : tant donn un graphe volutif G = (VG , EG ) et un entier k , existe-t-il une composante fortement connexe de G contenant k sommets ? Thorme 3.1 (P1 est dans NP). P1 est dans NP cest--dire qutant donn un sous-graphe de G = (VG , EG ), on peut dterminer en un temps polynomial si ce sous-graphe est solution de P1 . Dmonstration : La vrication est immdiate. Soit G = (VG , EG ) un candidat de solution de P1 avec VG un sous-ensemble de lensemble VG des sommets de G et EG lensemble des artes de EG liant deux sommets de VG . On vrie en un temps polynomial que |VG | = k . Ensuite, comme dans le cas de la dmonstration de la proposition 3.1, on dmontre en utilisant un algorithme polynomial si G est bien fortement connexe. Enn, pour chaque sommet v VG \VG , on construit un graphe partir de G en lui ajoutant le sommet v et toutes les artes liant v un sommet de VG ; on dmontre ensuite en utilisant lalgorithme polynomial du plus court chemin que chacun de ces graphes nest pas fortement connexe. G est donc bien une composante fortement connexe maximale de G . Nous dnissons le graphe daccessibilit de G comme un graphe non dirig AG = (VA , EA ) avec VA = VG et EA contenant lensemble des artes (vi , vj ) de EG telles quil existe un voyage dans G de vi vj et de vj vi . Nous dnissons galement un nouveau problme P2 : tant donn un graphe statique non orient G = (V, E ), existe-t-il une clique contenant k sommets dans G ? Lemme 3.1 (Equivalence des problmes). Les deux problmes suivant sont quivalents : existet-il une composante fortement connexe contenant k sommets dans G et existe-il une clique contenant k sommets 3 . (sachant que le problme P2 est NP complet 4 ). Dmonstration : ceci dcoule directement de la dnition dAG , sil existe une clique dans AG alors, dans G , il existe un voyage entre chacun des sommets de cette clique et vice-versa.

3. Nous dnissons une clique maximale dun graphe G comme un sous-graphe complet de taille maximale de G. 4. Professeur Vincent BLONDEL, LINMA1691, cours magistral

Lemme 3.2. P2 peut tre ramen P1 en un temps polynomial. Dmonstration : Dans cette dmonstration, nous cherchons rsoudre le problme P2 sur un graphe statique G. En suivant un algorithme tabli, nous construisons un graphe volutif G partir de G en un temps polynomial et nous dmontrons ensuite que G est le graphe daccessibilit de G , ce qui achve la dmonstration. Soient un graphe statique non orient G = (V, E ) et un entier k . On construit un graphe volutif G = (VG , EG ) conformment lalgorithme suivant : i [1; |V |] N + , crer vi dans VG Pour toute arte (ui , uj ) E , crer (vi , vj ) et (vj , vi ) dans EG avec comme squences de temps de prsence tij = i + j Montrons que G est isomorphe AG , le graphe daccessibilit de G . Pour ce faire, on dmontre la proposition suivante : il existe un voyage entre vi et vj dans G si et seulement si (ui , uj ) E . Supposons que (ui , uj ) E , alors, par dnition de G , il est vident quil existe un voyage entre vi et vj dans G . Supposons rciproquement que (ui , uj ) nappartienne pas E et supposons i < j . Alors, il nexiste aucun voyage de vj vi . En eet, tant donn un sommet vp , supposons quil existe un chemin de vj vp et de vp vi . Or, j + p > i + p donc ce chemin nest pas ralisable. Il en suit que G est isomorphe AG , le graphe daccessibilit de G . Or, par le thorme 3.1, on peut trouver une clique maximale de AG , en cherchant une composante fortement connexe maximale de G . De plus, lalgorithme de construction de G partir de G est de complexit O(|E | + |V |). On a donc ramen P2 P1 en un temps polynomial. Thorme 3.2 (P1 est NP-complet). Dmonstration : P2 est un problme NP-complet 5 . Or, nous avons dmontr que P2 se ramne P1 en un temps polynomial. P1 est donc ncessairement NP-complet et nous en dduisons que trouver les composantes fortement connexes maximales de G est un problme NP-complet.

Arbre de recouvrement

Dans les sections 2 et 3, nous nous sommes successivement intresss la dtermination du plus court chemin entre deux sommets dun graphe volutif et ltude de la connexit dun tel graphe. Beaucoup de systmes de communication (tels les LEO Satellites dcrits dans la section 5) disposent de ressources nergtiques limites. Par consquent, il est intressant de minimiser lnergie totale consomme par ces rseaux. Ce problme est appel minimum energy broadcast routing (MEBR) dans un graphe : tant donn un nud-source, il sagit de trouver un sous-graphe du graphe initial, tel que lnergie totale consomme soit minimise. En gnral, rsoudre le problme MEBR revient calculer un arbre de recouvrement minimum (problme MST). Dans le cas statique, il existe des algorithmes rsolvant le problme de larbre de recouvrement minimum en un temps polynomial. Toutefois, ds que le graphe volue dans le temps, ce problme devient automatiquement NP-dicile. Dans cette section, nous expliquons dabord la relation entre les problmes MEBR et MST. Ensuite, nous dmontrons dabord que trouver un arbre de recouvrement est un problme NP-dicile. Enn, nous donnons un algorithme donnant un arbre de recouvrement minimum dun graphe fortement connexe, o le poids de chaque arte est le temps ncessaire pour la traverser.
5. Etant donn un graphe, trouver une clique maximale (au sens du nombre de sommets) du graphe fait partie des problmes NP-complets de KARP publie en 1972.

10

4.1

Optimalit dun arbre de recouvrement [4]

Pour tablir la relation entre les problmes MEBR et MST, on nonce les deux thormes suivants. Le premier thorme permet dtablir lexistence dun arbre de recouvrement minimum : Thorme 4.1. Soient un graphe volutif G et un sommet r. Sil existe un voyage de r vers chaque sommet de G , alors G contient un arbre de recouvrement. Pour sassurer que larbre de recouvrement minimum est eectivement la structure dnergie minimale rsolvant le problme MEBR, il faut que la fonction de cot respecte la proprit dinclusion suivante. (Le cot dun graphe est dni comme la somme des cots de toutes ses artes). Thorme 4.2. Soient G un graphe volutif, X un chantillon de sommets, r un nud source et c, une fonction de cot. Si G G G , on a c(G ) c(G ), alors la structure rsolvant le problme MEBR est un arbre volutif et si X contient tous les sommets de G , cest un arbre volutif de recouvrement. Si cette proprit dinclusion de la fonction de cot est vrie, il est vident que larbre de recouvrement est la structure minimale recherche. En eet, si on obtient un sous-graphe qui nest pas un arbre, il est toujours possible de rduire son cot en supprimant au moins une de ses artes. La proprit dinclusion de la fonction de cot est vrie dans la plupart des applications. Un cas o elle ne se vrie pas est, par exemple, le cas dun graphe dont les poids des artes peuvent tre ngatifs.

4.2

Trouver un arbre de recouvrement : un problme NP dicile [4]

Il est facile de trouver un arbre de recouvrement dun graphe volutif. En eet, comme nous le montrerons ultrieurement, il existe un algorithme fournissant, en un temps polynomial, un arbre de recouvrement minimum au sens temporel. Nanmoins, en gnral, dterminer un arbre de recouvrement minimum dun graphe volutif est un problme NP-dicile. Pour le dmontrer, nous ramenons le problme de larbre de Steiner ce problme et nous utilisons le fait que larbre de Steiner est un problme NP-complet connu. Nous nous concentrons sur le cas o le parcours dune arte ncessite un pas de temps. Dnissons le problme dcisionnel P1 de la faon suivante : tant donn un graphe volutif G = (VG , EG ), une fonction donnant le cot de chaque arte, un sommet-racine r et un naturel k, existe-t-il un arbre de recouvrement de G de racine r et de poids infrieur ou gal k ? Dnissons galement le problme P2 de la faon suivante : tant donn un graphe G = (V, E ), une fonction donnant le cot de chaque arte, un ensemble de sommet X V et un naturel k, existe-t-il un arbre de Steiner de poids infrieur ou gal k contenant tous les sommets de X (cest--dire un arbre contenant tous les sommets de X et ventuellement des sommets de V \X ) ? Lemme 4.1. P2 peut tre ramen P1 en un temps polynomial. Dmonstration Soit un graphe statique G = (V, E ) (si le graphe est non-dirig, on ddouble chaque arte pour en faire un graphe dirig). Une fonction de cot c donne le cot de chaque arte. On extrait un ensemble de sommets X V . Nous cherchons un arbre de Steiner minimum contenant lensemble des sommets de X . Construisons un graphe volutif G de la faon suivante.

11

1. y V \X , on cre deux sommets y et y . On dnit Y = {y : y Y }, Y = {y : y Y } et VG = V Y Y . 2. Pour tout couple y , y associ un sommet y et pour tout x V , on cre trois artes (x, y ), (y , y ) et (y , y ) de poids nul. On dnit ainsi EG = E X Y Y Y Y Y . 3. On dnit des squences de temps de prsence pour chaque arte : chaque arte de E est active durant [2, |V | + 2], chaque arte de X Y est active durant [0, 1], chaque arte de Y Y est active durant [1, 2] et chaque arte de Y Y est active durant [|V | + 1, |V | + 2]. On a donc dni G = (VG , EG ) dont la fonction de cot c est dnie en ajoutant c le poids (nul) des artes nouvellement cres. En supposant X non-vide, slectionnons arbitrairement un noeud r X . Il existe un arbre de recouvrement de G , de source r et de poids infrieur ou gal k si et seulement sil existe un arbre de Steiner dans G, de poids infrieur ou gal k et contenant tous les sommets de X . En eet, supposons que lon dispose dun arbre de recouvrement de TG = (VG , ETG ), on construit alors un arbre statique T = (VT , ET ) avec VT obtenu en supprimant dans VT G les sommets de Y et Y et ET obtenu en supprimant dans ETG les artes dont une extrmit est dans Y ou Y . On dmontre deux rsultats : T est un arbre : Quel que soit le triplet y, y , y , comme il nexiste quun chemin pour atteindre ces sommets partir de r, cela implique que (r, y ), (y , y ) ETG . De plus, si (y , y ) ETG tout autre arte dextrmit y est superue et nappartient donc pas ETG . Enn, si (y , y ) ETG alors il nexiste pas darte (y, v ) pour v V . En eet, comme (y , y ) est active sur [|V | + 1, |V | + 2], une information diuse partir de r natteint y quau temps |V | + 2 et ne peut donc pas tre transmise un autre sommet v V via y . T est de poids infrieur k : comme les artes supprimes sont de poids zro, T est aussi de poids infrieur ou gal k . Supposons rciproquement que lon dispose dun arbre de Steiner de G, not T = (VT , ET ), de poids infrieur ou gal k et contenant tous les sommets de X . On construit un arbre de recouvrement de G de racine r de la faon suivante : TG = (VG , ETG ) tel que ETG contient toutes les artes de ET ainsi que les artes {(s, y ) : y Y } {(y , y ) : y Y } {(y , y ) : y / VT }, ces artes tant dnies sur les mmes intervalles de temps que dans G . Le graphe TG est bien un arbre et il est bien de poids infrieur ou gal k car les artes ajoutes sont de poids nul. Thorme 4.3. Etant donn un graphe volutif G = (VG , EG ) et une fonction donnant le cot de chaque arte, le problme qui consiste trouver un arbre de recouvrement minimum de G est un problme NP-dicile. Dmonstration : Cest une consquence directe du lemme 4.1 en sachant que le problme P2 est NP-complet.

4.3

Algorithme de larbre de recouvrement minimum [1]

Ici, nous donnons un algorithme permettant de trouver un arbre de recouvrement minimum dun graphe volutif fortement connexe, dans le cas particulier o le poids est dtermin par le temps ncessaire pour transmettre une information un sommet. Cet algorithme nest donc pas gnralisable au problme classique de larbre de recouvrement minimum, cest--dire o les cots et le temps sont totalement indpendants. Toutefois, dans de nombreuses situations, le cot est directement proportionnel au temps, comme par exemple dans le cas des satellites 12

LEO dont nous parlerons dans la section 5. Il est alors intressant de construire un arbre recouvrant la totalit des sommets en un temps minimum. Cest ainsi que nous dnissons larbre de recouvrement minimum dans lalgorithme 4.1. Le problme sapparente donc au problme du plus court chemin trait dans la section 2, mais en ajoutant deux contraintes : le temps de traverse des artes nest pas normalis et le rseau obtenu doit tre un arbre, contrairement au problme du plus court chemin. Soit un graphe volutif fortement connexe G = (VG , EG ). On cherche N (= |VG |) arbres de recouvrement minimum de racine r pour chaque r VG . Les pas de temps sont normaliss et valent tous 1. On suppose connue la squence des temps de prsence de toute arte : un temps de prsence i associ une arte indique que larte est prsente du temps i 1 au temps i. Le poids w(ui , uj ) dune arte (ui , uj ) reprsente le temps ncessaire pour parcourir une arte et est suppos infrieur 1, pour quune arte ne disparaisse pas pendant la transmission dune information. Pendant lexcution de lalgorithme, f (r) contient un sous-ensemble des artes de larbre de recouvrement recherch et f (r) est mis--jour chaque itration. Vf contient lensemble des sommets dj introduits dans larbre. Enn, chaque fois quun sommet v est visit, on lui assigne une variable tv qui indique quel moment il reoit linformation venant de la racine r. Algorithme 4.1. 1. Initialiser f(r)=, Vf = {r} et tr = 1 2. Tant que Vf = VG , faire : (a) Dnissons f comme lensemble des artes (ui , vi ) telle que ui Vf et vi Vf . Pour tout (ui , vi ) f , choisir le plus petit temps fa (ui , vi ) tui + w(ui , vi ). (b) Choisir (uj , vj ) tel que j = argmin(fa (ui , vi ) + w(ui , vi ))
i

(c) Aectation de tvj : i. si fa (uj , vj ) = tuj + w(uj , vj ), alors tvj = fa (uj , vj ) ii. sinon, si fa (uj , vj ) 1 est dans la squence des temps de prsence de (uj , vj ), alors tvj = tuj + w(uj , vj ) iii. sinon, tvj = fa (uj , vj ) 1 + w(uj , vj ) (d) Ajouter vj Vf et (uj , vj ) f(r) Le point 2c est ltape importante de lalgorithme. La premire possibilit correspond au cas o linformation arrive au sommet vj exactement au temps fa (uj , vj ). La seconde possibilit correspond au cas o larc est prsent au temps fa (uj , vj ) et au temps fa (uj , vj ) 1, alors cela signie que fa (uj , vj ) 1 tuj + w(uj , vj ) fa (uj , vj ). Ds lors, linformation atteint vj au temps tuj + w(uj , vj ). Dans les autres cas, linformation est transmise au cours de lintervalle [fa (uj , vj ) 1,fa (uj , vj )] et parvient vj au temps fa (uj , vj ) 1 + w(uj , vj ). Si D = max d+ (v ), alors chaque pas de lalgorithme requiert O(N Dlog (T )) oprations et
v VG

on obtient donc une complexit de O(N 2 Dlog (T )). Lalgorithme est relativement similaire lalgorithme de Prim utilis pour trouver un arbre de recouvrement dun graphe statique : de la mme manire, chaque tape, on trouve une arte connectant un sommet dj prsent dans larbre de recouvrement un sommet absent de larbre de recouvrement, en vriant que cette arte est accessible au pas de temps concern. Toutefois, contrairement lalgorithme de Prim, lalgorithme 4.1 fournit un arbre de recouvrement minimum, car le temps ncessaire la traverse dune arte est directement proportionnel au poids de larte et aussi car on sest x 13

comme objectif de construire un arbre recouvrant lensemble des sommets le plus rapidement possible. Nous avons implment lalgorithme en utilisant le langage JAVA. Le code et la description de chaque classe sont fournis en annexe (voir implmentation A.2). Le programme fonctionne comme suit. Les sommets du graphe sont numrots de 0 N 1. Les paramtres sont le numro du sommet racine et un tableau contenant, pour chaque sommet, la liste de ses voisins et la liste des pas de temps durant lesquels ils sont connects. Le programme calcule lui-mme la liste arrows contenant les artes du graphe volutif [sous forme dun tableau trois entres : sommet de dpart, sommet darrive et pas de temps durant lequel larte est active (si larte est active durant plusieurs pas de temps, on la ddouble pour que chaque arte ne soit active que durant un pas de temps)]. Le programme renvoie une liste des artes visites et le pas de temps durant lequel chaque arte est parcourue de manire constituer larbre de recouvrement. Limplmentation a ncessit la dnition de plusieurs classes (outre celle rsolvant le problme) : des classes permettant la cration et lutilisation des listes chanes, une classe dnissant un sommet (on lui associe un label, la liste de tous ses voisins et les pas de temps durant lesquels ils sont connects) et une classe dnissant la liste chane arrows. Ci-dessous, nous donnons un graphe ( gauche) ainsi que le rsultat fourni par lalgorithme ( droite) en partant du noeud 1 comme racine. Un nombre dcimal est associ chaque arte : la partie entire de ce nombre reprsente le pas de temps durant lequel larte est active et la partie dcimale reprsente le poids de larte. Larbre obtenu est bien larbre recouvrant lensemble des sommets le plus tt possible dans le temps.

1
5.25 2.5 2.125 2.5

1
2.125

2
3.5

4.25 4.25 3.125

2
3.125

14

Applications

Nous prsentons ici deux exemples dapplications : les LEO Satellites et les Interactions Sociales.

5.1

LEO Satellites [6]

Revenons au problme nonc dans lintroduction et analysons le la lumire de la thorie vue dans les sections 1 4. Les satellites utiliss par les systmes de communication chelle mondiale (tlphone, internet, etc.) sont caractriss par lorbite quils dcrivent autour de la Terre : on les subdivise en direntes catgories parmi lesquelles les satellites GEO (Geostationary Earth Orbit) et LEO (Low Earth Orbit). Les satellites LEO dcrivent une trajectoire relativement proche de la surface de la Terre (de 500 2000 km daltitude). Cette proximit prsente deux avantages : lnergie ncessaire pour interagir avec le satellite est rduite et le temps de transfert dune information est trs rapide (de lordre de 20 ms, contre 240 ms pour un satellite GEO). Toutefois, cette basse altitude engendre galement des dicults de gestion du rseau : dune part, le secteur couvert par un satellite est rduit, un grand nombre de satellites est donc ncessaire, dautre part, comme ces satellites ne sont pas gostationnaires, le secteur quils survolent change constamment. Une tude topologique du rseau de communication consiste dterminer, au dpart dun utilisateur mettant une information (par tlphone par exemple), la squence de satellite optimale suivie par linformation pour atteindre nimporte quel autre point du globe. Cela exige une analyse ne de la mobilit et des densit dutilisateurs dans le rseau. La mobilit du rseau est essentiellement due la mobilit des satellites dont les positions relatives varient en fonction du temps (un satellite ne peut donc pas communiquer avec nimporte quel satellite, ni avec nimporte quel utilisateur un instant donn). Mais ce caractre dynamique est aussi d la mobilit des utilisateurs (susceptibles de voyager). Comme les trajectoires des satellites sont connues, leur mobilit est quasi dterministe, alors que la mobilit des utilisateurs est indterministe, mais nous la supposons ngligeable par rapport celle des satellites. A cause de cette mobilit du rseau, lorsquun canal de communication est ouvert entre deux utilisateurs, plusieurs transferts intercellulaires (handover) peuvent avoir lieu. Lorsquun utilisateur nest soudain plus couvert par un satellite ou lorsque celui-ci est surcharg, lutilisateur doit instantanment tre pris en charge par un autre satellite. Si le temps de transfert est trop long, cela peut occasionner des eets indsirables (coupures, communication brouille...). La densit dutilisateurs la surface de la Terre nest pas uniforme : certains secteurs de la plante prsentent une demande trs leve en canaux de communication (les zones les plus habites) et doivent donc tre desservies par plusieurs satellites en permanence. Bref, lensemble du rseau forme un vaste graphe volutif, dont les noeuds sont les satellites et les utilisateurs (ventuellement regroups). Le calcul de litinraire suivi par une information partant dun utilisateur et vers nimporte quel autre utilisateur passe par le calcul dun arbre de recouvrement. Ce calcul peut tre dcompos en deux tapes : 1. Le PRP (Probabilistic Routing Protocol) : on sait avec prcision quand les satellites peuvent entrer en communication (on connat les temps durant lesquels chaque arte est active). Par consquent, un instant donn, on peut calculer un arbre de recouvrement minimum suivant un critre choisi (par exemple minimiser le nombre de satellites 15

par lesquels linformation transite). On choisit ce critre pour que les itinraires obtenus minimisent la probabilit dun transfert intercellulaire. 2. Le HRP (Handover Rerouting Protocol) : si un transfert intercellulaire est ncessaire lensemble de larbre de recouvrement doit tre recalcul en fonction des nouvelles donnes du problme. En pratique, le graphe volue en permanence, car des utilisateurs entrent et sortent et aussi car les satellites sont en mouvement. Il faut donc continuellement mettre jour larbre de recouvrement minimum permettant aux utilisateurs dun secteur de communiquer avec lensemble des utilisateurs de la plante. Suivant le critre choisi, le calcul de cet arbre de recouvrement peut tre un problme facile rsoudre (par exemple avec lalgorithme propos dans la section 4.1 ou un problme NP-dicile.

5.2

Les interactions sociales [5]

Lorsquun groupe dindividus interagit, il est possible de dnir un ensemble de donnes. Cet ensemble peut tre caractris au moyen dun graphe volutif. En fait, nous mettons en vidence le fait que dirents individus interagissent dune quelconque manire. Par exemple, nous pouvons imaginer une interaction de type bluetooth : les individus peuvent tre en dplacement ; toutefois, ils peuvent eectuer des changes avec dautres, lorsquun interlocuteur potentiel est susamment proche. Ainsi, les individus sont reprsents par des sommets mobiles et les interactions entre eux sont mises en vidence par des artes dactivit correspondant la dure de leur dialogue. On peut largir cette analyse primaire trois cas : interaction proximit, simultane et rgulire, interaction proximit, simultane et temporaire, interaction asynchrone On constate que les deux premiers cas ncessitent une synchronisation des interactions qui doivent se drouler lorsque les interlocuteurs sont susamment proches. Le dernier cas est asynchrone, ce qui permet aux individus dinteragir grande distance, de manire dire. Nous illustrons ces trois cas respectivement via les rseaux Reality Mining (not MN), Infocom (not IF) et Facebook (not FB). En 2004, de juin dcembre, le MIT a souhait analyser les interactions entre ses dirents intervenants, professeurs, assistants et tudiants. Lanalyse issue de MN sest eectue au moyen du bluetooth activ sur les tlphones mobiles selon des intervalles rguliers de 5 minutes. La situation est reprsente par un graphe volutif, dont les sommets pondrs, par rapport au nombre dinteractions, sont les tlphones et les artes expriment le fait que les tlphones sont connects via bluetooth. Cette situation est typique des interactions quotidiennes quun individu a rgulirement dans son environnement de travail. On constate quen dbut de semaine acadmique, les tudiants interagissent beaucoup avec les assistants et professeurs tandis que le week-end, ils demeurent davantage entre eux. Si on modlisait la situation au moyen dun graphe statique, on nobserverait pas de uctuation agrante au cours dune mme semaine, ni dapparition ou disparition darte. Sur un semestre, les uctuations dune semaine lautre sont faibles ; on observe davantage les variations du nombre dinteractions lors dvnements tels que les congs. Durant lanne 2006, une confrence (IF) rassemblant 78 personnes a fait lobjet de pareille analyse. Celle-ci approxime les interactions qui ont lieu lors dune runion, ce qui dire du 16

type dinteractions quon rencontre quotidiennement. Nous formulons la situation sous forme de graphe volutif, dont les sommets sont les personnes, relis par une arte sils dialoguent entre eux. On constate que les individus ninteragissent pas beaucoup lors de linscription, mais bien lors du repas. FB est un clbre rseau social qui permet ses membres dinteragir de manire simultane ou dire, et ce travers le monde. Lensemble des interactions de 100000 utilisateurs localiss Santa Barbara (CA) a t analys. Ce genre dinteractions implique un grand nombre de noeuds et a priori dartes. On remarque dans cette situation que les proprits de la structure du graphe uctuent beaucoup sur une semaine.

17

Conclusion
Tout au long de ce rapport, nous avons explor le concept de graphe volutif. Cette tude a t motive par lexistence de nombreuses situations dynamiques que nous rencontrons au quotidien. En particulier, nous nous sommes concentrs sur le transport de linformation au cours du temps, parmi des ensembles dobjets pouvant tre mobiles. Nous avons donc dbut par la prsentation des notions propres aux graphes volutifs. Cette prsentation a dni les rudiments, o la dnition de graphe volutif est tablie : il sagit de sous-graphes dnis sur des intervalles de temps. Nous avons introduit la notion de voyage au sein dun graphe volutif. Cette notion concerne les possibilits de chemins au cours du temps dans le graphe. Le concept darbre a t transpos dans le cas dynamique, dune manire relativement proche de celle dun arbre de recouvrement du cas statique. Ensuite, nous avons tudi loptimisation des voyages au sens du plus court chemin. Une particularit de cette optimisation dans le cas temporel est la possibilit doptimiser selon diffrents critres. Les hypothses de travail ont t nonces, en insistant sur la conservation de linformation au cours du temps. Cela nous a permis dlaborer trois algorithmes (2.1, 2.2 et 2.3) qui respectivement traitent Intervalle de prsence unitaire, Parcourir plusieurs artes en un pas de temps et Parcourir une arte en plusieurs pas de temps. Par aprs, on a dni la connexit-temporel. On a dailleurs constat lexistence de deux types de composantes fortement connexes : une analogue au cas statique et une autre qualie douverte. Nous avons poursuivi par lnonc et la preuve dune proposition armant lexistence dun algorithme polynomial dterminant si un graphe volutif est fortement connexe ou non. Nous avons galement dmontr que le problme didentier les composantes fortement connexes dans le cas temporel tait un problme NP-complet. Nous avons poursuivi avec le concept darbre de recouvrement, permettant de diuser linformation dun sommet source un maximum de sommets du graphe volutif. Ce type de structure graphique peut tre optimise de telle sorte quon minimise son cot. On a vu que cela tait analogue au fait de minimiser lnergie dun systme de communication. Il sagit de larbre de recouvrement minimum dont on a prouv que lidentication consiste en un problme NP-dicile. Enn, nous avons termin par la description de deux applications modlisables au moyen de la notion des graphes volutifs. Les LEO Satellites qui supportent les communications, en interagissant une faible altitude entre eux et les systmes mobiles ou xes situs au sol. Par ailleurs, nous avons constat que les graphes statiques ne permettaient pas de mettre en valeur le caractre volutif de dirents types dinteractions sociales. En annexes, vous trouverez lensemble des implmentations excutant les algorithmes renseigns. Aussi, nos rfrences bibliographiques y sont mentionnes.

Annexes

II

A
A.1

Implmentations
Le plus court chemin

ShortestPath.java

import java.lang.Number; import java.lang.reflect.Array; / Shortest Path resout le probleme du plus court chemin (premier voyage) dans un graphe evolutif (pour des couts normalises et des vitesses normalises comme deni dans la section 2). / public class ShortestPath{ private static nal int infinity = Integer.MAX_VALUE; / @pre: adj est une matrice tridimensionnelle donnant pour chaque sommet la liste de ces voisins et a quel insant ils sont connectes, k est le numero du sommet a partir duquel on veut calculer les plus court chemin. @post: renvoie l arbre de plus court chemin sous forme d une liste contenant chaque sommet, le pas de temps ou il recoit l information et le sommet qui lui transmet l information. / public static NodeStackVertex resolution(int[][][] adj,int k) throws EmptyStackException{ int n = Array.getLength(adj); int[] d =new int[n]; //initialisation des distances for(int i=0;i<n;i++){ d[i]=infinity; } d[k]=0; //Q est deni comme dans la description de l algorithme (voir section 2 du rapport) NodeStackVertex Q = new NodeStackVertex(); Q.push(new Vertex(infinity,infinity)); Vertex x = new Vertex(k,0); //Tree est l arbre de plus court chemin (rempli iterativement) NodeStackVertex Tree = new NodeStackVertex(); Tree.push(new Vertex(infinity,infinity,infinity)); Tree.push(new Vertex(k,0,infinity)); int i=0; while(x.getTime()!=infinity){

III

while(i==x.getTime()){ int time = x.getTime(); int name = x.getName(); / La premiere boucle cidessous (j) parcourt l ensemble des voisins de x. / for (int j=0;j<Array.getLength(adj[name]);j++){ int[] v = adj[name][j]; boolean found = false; int qsdfghjklm=v[0]; int fv=d[v[0]]; / La seconde boucle parcourt les pas de temps durant lesquels x et v sont connectes. / for(int l=1;l<Array.getLength(v) && !found;l++){ if(v[l]>=i+1){ found=true; fv=v[l]; } } / Miseajour (si necessaire) de la distance d(v) et de la liste Q / if(found && d[v[0]] > fv){ d[v[0]]=fv; Q.insert(new Vertex(v[0],fv)); Tree.insert(new Vertex(v[0],fv,x.getName()));// OOOOOOOOOOOOOOOOO } } x=Q.pop(); } i++; } return Tree; } }

IV

Vertex.java

public class Vertex{ private int name; private int time; private int voisin; / Constructeur classique (n itialise pas voisin) / public Vertex(int givenName,int givenTime){ name=givenName; time=givenTime; } / Constructeur classique / public Vertex(int givenName,int givenTime,int givenVoisin){ name=givenName; time=givenTime; voisin=givenVoisin; } public int getName(){ return name; } public int getTime(){ return time; } public int getVoisin(){ return voisin; } }

NodeStackVertex.java

import java.lang.Number; / La classe NodeStackVertex implemente une pile de Vertex / public class NodeStackVertex { protected NodeVertex top; // reference to the head NodeVertex protected int size; // number of elements in the stack private static nal int INFINITY=Integer.MAX_VALUE; / @pre: @post: construit une pile vide / public NodeStackVertex() { top = null; size = 0; } / @pre: @post: renvoie la taille de la pile courante. / public int size() { return size; } / @pre: @post: renvoie true si la pile est vide, false sinon. / public boolean isEmpty() { if (top == null) return true; return false; }

/ @pre: elem est un Vertex @post: elem est introduit au sommet de la pile / public void push(Vertex elem) { NodeVertex v = new NodeVertex (elem, top); // create and link in a new NodeVertex top = v; size++; VI

} / @pre: v est un Vertex et les sommets de la pile courante son classes par ordre croissant du temps ou ils recoivent l information de la racine @post: Si v n etait pas dans la pile courante, v est insere dans la pile en respectant son ordre. Si un Vertex de meme numero que v est deja dans la pile mais a un temps superieur, il adopte automatiquement le temps donne par v / public void insert(Vertex v){ if(this.size()==1){ this.push(v); } else{ NodeVertex x=top; NodeVertex y=x; Vertex topVertex=x.getElement(); if(topVertex.getTime()>=v.getTime()){ this.push(v); } else if(topVertex.getName()!=v.getName()){ while(topVertex.getTime()<v.getTime()){ y=x; x=x.getNext(); topVertex=x.getElement(); } y.setNext(new NodeVertex (v,x)); y=y.getNext(); } while(topVertex.getTime()<INFINITY){ if(topVertex.getName()==v.getName()){ y.setNext(x.getNext()); } y=x; x=x.getNext(); topVertex=x.getElement(); } } } / @pre: la pile n est pas vide @post: le premier Vertex de la pile est renvoye / public Vertex top() throws EmptyStackException { if (isEmpty()) throw new EmptyStackException("Stack is empty."); return top.getElement(); VII

} / @pre: La pile n est pas vide @post: Le premier Vertex de la pile est renvoye et supprimer de la pile. / public Vertex pop() throws EmptyStackException { if (isEmpty()) throw new EmptyStackException("Stack is empty."); Vertex temp = top.getElement(); top = top.getNext(); // linkout the former top size; return temp; } }

NodeVertex.java

/ Classe implementant les noeuds utilises par NodeStackVertex. L element de chaque noeud est un tableau de Vertex. / public class NodeVertex { // Instance variables: private Vertex element; private NodeVertex next; / Cree un noeud de reference nulle/ public NodeVertex() { this(null, null); } / Cree un noeud de sommet e et de voisin n / public NodeVertex(Vertex e, NodeVertex n) { element = e; next = n; } public Vertex getElement() { return element; } public NodeVertex getNext() { return next; } public void setElement(Vertex newElem) { VIII

element = newElem; } public void setNext(NodeVertex newNext) { next = newNext; } }

EmptyStackException.java

public class EmptyStackException extends Exception { public EmptyStackException(String string) { System.out.println(string); } }

IX

A.2

Larbre de recouvrement minimum

SpanningTreeExtended.java

import java.lang.Number; import java.lang.reflect.Array; import java.util.Arrays; / Cette classe permet de trouver un arbre de recouvrement d un graphe evolutif fortement connexe. Le poids de chaque arete est la temps necessaire a la traversee de l arete. / public class SpanningTreeExtended { private static nal int infinity=Integer.MAX_VALUE; private NodeStackArrow arrows; private int n; private Adjacency[] adj; / Constructeur classique / public SpanningTreeExtended(Adjacency[] adj,NodeStackArrow arrows){ this.adj=adj; n=Array.getLength(adj); this.arrows=arrows; } / constructeur creant la liste arrows sur simple base du tableau tridimensionnel A. / public SpanningTreeExtended(Adjacency[] adj){ this.adj=adj; n=Array.getLength(adj); arrows=new NodeStackArrow(); for (int i=0;i<Array.getLength(adj);i++){ int vertex = adj[i].getVertex(); int[][] schedule=adj[i].getSchedule(); for (int j=0;j<Array.getLength(schedule);j++){ if(schedule[j][0]!=infinity){ for (int k=0;k<Array.getLength(schedule[j]);k++){ int[] newArrow=new int[3]; newArrow[0]=vertex; newArrow[1]=j; newArrow[2]=schedule[j][k]; arrows.insert(newArrow); } } } X

} } / @pre: r est un entier representant un sommet. @post:renvoie un tableau contenant toutes les aretes necessaires pour construire l arbre de recouvrement minimum. / public int[][] resolution(int r) throws EmptyStackException{ // Permet d extraire les poids de toutes les aretes double[][] weights=Adjacency.weights(adj); //tableau ou les aretes de l arbre de recouvrement sont stockees au fur //et a mesure int[][] f = new int[n1][3]; //tableau des pas de temps ou l information envoyee par le sommet racine //arrive a chaque sommet double[] t= new double[n]; t[r]=1; //found[v] est true si v est deja dans l arbre de recouvrement boolean[] found = new boolean[n]; Arrays.fill(found,false); found[r]=true; for(int nfound=1; nfound<n;nfound++){ //permet de trouver l arete suivante la moins chere int[] result=arrows.nextArrow(found,t,weights); int uj=result[0]; int vj=result[1]; int fa=result[2]; double weight=weights[uj][vj];

if (fa==t[uj]+weight){ t[vj]=fa; } else { //renvoie true si fa(uj,vj)1 est dans la sequence des temps de presence de ( uj,vj) boolean falast=adj[uj].isLastTime(vj,fa); if(falast){ t[vj]=t[uj]+weight; } else{ t[vj]=fa1+weight; } } XI

found[vj]=true; f[nfound1][0]=uj; f[nfound1][1]=vj; f[nfound1][2]=fa; } return f; } }

Adjacency.java

import java.lang.Number; import java.lang.reflect.Array; import java.util.Arrays; / Adjacency est associe a un vecteur. weight represente le poids de l ensemble des arete dont ce sommet fait partie. Schedule represente les sequences de temps de presence de chaque arete. / public class Adjacency { private double[] weight; private int[][] schedule; private int vertex; / Constructeur Classique / public Adjacency(int vertex,double[] weight, int[][] schedule){ this.vertex=vertex; this.weight=weight; this.schedule=schedule; } / @pre: v est un sommet, t un temps @post: renvoie true si le sommet courant et v sont connectes au temps t1 / public boolean isLastTime(int v,int t){ int[] times=schedule[v]; //cette boucle parcourt la liste des pas de temps durant lesquels //le sommet courant est connecte a v. for (int i=1;i<Array.getLength(times) && times[i]<=t;i++){ if(times[i]==t){ if (times[i1]==t1){ return true; } else{ XII

return false; } } } return false; } public double[] getWeight(){ return weight; } public int getVertex(){ return vertex; } public int[][] getSchedule(){ return schedule; } / @pre: adj est un tableau de sommets representes sous la forme d objets "Adjacency" @post: renvoie le un tableau contenant les poids de chaque arete apparaissant dans les composantes de adj. / public static double[][] weights(Adjacency[] adj){ int n=Array.getLength(adj); double[][] result = new double[n][n]; for(int i=1; i<n;i++){ result[i]=adj[i].getWeight(); } return result; } }

XIII

NodeStackArrow.java

import java.lang.Number; / La classe NodeStackArrow implemente une pile contenant les aretes du graphe evolutif (sous forme d un tableau d entiers a trois entrees: sommet de depart, sommet d arrivee et pas de temps durant lequel l arete est active (si l arete est active est active durant plusieurs pas de temps, on la dedouble pour que chaque arete ne soit active que durant un pas de temps). / public class NodeStackArrow { protected NodeArrow top; protected int size; / @pre: @post: construit une pile vide / public NodeStackArrow(){ top = null; size = 0; } / @pre: @post: renvoie la taille de la pile courante. / public int size() { return size; } / @pre: @post: renvoie true si la pile est vide, false sinon. / public boolean isEmpty() { if (top == null) return true; return false; } / @pre: elem est une arete (tableau a trois composantes) @post: elem est introduit au sommet de la pile / public void push(int[] elem) { NodeArrow v = new NodeArrow(elem, top); top = v; size++; XIV

} / @pre: la pile n est pas vide @post: la premiere arete de la pile est renvoye / public int[] top() throws EmptyStackException { if (isEmpty()) throw new EmptyStackException("Stack is empty."); return top.getElement(); } / @pre: La pile n est pas vide @post: La premiere arete de la pile est renvoye et supprimee de la pile. / public int[] pop() throws EmptyStackException { if (isEmpty()) throw new EmptyStackException("Stack is empty."); int[] temp = top.getElement(); top = top.getNext(); // linkout the former top NodeArrow size; return temp; } / @pre: found contient des valeurs true ou false associee a chaque arete si found[a] est true, a a deja ete visite dans l execution du programme, si found[a] est false, a n a pas encore ete visite dans l execution du programme. t contient les temps ou chaque arete sommet est visite (si un sommet v n a pas encore ete visite, t[v]=innity. weights contient les poids de chaque arete @post: un tableau est renvoyee, donnant l arete suivante a visiter pour completer l arbre de recouvrement minimum (sommets incidents et temps au cours duquel l arete est traversee. (Voir description de l algorithme dans le rapport). / public int[] nextArrow(boolean[] found, double[] t,double[][] weights) throws EmptyStackException { if (isEmpty()) {throw new EmptyStackException("Stack is empty.");} int[] result=new int[3]; NodeArrow x=top; int[] xi=x.getElement(); double weight=weights[xi[0]][xi[1]]; Integer time=new Integer(xi[2]); if(found[xi[0]] && !found[xi[1]] && time.doubleValue()>=t[xi[0]]+weight){ result[0]=xi[0]; result[1]=xi[1]; XV

result[2]=xi[2]; int a=result[0]; int b=result[1]; int c=result[2]; int d=1; } else{ NodeArrow y=x; x=x.getNext(); while(x!=null){ xi=x.getElement(); time=new Integer(xi[2]); weight=weights[xi[0]][xi[1]]; if(found[xi[0]] && !found[xi[1]] && time.doubleValue()>=t[xi[0]]+weight ){ result[0]=xi[0]; result[1]=xi[1]; result[2]=xi[2]; y.setNext(x.getNext()); break; } y=y.getNext(); x=x.getNext(); } } return result; } / @pre: arrow est une arete et les aretes de la pile courante son classes par ordre croissant du temps ou elles sont actives @post: Si arrow n etait pas dans la pile courante, arrow est insere dans la pile en respectant son ordre. Si une arete de meme emetteur et destinateur que arrow est deja dans la pile mais a un temps superieur, il adopte automatiquement le temps donne par v et sa position dans la pile est changee en fonction de ce nouveau temps. / public void insert(int[] arrow) { if(this.size()==0){ this.push(arrow); } else{ NodeArrow x=top; NodeArrow y=x; int[] topTable=x.getElement(); if(topTable[2]>=arrow[2]){ this.push(arrow); } else{ XVI

while(topTable[2]<arrow[2] && x.getNext()!=null){ y=x; x=x.getNext(); topTable=x.getElement(); } y.setNext(new NodeArrow(arrow,x)); } } size++; } }

NodeArrow.java

/ Classe implementant les noeuds utilises par NodeArrowStack. L element de chaque noeud est un tableau reel representant une arete (sommet origine, sommet destinataire et pas de temps durant lequel l arete est active). / public class NodeArrow { private int[] element; private NodeArrow next; / Noeud d element et de voisin nuls / public NodeArrow() { this(null, null); } / Cree un noeud d element e et de voisin n/ public NodeArrow(int[] e, NodeArrow n) { element = e; next = n; } public int[] getElement() { return element; } public NodeArrow getNext() { return next; } public void setElement(int[] newElem) { element = newElem; } XVII

public void setNext(NodeArrow newNext) { next = newNext; } }

EmptyStackException.java

public class EmptyStackException extends Exception { public EmptyStackException(String string) { System.out.println(string); } }

XVIII

Bibliographie
[1] S. Bhadra and A. Ferreira. Computing multicast trees in dynamic networks using evolving graphs. INRIA, 2002. [2] A. Ferreira. On models and algorithms for dynamic communication networks : the case for evolving graphs, proceeding of 4e rencontres francophones sur les apects algorithmiques des tlcommunications, 155-161. 2002. [3] A. Ferreira. Building a reference combinatorial model for dynamic networks : initial results in elvolving graphs. INRIA, 2003. [4] A. Ferreira and A. Jarry. Complexity of minimum spanning tree in evolving graphs and the minimum-energy broadcast routing problem, in proceedings of wiopt04, modeling and optimization in mobile, ad-hoc and wireless networks. 2004. [5] V. Nicosia, J. Tang, M. Musolesi, G. Russo, and C. Mascolo. Components in time varying graphs. American Institute of Physics, 2012. [6] I. Stojmenovic. Handbook of wireless networks and mobile computing. WILEY-INTERSCIENCE, 2002.

XIX

Vous aimerez peut-être aussi