3. TENSION COMPATIBLE
 
 
Avant-propos

Le flot et la tension sont des composantes fortement couplées dans les problèmes de graphes. Cependant, alors que beaucoup d'attention est portée au flot, peu de travaux semblent s'intéresser aux problèmes de tension. Le flot permet en effet de modéliser de nombreux problèmes liés aux flux: télécommunication, transport de marchandises / de personnes... La tension est une notion beaucoup moins naturelle, mais permet néanmoins de modéliser quelques problèmes, plutôt liés à la planification de projets, au placement de dispositifs... (e.g. [Hadjiat96]). En outre, les méthodes d'optimisation de flot reposent très souvent sur un couplage des composantes flot et tension. Nous verrons au cours de notre étude que le flot joue le même rôle dans les problèmes de tension que la tension dans les problèmes de flot.

Dans la première partie, nous avons vu que les principaux problèmes de synchronisation hypermédia peuvent être modélisés comme des problèmes de tension, et plus précisément comme des problèmes de tension compatible et de tension de coût minimal. Nous allons donc tenter dans cette seconde partie de proposer différents algorithmes pour résoudre ces problèmes, discutant des avantages et défauts éventuels de chacun. Il ne faut pas perdre de vue que les méthodes que nous proposons doivent être rapides et ne doivent pratiquement pas dépasser la seconde pour permettre une réponse quasiment en temps réel.

Cet aspect est très important puisqu'il limite notre champs d'investigation. En effet, les graphes traités en synchronisation hypermédia sont relativement petits et ne dépassent pas à l'heure actuelle la centaine de noeuds. Il est alors impossible d'employer des algorithmes qui ont une bonne complexité théorique, mais qui révèlent leur efficacité sur des graphes de grande taille. Des algorithmes considérés moins efficaces en théorie peuvent tout à fait convenir, et s'avérer plus efficaces, sur des graphes de petite taille.

Les auteurs de documents hypermédia affirment actuellement qu'une centaine de noeuds suffit amplement pour les documents qu'ils souhaitent créer. Mais il est très difficile, même pour des experts, d'envisager les besoins et les possibilités futures, l'histoire de l'informatique est remplie d'exemples dans ce sens (le plus célèbre étant la phrase "640 Ko of RAM is enough"). Il est donc raisonnable de penser que si des outils efficaces de synchronisation hypermédia se répandent, la taille des documents manipulés augmentera et dépassera largement les besoins actuels. Il en existe déjà un exemple présenté dans [Vazirgiannis98] qui tente de synchroniser objets dans un film de synthèse de 90 minutes. Il est donc important de s'intéresser tout de même au comportement théorique et pratique de nos algorithmes sur des graphes de taille conséquente.

Dans les deux premiers chapitres de cette seconde partie, nous nous intéressons aux problèmes de la tension compatible et de la tension minimale sur des graphes quelconques. Cependant, il est facile de s'apercevoir, en regardant notamment les relations d'Allen, que des graphes temporels issus d'une synchronisation hypermédia sont très organisés. Une classe de graphes semble très proche de cette structure: les graphes série-parallèles. Nous consacrons donc un dernier chapitre à l'étude du problème de tension de coût minimal sur cette classe de graphes. Cependant, les graphes issus d'une synchronisation hypermédia sont légèrement moins structurés que les graphes série-parallèles. Nous proposons une approche qui permet d'optimiser la tension d'un graphe presque série-parallèle en profitant tout de même de sa structure série-parallèle.

 
INTRODUCTION
 

Avant de chercher à optimiser une tension dans un graphe, il faut déjà être capable de trouver efficacement une tension compatible. Nous rappelons tout d'abord ce problème, il s'agit de trouver une tension sur un graphe , avec et , telle que pour tout arc , , où et sont des valeurs réelles ou entières. Dans sa thèse, M. Hadjiat (cf. [Hadjiat96]) propose deux manières de résoudre ce problème. En fait, les algorithmes reposent sur deux façons différentes de trouver la tension maximale pour un arc donné, l'une se base sur des plus courts chemins, l'autre sur la recherche de cocycles. Nous proposons ici de réviser ces approches en abordant directement le problème de la tension compatible.

 
3.1. RECHERCHE D'UNE TENSION MAXIMALE SUR UN ARC
 

Nous nous intéressons tout d'abord au problème de la tension maximale. Soit un arc donné du graphe , il faut trouver la valeur maximale de la tension de l'arc, sachant que doit être compatible. En d'autres termes, nous cherchons:

 
3.1.1. Algorithme basé sur le plus court chemin
 

Nous rappelons ici l'algorithme proposé dans [Hadjiat96]. Il implique plusieurs propriétés très intéressantes et utiles pour la suite. Soit une tension compatible. Pour tout cycle , on a . Donc, pour tout cycle contenant l'arc , on peut affirmer (en prenant comme sens de parcours du cycle le sens de l'arc ):

D'où la proposition suivante.

Pour toute tension compatible et pour tout cycle contenant l'arc tel que , on a:   (3.1)

La tension maximale de l'arc est donc bornée par:

L'algorithme 3.2 présenté dans la section 3.1.2 démontre que cette borne est accessible, d'où la proposition suivante (une démonstration non constructive peut également être trouvée dans [Berge62]).

La tension maximale d'un arc est égale à:   (3.2)

Considérons un cycle contenant . Il est possible de former une chaîne de à telle que . Autrement dit, est la chaîne formée en enlevant du cycle . Appelons capacité de la valeur (attention, dans la chaîne les arcs sont dans le sens opposé à celui qu'ils ont dans le cycle). Ainsi, la proposition 3.2 peut s'énoncer de la manière suivante.

La tension maximale sur l'arc est égale à la capacité minimale des chaînes allant de à .   (3.3)

Trouver la tension maximale d'un arc consiste donc à trouver une chaîne de capacité minimale entre et . L'idée ici est de transformer le graphe en un graphe de manière à ce que la recherche d'une chaîne de capacité minimale dans se traduise par une recherche d'un plus court chemin dans pour laquelle de nombreux algorithmes existent déjà. La transformation est illustrée par la figure 3.1. Il s'agit de dédoubler chaque arc en deux arcs et porte la distance et la distance .

 
Figure 3.1: Transformation d'une chaîne maximale en un plus court chemin.

En résumé, se construit de la manière suivante, étant la fonction de distance sur les arcs.

Certaines distances dans sont négatives. Il serait donc possible de rencontrer des circuits de longueur négative, i.e. la somme des distances des arcs sur le cycle serait négative. Il serait alors impossible de déterminer un plus court chemin. Dans notre cas, nous pouvons démontrer la proposition suivante.

Il existe une tension compatible sur le graphe si et seulement si:
  (3.4)

Preuve:
() Soit une tension compatible. D'après la proposition 3.1, pour tout cycle de et un arc , on a: . Comme est compatible, on a . D'où , donc .
() Supposons qu'il n'existe pas de tension compatible. En utilisant la définition de la tension à partir de la matrice d'incidence et du potentiel , cela signifie que le système suivant n'a pas de solution.

D'après le théorème de Fourier-Motzkin (cf. [Mangasarian69]), un système linéaire n'a pas de solution si et seulement s'il existe une dépendance linéaire des équations du système donnant une conséquence fausse (i.e. une relation linéaire des équations qui ne peut jamais être satisfaite). Pour notre système , cela signifie qu'il existe un flot et deux vecteurs et tels que et . En utilisant la décomposition d'un flot sur une base de cycles , il existe donc un cycle de tel que .

La détection d'un cycle négatif lors de la recherche d'un plus court chemin indique alors qu'il n'existe pas de tension compatible dans le graphe . Pour déterminer la tension maximale d'un arc, M. Hadjiat propose donc l'algorithme 3.1.

Algorithme 3.1: tensionMaximaleChemin( arc ,
  graphe ,réel )
  ; ;
 
 pour tout faire
   ; ; ;
   ; ; ;
 fin pour;
 
  ;
 plusCourtChemin(,,,,); /* Au retour est un plus court chemin. */
  longueur();
fin algorithme;

Cette procédure nécessite un algorithme de plus court chemin qui manipule des longueurs négatives et prend en compte les circuits, ce qui exclut les algorithmes de label-setting (cf. [Ahuja93]) comme celui de Bellman (à cause des circuits) et celui de Dijkstra (à cause des valeurs négatives). Dans [Hadjiat96], M. Hadjiat opte donc pour un algorithme de label-correcting comme celui de Bellman et Ford qui s'exécute en opérations (cf. [Ahuja93]) et qui détecte les cycles négatifs. Cet algorithme peut être trouvé dans l'annexe.

 
3.1.2. Algorithme basé sur le cocycle augmentant
 

L'algorithme présenté ici est extrait de [Hadjiat96]. Il introduit un mécanisme intéressant pour manipuler et modifier une tension. Considérons un cocycle qui sépare l'ensemble de noeuds du reste du graphe. Si on diminue de la tension des arcs du cocycle dans le sens vers et si on augmente de la même valeur la tension des arcs du cocycle dans le sens vers , les valeurs obtenues définissent toujours une tension. En effet, au niveau des potentiels, cela revient à augmenter de tous les potentiels de : les tensions des arcs dans le sous-graphe engendré par ne changent pas, seules les tensions sur le cocycle changent. (Notons qu'un phénomène similaire peut être constaté en modifiant le flot des arcs d'un cycle : en augmentant par exemple le flot des arcs de et en diminuant le flot des arcs de , la conservation des flots est toujours assurée dans le graphe.)

 
Figure 3.2: Modification de la tension sur un cocycle.

Ainsi, de manière générale, si l'on veut augmenter la tension d'un arc , il suffit de rechercher un cocycle pour lequel tous les arcs du cocycle dans le même sens n'ont pas atteint leur capacité maximale (i.e. ) et tous les arcs du cocycle dans le sens opposé n'ont pas atteint leur capacité minimale (i.e. ). [Hadjiat96] propose donc de rechercher un tel cocycle en utilisant l'algorithme basé sur le lemme de Minty avec la coloration suivante.

  • Tout arc tel que est noir.
  • Tout arc tel que est bleu.
  • Tout arc tel que est rouge.
  • Tout arc tel que est vert.

On s'aperçoit alors que si l'algorithme détecte un cocycle avec cette coloration, la tension de peut être augmentée. Si un cycle est obtenu, alors il vérifie et , ce qui signifie que ce cycle correspond à une chaîne de capacité minimale pour . [Hadjiat96] propose donc l'algorithme 3.2 pour déterminer une tension maximale pour un arc donné.

Algorithme 3.2: tensionMaximaleCocycle( tension ,arc ,
  graphe ,réel )
 /* La tension doit être compatible. */
 colorer les arcs de ;
 cycleMinty(,,,);
 
 tant que cocycle faire
   ;
   ;
  colorer les arcs de ;
  cycleMinty(,,,);
 fin tant que;
 
  ;
fin algorithme;

Après une augmentation de la tension sur un cocycle , au moins un arc devient saturé, i.e. ou . Cet arc devient alors noir ou bleu et permet au prochain appel à la recherche d'un cocycle de marquer un noeud de plus. Ainsi un cycle est détecté au plus en itérations. La partie principale de l'algorithme s'exécute donc en opérations, la partie qui établit une tension compatible n'étant pas comptée.

 
3.2. RECHERCHE D'UNE TENSION COMPATIBLE
 

[Hadjiat96] propose deux algorithmes pour trouver une tension compatible qui reposent sur les deux méthodes de recherche de tension maximale exposées précédemment. Nous présentons ici ces deux algorithmes avant de proposer deux variantes qui abordent directement le problème de la tension compatible.

 
3.2.1. Algorithme basé sur le plus court chemin
 

Ce premier algorithme repose sur la proposition suivante.

Soit une tension compatible pour laquelle pour un arc donné . Si est la chaîne de capacité minimale reliant les deux extrémités de cet arc, on a: et   (3.5)

Preuve:
étant compatible, . Si forme à lui seul la chaîne minimale, la preuve est évidente. Sinon, on a . La soustraction des deux équations entraîne . étant compatible, tous les termes de la somme sont positifs ou nuls, et donc avec l'équation ils ne peuvent être que nuls.

Cette proposition permet d'affirmer que si l'on restreint l'intervalle de tension sur les arcs d'une chaîne minimale à pour tout arc et à pour tout arc , alors il existe quand même une tension compatible sur le graphe. D'où l'algorithme 3.3 qui détecte une chaîne minimale, restreint les intervalles sur la chaîne et recommence jusqu'à ce que tous les intervalles de tension soient des singletons.

Algorithme 3.3: tensionCompatibleChemin(graphe ,tension )
 tant que tel que faire
  sélectionner un tel arc ;
  trouver chaîne minimale de à ; /* Cf. algorithme 3.1. */
 
  pour tout faire ;
  pour tout faire ;
   ;
   ;
   ;
 fin tant que;
 
 pour tout faire ;
fin algorithme;

Si un cycle négatif est détecté lors de la première recherche de chaîne minimale, alors il n'existe pas de tension compatible. A chaque itération, au moins un intervalle est restreint à un singleton. Ainsi l'algorithme effectue au plus recherches de chaîne minimale. Il s'exécute donc en opérations.

 
3.2.2. Algorithme basé sur le cocycle augmentant
 

Voici le second algorithme proposé dans [Hadjiat96]. Soit une tension quelconque. Considérons un arc non compatible. Soit , soit . Dans le premier cas, on va tenter d'augmenter au maximum la tension et dans le second cas, on va tenter de diminuer au maximum .

Algorithme 3.4: tensionCompatibleCocycle(graphe ,tension )
  0;
 
 tant que tel que faire
  sélectionner un tel arc ;
  
  /* Modification des capacités pour rendre virtuellement compatible. */
  pour tout faire
   si alors ;
   sinon si alors ;
   sinon ;
  fin pour;
 
  si alors /* La tension va être maximisée. */
    ;
   tensionMaximaleCocycle(,,); /* Avec les intervalles . */
   si alors arrêter; /* Pas de tension compatible. */
  sinon /* La tension va être minimisée. */
    ;
    ;
    ;
   tensionMaximaleCocycle(,,); /* Avec les intervalles . */
    ;
   si alors arrêter; /* Pas de tension compatible. */
  fin si;
 fin tant que;
fin algorithme;

Pour cela, on utilise l'algorithme 3.2 qui maximise la tension d'un arc. Dans le premier cas, la méthode est appliquée directement sur dans le graphe . Dans le second cas, nécessite une modification: l'arc est inversé et ses valeurs de tension sont remplacées par leur opposé. Ainsi, l'algorithme de maximisation est appliqué sur pour maximiser et donc minimiser .

La tension sera arbitrairement choisie nulle au début. Cependant, l'algorithme 3.2 suppose une tension compatible, ce qui est justement le but de l'algorithme présenté ici. Pour satisfaire à cette hypothèse, une transformation des bornes de tension est proposée qui rend virtuellement compatible à chaque itération et qui, lors de la maximisation ou de la minimisation, n'altère pas la compatibilité déjà acquise par d'autres arcs.

A chaque itération, un arc est rendu compatible. Ainsi l'algorithme exécute fois l'algorithme de maximisation de la tension. L'algorithme s'exécute donc en opérations.

 
3.2.3. Variante de l'algorithme basé sur le cocycle augmentant
 

Les algorithmes précédents réduisent le problème de la tension compatible à des problèmes de tension maximale sur un arc, nous proposons ici d'aborder directement le problème de la tension compatible. Mais avant de parler de l'algorithme, nous démontrons la proposition suivante.

Soit un cycle, si alors les seules tensions compatibles qui peuvent exister sur le graphe vérifient pour tout et pour tout .   (3.6)

Preuve:
D'après la proposition 3.1, pour tout arc on a: . Donc la seule tension compatible pour l'arc est . De la même manière, pour tout arc , la seule tension compatible pour l'arc est .

L'idée de l'algorithme ici est de considérer une tension quelconque (on peut choisir la tension nulle) qui n'est généralement pas compatible. Cela signifie que l'on peut trouver un arc tel que ou . Dans le premier cas, on cherchera un cocycle qui permet une augmentation de . Voici la coloration que nous proposons pour rechercher un tel cocycle.

  • Tout arc tel que et est noir.
  • Tout arc tel que et est bleu.
  • Tout arc tel que est rouge.
  • Tout arc tel que est vert.

Avec cette coloration, soit on trouve un cocycle qui permet d'augmenter la tension de , soit on trouve un cycle, ce qui signifie qu'il n'existe pas de tension compatible.

Preuve:
Si aucun cocycle n'existe avec cette coloration, alors il existe un cycle contenant . contient des arcs noirs, avec , et des arcs verts, avec , donc tous les arcs de vérifient . De la même manière, les arcs bleus et verts de vérifient tous . Donc . Ainsi, soit , auquel cas il n'existe pas de tension compatible, soit . La proposition 3.6 induit alors que , or pour l'instant et il n'existe pas de cocycle pour augmenter la tension de . Donc cela signifie qu'il n'existe pas de tension compatible.

Dans le cas où , on cherchera un cocycle qui permet une diminution de . Voici la coloration (notée ) que nous proposons pour rechercher un tel cocycle. Seulement les couleurs bleu et noir sont inversées par rapport à la première coloration (notée ).

  • Tout arc tel que et est noir.
  • Tout arc tel que et est bleu.
  • Tout arc tel que est rouge.
  • Tout arc tel que est vert.

Avec cette coloration, soit on trouve un cocycle qui permet de diminuer la tension de , soit on trouve un cycle, ce qui signifie qu'il n'existe pas de tension compatible (la preuve est similaire à celle du premier cas). Voici donc l'algorithme complet qui permet de déterminer une tension compatible sur le graphe .

Algorithme 3.5: tensionCompatibleCocycleBis(graphe ,tension )
  0;
 
 tant que tel que faire
  sélectionner un tel arc ;
 
  si alors
   cycleMinty(,,,); /* Avec la coloration . */
   si alors arrêter; /* Pas de tension compatible. */
    ;
    ;
  sinon
   cycleMinty(,,,); /* Avec la coloration . */
   si alors arrêter; /* Pas de tension compatible. */
    ;
    ;
  fin si;
 fin tant que;
fin algorithme;

Si on ne considère pas une méthode particulière de sélection de l'arc à traiter à chaque itération, l'algorithme s'exécute en opérations dans le cas où les bornes de tension sont entières et en dans le cas où elles sont réelles, étant la plus grande borne de tension en valeur absolue, i.e. , et une borne inférieure de pour toute itération de l'algorithme. Une valeur possible de est:

Preuve:
Dans le cas entier, il est évident qu'à chaque itération, la tension de l'arc est améliorée d'au moins 1. Donc, au maximum en itérations, aura atteint soit , soit . L'algorithme appelle donc fois l'algorithme de recherche de cocycle.
Dans le cas réel, on s'aperçoit que la tension d'un arc est toujours une combinaison linéaire (avec des coefficients entiers) des bornes des intervalles de tension. Autrement dit, pour tout arc et à toute itération de l'algorithme, il existe et tels que . C'est très facile à vérifier dans la mesure où toutes les tensions sont à zéro au départ et qu'à chaque itération la valeur ajoutée ou retranchée à une tension est une différence entre une tension et une borne. Cela veut dire que la valeur à chaque itération est une combinaison linéaire. La plus petite valeur de s'exprime donc . Cette valeur existe puisque l'ensemble dans lequel est recherché le minimum est dénombrable et majoré par 0. A chaque itération, la tension de l'arc est améliorée d'au moins . Donc, au maximum en itérations, aura atteint soit , soit . L'algorithme appelle ainsi fois l'algorithme de recherche de cocycle.

En revanche, si on choisit dans l'algorithme de sélectionner un arc et de l'améliorer tant qu'il n'est pas compatible (cf. algorithme 3.6), on se ramène à l'algorithme 3.4 qui maximise la tension de chaque arc. Dans ce cas, au maximum opérations sont nécessaires pour rendre un arc compatible (l'algorithme de recherche de cocycle marque un nouveau noeud à chaque itération), aussi bien dans le cas réel que dans le cas entier. L'algorithme s'exécute donc dans cette version en opérations.

Algorithme 3.6: tensionCompatibleCocycle(graphe ,tension )
  0;
 
 tant que tel que faire
  sélectionner un tel arc ;
 
  tant que alors
   cycleMinty(,,,); /* Avec la coloration . */
   si alors arrêter; /* Pas de tension compatible. */
    ;
    ;
  fin tant que;
 
  tant que alors
   cycleMinty(,,,); /* Avec la coloration . */
   si alors arrêter; /* Pas de tension compatible. */
    ;
    ;
  fin tant que;
 fin tant que;
fin algorithme;
 
3.2.4. Un autre algorithme basé sur le plus court chemin
 

Reprenons ici quelques résultats sur les problèmes de plus court chemin que l'on peut retrouver dans [Ahuja93]. Supposons que l'on cherche la plus courte distance entre un noeud et tous les autres noeuds du graphe . Notons la fonction qui associe à chaque arc une longueur. Voici les conditions nécessaires et suffisantes, appelées conditions d'optimalité du plus court chemin, qui prouvent qu'une distance est la plus courte.

Soit une fonction qui associe une valeur à chaque noeud du graphe . Si pour tout noeud , est la distance d'un chemin de à , alors représente la plus courte distance entre et si et seulement si .   (3.7)

Preuve:
() Considérons un arc . Soit le plus court chemin entre et passe par , soit le plus court chemin entre et est un chemin ne contenant pas . Dans le premier cas, la plus courte distance de à est qui vaut également si on considère de passer par . La condition d'optimalité est alors vérifiée. Dans le second cas, le plus court chemin de à passant par a une longueur de qui est forcément supérieure à la longueur du chemin , autrement dit . Là aussi, la condition d'optimalité est vérifiée.
() Considérons un chemin de à un noeud . Supposons que ce chemin ait une longueur inférieure à . Cela signifie que . Cependant, les conditions d'optimalité assurent que . Donc, . D'où la contradiction.

Une petite remarque: s'il n'existe pas de chemin entre le noeud et un noeud , alors . Revenons maintenant à notre problème de tension compatible. Nous proposons de transformer le graphe en un graphe où chaque arc est dédoublé en deux arcs et , porte la distance et porte la distance (cf. figure 3.1). Notons l'ensemble des arcs et l'ensemble des arcs . Un noeud source est également ajouté, il est connecté à tous les autres noeuds par un chemin (pour satisfaire à la première partie des conditions d'optimalité). Pour cela il faut ajouter un ensemble d'arcs de longueur infinie qui relient à tous les noeuds de degré entrant nul.

Si on cherche maintenant la plus courte distance entre le noeud et tous les autres noeuds, on obtient le vecteur des plus courtes distances qui satisfait les conditions d'optimalité 3.7 qui peuvent aussi s'écrire:

Autrement dit, . Si on pose la tension associée au potentiel , on a alors , est donc une tension compatible.

Algorithme 3.7: tensionCompatibleCheminBis(graphe ,tension )
  ; ; ;
 
 pour tout faire
   ; ; ;
   ; ; ;
 fin pour;
 
 pour tout tel que faire
   ;
   ;
 fin pour;
 
  ;
 plusCourtChemins(,,,);
 /* Au retour associe à chaque noeud sa plus courte distance à . */
 pour tout faire ;
fin algorithme;

Pour résoudre ce problème des plus courtes distances, nous proposons l'algorithme 3.7 qui utilise la même méthode de résolution de plus court chemin que l'algorithme 3.1, c'est-à-dire la méthode de label-correcting de Bellman et Ford que l'on retrouve dans [Ahuja93] et qui est également disponible dans l'annexe. De la même manière, la détection d'un circuit de longueur négative dans signifie qu'il n'y a pas de tension compatible dans (grâce à la proposition 3.4 et au fait que les arcs de rajoutés n'induisent pas de nouveau circuit). L'algorithme de Bellman et Ford s'exécute en opérations donc notre algorithme s'exécute également en opérations.

 
CONCLUSION
 

En résumé, le tableau 3.1 récapitule les différents algorithmes pour trouver une tension compatible avec leur complexité dans le cas de bornes de tension réelles ou entières.

Méthode Approche Complexité
Bornes réelles Bornes entières
Cocycle augmentant (3.5) Directe (sans sélection particulière)
Plus court chemin (3.3) Tension maximale
Cocycle augmentant
(3.4 ou 3.6)
Tension maximale ou directe
(avec sélection spécifique)
Plus court chemin (3.7) Directe
 
Tableau 3.1: Complexité des algorithmes de tension compatible.

Les algorithmes sont classés en fonction de leur efficacité théorique, de la moins bonne à la meilleure. Nous proposons également une campagne de tests numériques afin d'évaluer l'efficacité pratique des différentes méthodes. Pour connaître en détail comment ont été dirigés ces essais (méthode de génération des problèmes, compilateur utilisé...), le lecteur peut consulter l'annexe. Nous précisons seulement ici que les problèmes générés ont des bornes de tension entières. Pour les méthodes de cocycle augmentant, le nombre d'itérations est le nombre de recherches de cocycle effectuées. Les temps de calcul sont exprimés en secondes sur une machine RISC-6000 à 160 MHz.

Dimension graphe Cocycle augmentant
(3.5)
Plus court chemin
(3.3)
Cocycle augmentant
(3.4 ou 3.6)
Plus court chemin
(3.7)
Noeuds Arcs Itérations Temps Temps Itérations Temps Temps
50 200 576 0,15 0,16 96 0,04 0,01
50 400 760 0,50 0,55 127 0,14 0,03
100 400 1326 0,64 0,65 204 0,19 0,03
100 800 1907 2,4 2,6 273 0,65 0,07
500 2000 7819 19 28,4 1065 5,6 0,22
500 4000 7756 57,7 134,5 980 16,4 0,53
1000 4000 16363 95,7 153,7 2078 25 0,54
1000 8000 14649 220,4 656 1465 54,2 1,2
 
Tableau 3.2: Résultats numériques pour les algorithmes de tension compatible,
influence de la dimension du graphe.

Le tableau 3.2 montre le temps de calcul de chaque méthode pour différentes tailles de graphe (avec ). On s'aperçoit que la méthode de cocycle augmentant 3.5 est plus efficace que la méthode de plus court chemin 3.3, ce qui n'est pas très étonnant car sa complexité est fonction de qui est très faible dans cette première série de tests.

Tension maximale Cocycle augmentant
(3.5)
Plus court chemin
(3.3)
Cocycle augmentant
(3.4 ou 3.6)
Plus court chemin
(3.7)
Itérations Temps Temps Itérations Temps Temps
1000 9292 42,7 70,9 972 10,8 0,37
10000 23844 113,4 72,2 1708 19,8 0,37
100000 29367 138,4 72,2 1596 19,5 0,36
 
Tableau 3.3: Résultats numériques pour les algorithmes de tension compatible,
influence de l'échelle des tensions.

Il est donc intéressant de voir le comportement des méthodes en fonction de la valeur de . Le tableau 3.3 montre le temps de calcul de chaque méthode pour différentes valeurs de la borne maximale de tension sur les arcs (avec et ). Comme prévu, la méthode de cocycle augmentant 3.5 varie en fonction de alors que les autres méthodes sont stables. Le décalage pour est simplement dû au fait que est trop petit et qu'il "facilite" la résolution du problème (en effet, en valeurs entières, les possibilités de tension compatible sont trop réduites voire uniques pour certains arcs).

Classement pratique Classement théorique
Algorithme Vitesse Algorithme Complexité
Cocycle augmentant (3.5) 384,4 Cocycle augmentant (3.5)
Plus court chemin (3.3) 200,6 Plus court chemin (3.3)
Cocycle augmentant (3.4 ou 3.6) 54,2 Cocycle augmentant (3.4 ou 3.6)
Plus court chemin (3.7) 1 Plus court chemin (3.7)
 
Tableau 3.4: Classement théorique et pratique des algorithmes de tension compatible.

Enfin le tableau 3.4 classe les méthodes de la moins efficace à la plus efficace, d'un point de vue pratique, et rappelle le classement d'un point de vue théorique. Un rapport des vitesses d'exécution est effectué par rapport à l'algorithme le plus rapide. Il est calculé à partir de la dernière ligne du tableau 3.3 qui nous semble la situation la plus extrême (dimension du graphe et échelle de tension importantes). Bien évidemment, ces résultats numériques dépendent énormément de la manière de programmer les méthodes, mais nous nous sommes efforcés d'implémenter au mieux et de la même manière chaque méthode afin de réduire le plus possible ce genre de biais.

 
 
Copyright (c) 1999-2016 - Bruno Bachelet - bruno@nawouak.net - http://www.nawouak.net
La permission est accordée de copier, distribuer et/ou modifier ce document sous les termes de la licence GNU Free Documentation License, Version 1.1 ou toute version ultérieure publiée par la fondation Free Software Foundation. Voir cette licence pour plus de détails (http://www.gnu.org).