 |
5. TENSION DANS UN GRAPHE
SERIE-PARALLELE |
Au cours de notre introduction aux problématiques de synchronisation, nous avons
souligné les différentes contraintes que les auteurs de documents hypermédia
souhaitent utiliser (cf. section 1.1). Mais dans la première partie de notre étude,
nous avons complètement éludé la nature même de ces contraintes et avons
travaillé sur des graphes complètement aléatoires.
La raison de cette démarche est que nous ne pouvons pas nous limiter à
l'étude de petits graphes, bien que les utilisateurs de ces systèmes
synchronisés nous garantissent actuellement qu'une centaine de noeuds c'est
déjà beaucoup. En effet, si des systèmes efficaces de synchronisation
hypermédia sont mis en place dans les années à venir, les utilisateurs ne se
contenteront plus de petits documents mais tenteront de synchroniser des documents pouvant se
modéliser par des graphes avec probablement plusieurs milliers de noeuds. Cependant, nous ne
disposons que de très peu d'exemples et aucun de grande taille. Il nous faut donc les
générer. Mais ne voulant pas créer des graphes plus simples que ceux que
proposeraient les concepteurs de documents synchronisés, nous avons pensé que
générer des graphes totalement quelconques serait la meilleure manière
d'éviter l'introduction d'un biais dans nos résultats.
Dans ce chapitre, nous proposons de considérer la nature particulière des
contraintes de synchronisation. Nous verrons qu'une classe de graphes, les graphes
série-parallèles, modélise des synchronisations très proches des
exigences des auteurs de documents hypermédia, dans la limite de ce qu'un graphe temporel
peut modéliser. Il faut noter que la résolution d'un problème d'optimisation
sur ce genre de graphe est souvent plus simple que sur un graphe quelconque (e.g.
[Datta99], [Baiou97], [Bern87], [Takamizawa82]).
La première partie de ce chapitre sera tout naturellement consacrée à la
présentation de ces graphes très particuliers, aux limitations qu'ils apportent par
rapport aux cas réels de synchronisation hypermédia et comment les détecter.
Ensuite, nous proposons une méthode appelée agrégation qui exploite
pleinement la structure particulière des graphes série-parallèles. Nous
comparons alors cet algorithme avec les méthodes présentées au chapitre
précédent pour la résolution du problème de tension de coût
minimal sur des graphes série-parallèles (nous nous limitons à des coûts
convexes linéaires par morceaux, cf. figure 2.11b).
Aux vues de l'efficacité de la méthode d'agrégation, nous avons
pensé l'exploiter pour résoudre le problème de tension de coût minimal
sur des graphes quelconques. Pour cela, nous proposons de décomposer les graphes en
sous-graphes série-parallèles, appelés composantes
série-parallèles et de résoudre le problème sur ces sous-graphes,
avant de rassembler les composantes. L'idée ici étant que pour des cas réels
de synchronisation hypermédia, les graphes seront presque
série-parallèles.
Dans cette section, nous présentons la classe des graphes
série-parallèles et leurs principales caractéristiques. Nous verrons
que la structure récursive de ces graphes peut être représentée par un
arbre binaire qui nous facilitera par la suite la conception d'algorithmes. Enfin, nous discutons
et justifions quelques méthodes pour identifier un graphe série-parallèle et
construire sa représentation sous forme d'arbre.
|
5.1.1. Graphe série-parallèle, SP-graphe |
|
Il est possible de définir un graphe série-parallèle de plusieurs
manières. Nous avons choisi une définition couramment employée (e.g.
[Duffin65], [Eppstein92], [Valdes82]) qui repose sur une construction récursive du graphe
très intuitive et très proche de la manière de créer des contraintes de
synchronisation dans un document hypermédia.
|
5.1.1.1. Définition récursive |
Un graphe est dit série-parallèle s'il est obtenu à partir d'un
graphe à deux sommets reliés par un seul arc, en appliquant récursivement les
deux opérations suivantes.
Par la suite, un graphe série-parallèle sera appelé SP-graphe,
comme le propose par exemple [Ho99] (à ne pas confondre
avec le même terme proposé dans [Schoenmakers95] pour des
graphes série-parallèles sans arcs multiples, i.e. sans arcs avec la même
origine et la même destination).
Par la suite, nous regroupons les relations
et
définies précédemment sous le terme SP-relations. La
propriété suivante montre la corrélation qu'il existe entre le nombre d'arcs
et de noeuds d'un SP-graphe et le nombre de relations séries et parallèles qu'il
contient.
Soit
un SP-graphe, avec
et
. Il contient
relations séries et
relations parallèles. Par conséquent, il possède globalement
SP-relations. |
|
(5.1) |
Preuve:
Une opération série ajoute
noeud à chaque application alors qu'une opération parallèle n'en
ajoute aucun. Le graphe de départ contenant
noeuds, il faut
opérations séries pour construire le graphe final. De même, chaque
opération série ou parallèle ajoute
arc. Comme le graphe de départ contient
arc et qu'il y a
arcs créés par les opérations séries, il faut
opérations parallèles.
|
5.1.1.3. Tension principale |
D'après la définition d'un SP-graphe proposée précédemment,
il est très facile de vérifier qu'il contient un seul noeud source (i.e. ne
possédant aucun prédécesseur) et un seul noeud puits (i.e. ne
possédant aucun successeur). Soit une tension
sur un SP-graphe
, on appelle tension principale et on note
la tension entre le noeud source et le noeud puits de
.
|
5.1.2. Arbre binaire de décomposition, SP-arbre |
|
Les SP-graphes ayant une structure récursive très particulière, il est
intéressant, pour un développement plus aisé d'algorithmes efficaces, de
représenter ces graphes sous une forme plus adaptée à leur structure. Nous
montrons tout d'abord comment modéliser ces graphes sous forme d'expression de SP-relations.
Ensuite, nous proposons une représentation équivalente par un arbre binaire.
|
5.1.2.1. Représentation sous forme d'expression |
Revenons à la définition d'un SP-graphe. Ce dernier est créé en
appliquant une opération série ou parallèle sur l'un des arcs du graphe
à chaque itération du processus de construction. Considérons tout d'abord la
première itération, le graphe se limite à un simple arc
(cf. figure 5.3a).
 |
|
Figure 5.3: Un exemple de construction d'un SP-graphe. |
L'opération
ou
est alors appliquée, à l'itération
le graphe possède donc deux arcs qui sont liés soit par la relation
série
, soit par la relation parallèle
. Supposons l'opération parallèle, à l'itération
le graphe est donc
(cf. figure 5.3b). L'un des deux arcs subit ensuite une autre opération
série ou parallèle, disons l'opération
. Le graphe est alors
(cf. figure 5.3c). On peut ainsi en déduire la propriété
suivante.
Un SP-graphe peut toujours être représenté
par une expression de SP-relations qui n'est pas toujours unique. |
|
(5.2) |
Preuve:
Nous avons vu qu'en suivant la construction d'un SP-graphe, on peut toujours écrire une
expression de SP-relations le représentant. Poursuivons notre exemple en ajoutant
l'opération
. On obtient alors le graphe
(cf. figure 5.3d). Supposons maintenant la construction
illustrée par la figure 5.4, on obtient alors l'expression
qui représente un graphe identique à celui obtenu dans notre premier
exemple de construction.
 |
|
Figure 5.4: Un autre exemple de construction d'un SP-graphe. |
Nous avons défini une SP-relation comme étant une relation entre deux arcs.
Cependant, d'après le principe de construction d'un SP-graphe, on s'aperçoit que ces
relations, au départ établies entre deux arcs, deviennent au cours du processus de
construction des relations entre sous-graphes (car un arc peut être remplacé à
tout moment par une SP-relation). Ainsi, on introduit la notion de SP-relation simple pour
désigner une SP-relation entre deux arcs. Lors de la construction d'un SP-graphe, la
dernière opération série ou parallèle crée forcément une
SP-relation simple, ce qui nous permet d'affirmer la propriété suivante qui nous sera
très utile par la suite.
Un SP-graphe possède au moins une SP-relation simple.
|
|
(5.3) |
|
5.1.2.2. Représentation sous forme d'arbre |
Les SP-relations sont binaires, il est donc très facile et immédiat de
représenter l'expression d'un SP-graphe par un arbre binaire que certains appellent arbre
binaire de décomposition (e.g. [Valdes82],
[Datta99]), et d'autres SP-arbre (e.g. [Bodlaender96]). La figure 5.5 illustre cette représentation pour
l'expression
de l'exemple précédent.
 |
|
Figure 5.5: Un exemple de SP-arbre. |
|
 |
|
Figure 5.6: SP-arbre représentant
un graphe avec un seul arc. |
|
Nous proposons ici une définition équivalente de l'arbre binaire de
décomposition qui met en évidence la relation qu'il existe entre un sous-arbre d'un
SP-arbre et un sous-graphe du SP-graphe associé.
 |
|
Figure 5.7: SP-arbre représentant
une relation série entre deux sous-graphes. |
|
 |
|
Figure 5.8: SP-arbre représentant
une relation parallèle entre deux sous-graphes. |
|
Voici la définition récursive d'un SP-arbre.
- Le SP-arbre représentant un SP-graphe avec seulement un arc reliant deux sommets est
formé d'un seul noeud qui représente l'unique arc du graphe (cf. figure 5.6).
- Un SP-arbre représentant un SP-graphe avec au moins une SP-relation est formé
d'un noeud racine représentant une SP-relation et de deux SP-arbres représentant les
deux sous-graphes impliqués dans la relation en question (cf. figures 5.7 et 5.8).
En résumé, il est toujours possible de représenter un SP-graphe par une
expression de SP-relations ou par un SP-arbre, mais partant d'un SP-graphe déjà
construit, il est souvent possible de trouver plusieurs représentations. Pour obtenir une
représentation unique, il suffit de considérer les SP-relations non plus binaires
mais s'appliquant à un nombre quelconque d'arcs ou de sous-graphes (cf. [Bodlaender96]). Dans notre utilisation de cette représentation, la
pluralité des représentations ne pose aucun problème.
|
5.1.3. Opérateurs de synchronisation
série-parallèles |
|
 |
|
Figure 5.9: SP-arbres des opérateurs de synchronisation, partie 1. |
Dans le chapitre 2, nous avons présenté les limites qu'une modélisation
sous forme de graphe implique aux contraintes de synchronisation d'un document hypermédia.
Parmi tous les opérateurs préconisés dans [Jourdan99], nous n'en avons retenu qu'une partie résumée par la
figure 1.2 (les opérateurs de l'algèbre de Allen proposée dans
[Allen83] et leurs principales disjonctions). Nous proposons
d'identifier ici les opérateurs qui ont une représentation
série-parallèle, afin de mieux juger de la pertinence d'une restriction de la
modélisation des contraintes de synchronisation à un SP-graphe. La figure 5.9 montre
le SP-arbre (quand cela est possible) associé à chaque opérateur retenu au
chapitre 2.
Nous avons volontairement écarté les opérateurs share-start et
share-end de cette première analyse, puisqu'ils ne peuvent pas être
représentés par des SP-graphes. Cependant ils peuvent tout de même être
utilisés dans un graphe des contraintes série-parallèle. En effet, n'oublions
pas que ce graphe est temporel, ce qui signifie qu'il possède un seul noeud source et un
seul noeud puits. Ainsi, pour l'opérateur share-start par exemple, les
scénarios
et
lancés en parallèle se rencontrent forcément à un moment
ou à un autre comme le montre la figure 5.10a. En supposant que les sous-graphes
et
sont série-parallèles, il est facile de vérifier que le graphe
est série-parallèle (cf. figure 5.10b). Le même raisonnement peut être
appliqué à l'opérateur share-end.
 |
|
Figure 5.10: SP-arbres des opérateurs de synchronisation, partie 2. |
Finalement, en n'utilisant que des opérateurs (y compris les SP-relations) avec une
représentation série-parallèle pour construire le graphe des contraintes, on
obtient forcément un SP-graphe. Se limiter à ces opérateurs n'est pas si
restrictif, puisque seul l'opérateur overlaps, parmi tous ceux modélisables
par un graphe temporel, n'est pas représentable par un SP-graphe, et ce n'est apparemment
pas le plus important.
|
5.1.4. Construction d'un SP-arbre |
|
Le problème de reconnaître un SP-graphe est connu depuis longtemps comme
étant un problème facile qui peut être résolu en temps linéaire
(cf. [Valdes82]). Les différents algorithmes proposés dans
la littérature peuvent être adaptés très facilement et sans
altération de leur complexité pour construire le SP-arbre au moment de la
reconnaissance. Ces méthodes étant très efficaces, notre discussion ne portera
pas ici sur leur complexité, mais plutôt sur leur manière d'aborder le
problème et de reconnaître un SP-graphe. Car dans la seconde partie du chapitre, nous
ne nous contenterons pas seulement d'identifier un SP-graphe, mais nous tenterons d'extraire des
composantes série-parallèles de graphes quelconques. Afin de les adapter
à cet objectif, nous présentons les deux approches que nous avons retenues de la
littérature et de nos propres réflexions: l'approche par réduction et
l'approche par chemin.
Une petite remarque tout de même sur la complexité de ces méthodes. Les
auteurs affirment que leur complexité est linéaire, c'est-à-dire en
opérations dans [Valdes82]. Il faut noter que cela
est vrai seulement avec une structure de graphe particulière qui est souvent passée
sous silence. Cependant, vue l'efficacité des méthodes proposées, il faut
s'inquiéter du temps de construction de cette structure. Dans [Schoenmakers95] par exemple, il s'agit d'une matrice d'adjacence noeud-noeud
qui nécessite donc
opérations pour être construite. Dans [Valdes82], identifier si un arc possède un double (i.e. un arc avec
même origine et même destination) est effectué en
opérations, ce qui est possible seulement après un tri des arcs entrants
et sortants de chaque noeud et nécessite
opérations. Le calcul de la complexité des méthodes que nous
présentons ici (et même ailleurs dans le document) considère une structure de
données raisonnablement efficace, mais sans artifice particulier.
Pour les besoins de nos algorithmes, nous avons choisi une notation récursive des arbres
binaires (cf. chapitre 2). Nous rappelons seulement qu'un arbre de racine
, de sous-arbre gauche
et de sous-arbre droit
sera noté
. Nous introduisons également ci-dessous les procédures inverses des
opérations série et parallèle, appelées SP-réductions.
- La réduction série, notée
, remplace la SP-relation
par un arc
.
- La réduction parallèle, notée
, remplace la SP-relation
par l'arc
.
|
5.1.4.1. Approche par réduction |
Cette première approche est la plus répandue, car la plus intuitive. Elle repose
sur un constat évident que nous avons établi précédemment: un graphe
série-parallèle possède au moins une SP-relation simple. L'idée est
donc d'identifier une telle relation et d'appliquer la réduction correspondant, afin de
remonter le processus de construction du SP-graphe.
Cette méthode a tout d'abord été proposée dans [Valdes82]. On la retrouve ensuite dans [Schoenmakers95] avec une petite amélioration: au départ tous
les arcs multiples sont éliminés (il n'existe donc plus de relations
parallèles simples), ensuite on détecte les relation séries et des relations
parallèles-et-séries (composition d'une relation parallèle avec une
relation série:
). La détection est alors plus facile (on regarde uniquement les noeuds) et la
réduction est plus efficace puisque dans le cas d'une relation
parallèle-et-série, deux arcs et un noeud sont éliminés par rapport
à une relation parallèle qui ne supprime qu'un seul arc. Cependant, nous ne retenons
pas cette amélioration, puisque fondamentalement elle ne change pas l'approche et se
prête difficilement à notre soucis futur qui est d'extraire les composantes
série-parallèles d'un graphe quelconque. Une variante similaire a également
été proposée dans [Bodlaender96] qui offre 18
réductions, cependant la plupart ne sont valables que pour un graphe non orienté.
Nous présentons donc ici une version générique de la méthode, en
construisant en même temps un SP-arbre représentant le supposé SP-graphe. Pour
cela, on introduit la fonction
qui associe un SP-arbre
à chaque arc
du graphe
. Au départ, chaque arc possède un SP-arbre avec un seul noeud qui est
l'arc lui-même. Voici ce qui se produit lors d'une réduction.
- La réduction série
supprime les deux arcs
et
de la relation
, et crée un arc
. Le SP-arbre de
est alors
.
- La réduction parallèle
supprime l'arc
de la relation
. Le SP-arbre de
devient alors
.
L'algorithme 5.1 décrit toute la procédure de reconnaissance d'un SP-graphe et la
construction de son SP-arbre. Il est facile de vérifier qu'à chaque réduction,
si le graphe est série-parallèle, il le reste et que par conséquent il existe
toujours au moins une SP-relation simple. En revanche, si le graphe n'est pas
série-parallèle, il y aura une réduction après laquelle il n'y aura
plus de SP-relation simple. Ainsi, si l'algorithme parvient à réduire un graphe
à un seul arc, alors le SP-arbre associé à l'arc représente le
SP-graphe initial. Sinon, cela signifie que le graphe n'était pas
série-parallèle.
Algorithme 5.1: construireSPArbre(graphe
,arbre
)
pour tout
faire
;
; ;
tant que
faire
/* Réductions séries. */
tant que
faire
choisir
; ;
si
et
alors
soit
et
;
;
;
;
;
;
fin si;
fin tant que;
/* Réductions parallèles. */
tant que
faire
choisir
; ;
tant que
tel que
faire
;
; ;
; ;
fin tant que;
fin tant que;
fin tant que;
si
alors soit
;
;
sinon arrêter; /* Le graphe n'est pas
série-parallèle. */
fin algorithme;
L'examination d'un noeud se fait en
opérations et celle d'un arc en
(il faut regarder tous les arcs ayant la même origine). Au départ de
l'algorithme, tous les noeuds sont examinés ainsi que tous les arcs. La première
passe nécessite donc
opérations. Ensuite, un noeud ne sera examiné qu'après une
réduction parallèle. De la même manière, un arc ne sera examiné
que suite à une réduction série. Sachant qu'il y a
relations série et
relations parallèles, les passes suivantes de l'algorithme nécessitent
opérations. Enfin, une SP-réduction consiste en l'agrégation d'un
SP-arbre,
opérations, et en la suppression d'un noeud ou d'un arc (le nombre
d'opérations ici est fortement dépendant de la structure employée pour
représenter le graphe, une structure raisonnable nécessite au pire
opérations). Sachant qu'il y a au plus
SP-relations, les réductions coûtent
opérations. Au final, l'algorithme nécessite donc
opérations.
|
5.1.4.2. Approche par chemin |
L'approche que nous proposons ici est plus globale que celle présentée
précédemment. Visuellement, il est relativement facile d'identifier un SP-graphe. La
raison est simplement que les chemins d'un tel graphe sont organisés de manière
très particulière. Dans [Eppstein92], cette organisation
est formalisée par le concept de décomposition en oreille (ear
decomposition). Notre intérêt portera plutôt sur deux types de noeuds jouant
un rôle très particulier: les noeuds de branchement (dont le degré
sortant est supérieur à 1) et les noeuds de synchronisation (dont le
degré entrant est supérieur à 1).
Dans un graphe série-parallèle, de tels noeuds représentent respectivement
le début et la fin de SP-relations parallèles. On nomme branchement deux arcs
sortants d'un noeud de branchement (i.e. le début d'une SP-relation parallèle). De
même, une synchronisation représente deux arcs entrants d'un noeud de
synchronisation (i.e. la fin d'une SP-relation parallèle). Par simplicité, on pourra
parfois confondre le branchement (respectivement la synchronisation) avec son noeud de branchement
(respectivement de synchronisation).
 |
|
Figure 5.11: Un exemple de branchements. |
L'approche proposée ici est basée sur un parcours du graphe dans un ordre
topologique (i.e. un noeud est visité après tous ses prédécesseurs).
Notons
l'ensemble des noeuds marqués par le parcours du graphe à
l'itération
. Un branchement
est dit fermé à l'itération
s'il existe un noeud de synchronisation
tel qu'il existe deux chemins
et
entre
et
distincts (i.e. n'ayant aucun arc en commun), et contenant chacun l'un des deux arcs du
branchement; les deux arcs entrants de
appartenant chacun à l'un des chemins forment alors une synchronisation
. Un branchement non fermé est dit ouvert. On dit également que la
synchronisation
ferme le branchement
. A un branchement fermé, on associera une synchronisation particulière,
qui est la première synchronisation qui ferme le branchement dans le parcours topologique.
Les chemins qui permettent la fermeture du branchement (dans la définition
et
) seront appelés par la suite chemins de fermeture.
 |
|
Figure 5.12: Un exemple de branchement ouvert sur un chemin de fermeture. |
Pour illustrer ces définitions, considérons la figure 5.11. Les noeuds
grisés représentent ceux visités à une itération donnée
.
et
sont des noeuds de branchement,
et
des noeuds de synchronisation.
est un branchement fermé à l'itération
, la synchronisation associée étant
. En revanche, le branchement
est ouvert à l'itération
. Les chemins de fermeture du branchement
sont
et
. Le graphe de notre exemple n'est pas série-parallèle. Intuitivement, on
s'aperçoit que le problème vient du branchement ouvert
. Tentons alors de prouver la proposition suivante.
Un graphe est série-parallèle si et seulement si,
à toute itération du parcours et pour tout branchement
fermé, il existe deux chemins de fermeture entre le branchement
et la synchronisation associée
qui ne possèdent pas de branchement ouvert. |
|
(5.4) |
Preuve:
( ) A une itération donnée, s'il existe un branchement
ouvert sur l'un des chemins de fermeture d'un branchement fermé
associé à une synchronisation
, cela donne un graphe dont l'allure générale est présentée
par la figure 5.12a (les noeuds grisés représentent ceux visités). En tentant
une réduction par l'algorithme 5.1, cela aboutit au mieux au graphe illustré par la
figure 5.12b. La réduction ne peut donc pas se terminer, le graphe n'est donc pas
série-parallèle.
( ) La preuve de cette implication peut être faite par la justification de
l'algorithme 5.4 présenté dans la suite de cette section. En effet, ce dernier
construit un SP-arbre associé à un graphe en vérifiant que tout branchement
fermé ne possède pas de branchement ouvert dans ses chemins de fermeture.
Pour vérifier la proposition 5.4 (afin de déterminer si un graphe est
série-parallèle), on propose un système de marquage qui permet
d'établir, à l'arrivée sur une synchronisation, les branchements qui se
ferment et si un branchement ouvert est présent sur les chemins de fermeture. On note
la signature d'un arc
, elle se résume à un noeud de branchement.
signifie que
est le dernier (par rapport à l'ordre topologique) branchement non fermé
sur les chemins entre la source et l'arc
. On note également
la signature d'un noeud
, elle consiste en un couple
. Si le noeud n'est pas un noeud de branchement alors
, sinon
indique le nombre de branchements de noeud
ouverts.
indique le niveau du branchement, e.g. si
, alors il existe deux branchements ouverts dans les chemins entre la source et
( compris).
La signature d'un arc ou d'un noeud n'est pas définitive, elle peut changer au cours du
parcours topologique. En effet, lorsque deux arcs
et
de même signature
(à l'itération
) se rejoignent à un noeud de synchronisation
(à l'itération
), ils forment une synchronisation et ferment donc un branchement de noeud
(cf. figure 5.13a). La signature de leur branchement
est alors modifiée:
est décrémenté de
. Si
atteint alors
, cela signifie que tous les branchements de noeud
sont fermés. La signature des arcs
et
doit changer, elle devient le branchement ouvert avant
, i.e. la signature du ou des arcs entrants au branchement
(cf. figure 5.13b). Idéalement il faudrait changer la signature de tous les arcs
de signature
, mais pour les besoins de l'algorithme (qui n'effectue qu'un parcours topologique et ne
revient donc pas sur des arcs déjà utilisés) cette modification n'est pas
nécessaire.
 |
|
Figure 5.13: Un exemple de changement de signature. |
L'algorithme 5.2 proposé effectue un parcours topologique du graphe, en marquant
progressivement les arcs et les noeuds de la signature
. Il est supposé que le graphe n'a qu'une seule source et au moins un arc, sinon
il est certain qu'il n'est pas série-parallèle. Partant de la source, l'algorithme va
ainsi marquer les noeuds et les arcs du graphe. A chaque noeud de synchronisation
, il se charge de modifier certaines signatures pour représenter la fermeture de
branchements associés (cf. algorithme 5.3). Si à la fin de cette étape, deux
arcs entrants
et
n'ont pas la même signature, cela signifie que le graphe n'est pas
série-parallèle.
Algorithme 5.2: détecterSPGraphe(graphe
)
pour tout
faire
; /* Marque pour le parcours
topologique. */
; /* Permet de savoir si un noeud a
été visité. */
fin pour;
;
si
ou
alors arrêter;
/* Le graphe n'est pas série-parallèle. */
tant que
faire
choisir
dans
;
;
si
alors
;
sinon
si
alors fermerBranchements( , );
soit
; ;
si
et
alors /* Plusieurs noeuds puits. */
arrêter; /* Le graphe n'est pas
série-parallèle. */
si
alors
;
;
sinon
;
;
fin si;
pour tout
faire
;
;
si
alors
;
fin pour;
fin si;
fin tant que;
si
tel que
alors
/* Un circuit a stoppé le parcours topologique. */
arrêter; /* Le graphe n'est pas
série-parallèle. */
sinon /* Le graphe est série-parallèle. */
fin algorithme;
En effet, il existe deux chemins
et
entre la source et respectivement
et
. Ces chemins ont au moins un noeud de branchement en commun (au moins la source).
Considérons
le dernier noeud (dans le parcours topologique) vérifiant cette condition. S'il
n'y avait pas de branchement ouvert sur les chemins de fermeture entre
et
,
et
auraient la même signature
; s'ils ne l'ont pas, cela signifie qu'au moins un des chemins de fermeture entre
et
possède un branchement ouvert dont
ou
portent la signature.
Algorithme 5.3: fermerBranchements(noeud
,signature
)
;
trier
dans l'ordre décroissant des signatures;
tant que
faire
soit
et
les deux premiers arcs de
;
;
si
alors arrêter; /* Le graphe n'est pas
série-parallèle. */
;
;
si
alors
;
soit
;
pour tout
tel que
faire
;
trier
dans l'ordre décroissant des signatures;
fin si;
fin tant que;
fin algorithme;
L'algorithme 5.3 est chargé de fermer les branchements à un noeud de
synchronisation donné
, et de modifier les signatures en conséquence. Il doit donc vérifier la
signature des arcs entrants de
deux à deux, et s'ils ont une signature identique, fermer le branchement
correspondant s'il est ouvert. Pour un parcours efficace des arcs, nous proposons de les trier dans
un ensemble
, dans l'ordre décroissant de leur signature, i.e.
avant
(on suppose un ordre quelconque sur les noeuds, l'important étant que dans
l'ensemble
, tous les arcs de même signature soient côte-à-côte). Ainsi,
en étudiant les deux premiers arcs de
, on considère le branchement de niveau le plus élevé qu'il faut
absolument fermer avant tout branchement de niveau inférieur. Cette procédure
effectue donc
opérations. L'algorithme complet 5.2 nécessite
opérations, puisqu'il effectue un simple parcours en appelant l'algorithme 5.3
à chaque noeud visité.
L'algorithme 5.2 ne permet que la détection d'un graphe série-parallèle,
il est simple ensuite de l'adapter, sans altération de la complexité, pour qu'il
construise un SP-arbre associé. L'idée consiste à réduire le graphe par
une opération série à chaque fois qu'un noeud de degrés entrant et
sortant égaux à
est visité. Lorsqu'un branchement est fermé, cela signifie qu'une
opération parallèle a été détectée, il suffit alors de la
réduire. Le SP-arbre est construit une fois tout le graphe visité (il se
réduira alors à un simple arc).
Algorithme 5.4: construireSPArbreBis(graphe
,arbre
)
pour tout
faire
;
pour tout
faire
;
;
tant que
faire
choisir
dans
;
;
si
alors
;
sinon
si
alors fermerBranchementsBis( , , );
soit
;
si
alors /* Réduction série. */
soit
;
;
;
;
;
sinon
;
pour tout
faire
;
si
alors
;
fin pour;
fin si;
fin si;
fin tant que;
si
alors soit
;
;
sinon arrêter; /* Le graphe n'est pas
série-parallèle. */
fin algorithme;
Nous proposons l'algorithme 5.4 accompagné de 5.5 qui permet une telle construction. La
gestion des signatures des arcs et des noeuds est plus simple avec cet algorithme, car les
SP-réductions déduisent automatiquement la plupart des signatures. En effet, la
signature
d'un noeud
est limitée à
(car
est toujours égal à
), et la signature d'un arc
n'est plus nécessaire, car elle est toujours égale à
. Pour l'algorithme 5.1 (construction d'un SP-arbre par réduction), nous avons vu
que les réductions nécessitent
opérations, l'algorithme 5.4 a donc la même complexité que
l'algorithme 5.2 de détection, autrement dit
opérations.
Algorithme 5.5: fermerBranchements(noeud
,signature
,vecteur
)
;
trier
dans l'ordre décroissant des signatures;
tant que
faire
soit
et
les deux premiers arcs de
;
;
si
alors arrêter; /* Le graphe n'est pas
série-parallèle. */
/* Réduction parallèle. */
;
;
si
alors
/* Réduction série. */
soit
;
;
;
;
;
;
trier
dans l'ordre décroissant des signatures;
fin si;
fin tant que;
fin algorithme;
|
|
|
5.2. METHODE D'AGREGATION |
|
Nous proposons ici une méthode pour résoudre le problème de la tension de
coût minimal sur des graphes série-parallèles (avec des coûts
linéaires par morceaux, cf. 2.11b). Cette méthode est appelée
agrégation car elle repose sur une approche qui consiste à remplacer
récursivement une SP-relation par un seul arc aux propriétés
équivalentes. Cette technique d'agrégation exploite la notion de fonction de
coût minimal, que nous présentons avant de s'intéresser à
l'agrégation d'une relation série, puis d'une relation parallèle. Nous
expliquons enfin la méthode complète et la comparons aux méthodes
présentées dans le chapitre précédent.
|
5.2.1. Fonction de coût minimal |
|
L'idée de la méthode d'agrégation consiste à remplacer un SP-graphe
par un arc, dit agrégé, aux propriétés équivalentes. Bien
évidemment, cette opération, appelée agrégation, élimine
certaines informations concernant le graphe pour n'en garder que les pertinentes pour le
problème qui nous intéresse, à savoir optimiser la tension du graphe. La
principale information agrégée que l'on considère tout d'abord est la
fonction de coût minimal d'un graphe
, ou de son arc agrégé
. Cette fonction, notée
, représente le coût minimal de la tension de
, pour une tension principale
forcée à une valeur donnée
.
 |
|
(5.5) |
L'intérêt de l'agrégation, avec cette notion de fonction de coût
minimal, est de pouvoir manipuler un seul arc
au lieu de tout un SP-graphe
, comme s'il s'agissait d'un arc quelconque avec une fonction de coût
linéaire par morceaux. Nous montrons maintenant que la fonction de coût minimal d'une
SP-relation est toujours convexe si les fonctions de coût sur les arcs non
agrégés sont convexes.
|
5.2.1.1. Agrégation série |
Considérons deux sous-graphes série-parallèles
et
, et supposons que leur fonction de coût minimal
et
sont connues. Si l'on considère la SP-relation
(cf. figure 5.7),
et
partagent seulement un noeud, la SP-relation n'ajoute donc pas de contrainte de
tension supplémentaire entre eux. Mais si l'on ajoute la contrainte que la tension
principale de
doit être égale à
, cela impose à
et
, les tensions principales respectivement de
et
, que
. La fonction de coût minimal
de la SP-relation
est donc:
 |
|
(5.6) |
Cela signifie que
est l'inf-convolution
. Il est prouvé que cette opération maintient la convexité (e.g.
[Rockafellar70]).
|
5.2.1.2. Agrégation parallèle |
Considérons deux sous-graphes série-parallèles
et
, et supposons que leur fonction de coût minimal
et
sont connues. Si l'on considère la SP-relation
(cf. figure 5.8),
et
partagent leur source et leur puits, la seule contrainte de tension entre eux est que
leur tension principale, respectivement
et
, doivent être égales. Si l'on ajoute la contrainte que la tension
principale de
doit être égale à
, cela impose que
. La fonction de coût minimal
de la SP-relation
est donc:
 |
|
(5.7) |
Cela signifie que
est simplement la somme
, qui est convexe si les fonctions
et
sont convexes.
|
5.2.1.3. Fonction de coût minimal
t-centrée |
De cette rapide analyse, il est possible d'écrire un algorithme récursif simple
pour construire la fonction de coût minimal
d'un SP-graphe
. Mais nous sommes plutôt intéressés par déterminer la
tension de coût minimal de
. Nous proposons maintenant une représentation particulière de la
fonction de coût minimal, de manière à connaître non seulement le
coût de la tension optimale d'une SP-relation, mais également comment construire cette
tension optimale. Pour cela, nous définissons la fonction de coût minimal
-centrée
de
comme suit.
 |
|
(5.8) |
Autrement dit
, et la fonction
représente le coût minimal pour augmenter ou diminuer la tension
principale à partir de la valeur
. Centrer la fonction de coût minimal sur la valeur courante
d'un arc agrégé
permet d'obtenir des informations de coût relatives à la valeur courante
. Nous choisissons de représenter cette fonction linéaire par morceaux
sous la forme de deux ensembles
et
,
représentant
sur l'intervalle
et
représentant
sur l'intervalle
. Ces ensembles contiennent simplement la définition de chaque morceau de la
fonction. Un morceau
est défini par un triplet de la forme
, où
représente la pente de la courbe sur le morceau
,
la longueur de l'intervalle sur lequel
est défini, et
l'ensemble des arcs dont la tension doit être augmentée ou
diminuée pour adapter la tension sur le morceau
. Pour des raisons d'efficacité, les morceaux des ensembles
et
sont triés de la plus petite pente à la plus grande. La figure 5.14
illustre un exemple de fonction de coût minimal
-centrée, définie par les ensembles suivants.

Dans cette figure, considérons la tension principale
de
égale à
. Si l'on souhaite diminuer
d'une unité, il faut diminuer la tension des arcs
et
d'une unité, et le coût global de la tension du graphe sera
diminuée de
unité.
 |
|
Figure 5.14: Un exemple de fonction de coût minimal
t-centrée. |
Notons
la tension de coût minimal d'un graphe
et
. Nous expliquons maintenant comment trouver
et construire la fonction
. Remarquons simplement que la fonction de coût minimal
pour un arc non agrégé
est représentée par
et
avec la tension optimale
. Intéressons-nous maintenant à trouver ces informations pour une
SP-relation.
Considérons le graphe
, et supposons pour les sous-graphes
et
que leur tension optimale, respectivement
et
, et leur fonction de coût minimal, respectivement
et
, sont connues. La tension
formée des deux tensions
et
est optimale, puisque la relation série
n'entraîne aucune contrainte supplémentaire entre
et
.
Pour augmenter la tension principale
du graphe
, nous pouvons choisir d'augmenter celle du sous-graphe
, i.e.
, ou celle de
, i.e.
. Observons
et
les premiers morceaux respectivement de
et de
. Afin d'effectuer une augmentation optimale, il faut choisir d'augmenter
si
, ou
sinon. Supposons que
ait été augmentée, cette opération ne peut pas
dépasser
unités. Ensuite il est nécessaire d'appliquer à nouveau le
même raisonnement sur les nouvelles valeurs de
et
. Cette analyse peut être faite également pour la diminution de
.
 |
|
Figure 5.15: Un exemple de construction de la fonction de coût minimal
d'une relation série. |
En conclusion, la fonction
est représentée par les ensembles
et
triés de la plus petite pente à la plus grande. La figure 5.15 montre un
exemple de construction de la fonction de coût minimal
-centrée d'une relation série, la procédure étant
résumée par l'algorithme 5.6.
Algorithme 5.6: agrégerSérie(fonction
,fonction
,fonction
)
tant que
et
faire
soit
premier morceau de
;
soit
premier morceau de
;
si
alors
; ;
sinon
; ;
fin tant que;
tant que
faire
soit
premier morceau de
;
; ;
fin tant que;
tant que
faire
soit
premier morceau de
;
; ;
fin tant que;
/* Procédure similaire pour
. */
...
fin algorithme;
Notons
et
les nombres de morceaux de
et
,
possède donc
morceaux, et la procédure de construction de la fonction de coût minimal
et de la tension optimale d'une relation série nécessite
opérations:
opérations pour parcourir les
morceaux des fonctions de coût minimal, et
opérations pour copier un ensemble d'au plus
arcs pour chaque morceau.
|
5.2.3. Agrégation parallèle |
|
Considérons maintenant le graphe
, et supposons pour les sous-graphes
et
que leur tension optimale, respectivement
et
, et leur fonction de coût minimal, respectivement
et
sont connues. La relation parallèle est possible seulement si
, la tension du graphe
ne sera valide qu'à cette condition. Comme nous devons trouver la tension
optimale
du graphe
, une méthode est nécessaire pour égaliser
et
de manière optimale, i.e. rendre la tension
formée de
et
optimale.
 |
|
Figure 5.16: Un exemple d'égalisation des tensions lors d'une
sérialisation. |
Supposons que
, pour égaliser
et
, il faut augmenter
et/ou diminuer
. Observons donc
et
, les premiers morceaux respectivement de
et
. Afin d'effectuer un rapprochement des deux tensions de manière optimale, il
faut choisir d'augmenter
si
, ou de diminuer
sinon. Supposons que
ait été diminuée, cette opération ne peut dépasser
unités. Ensuite il est nécessaire d'appliquer le même raisonnement
sur les nouvelles valeurs de
et
. Cette opération est répétée jusqu'à ce que
.
Algorithme 5.7: égaliserTensionsParallèles( |
fonction
, |
|
fonction
, |
|
tension
,tension
) |
tant que
faire
si
et
alors arrêter; /* Tension non réalisable. */
soit
le premier morceau de
si
;
soit
le premier morceau de
si
;
si
ou
alors /* Augmentation tension. */
;
pour tout
faire
;
;
si
alors
;
;
sinon /* Diminution tension. */
;
pour tout
faire
;
;
si
alors
;
;
fin si;
fin tant que;
/* Procédure similaire pour le cas
. */
...
fin algorithme;
La figure 5.16 illustre un exemple d'égalisation de tensions principales entre deux
sous-graphes associés par une relation parallèle. L'algorithme 5.7 résume
cette procédure. Une fois les deux tensions principales égales, il est alors possible
de construire
centrée sur
, comme le montre l'algorithme 5.8. La figure 5.17 illustre cette procédure par
un exemple.
Algorithme 5.8: agrégerParallèle(fonction
,fonction
,fonction
)
tant que
et
faire
soit
le premier morceau de
;
soit
le premier morceau de
;
;
;
;
;
si
alors
;
si
alors
;
fin tant que;
/* Procédure similaire pour
. */
...
fin algorithme;
Notons
et
les nombres de morceaux de
et
. Il est possible de vérifier que l'exécution de l'algorithme 5.7 suivi
de 5.8 construit
avec au plus
morceaux (le premier algorithme crée au plus un morceau supplémentaire,
et de la figure 5.17, il est évident que le second algorithme crée au plus
morceaux). La procédure complète de construction de la fonction de
coût minimal et de la tension optimale d'une relation parallèle nécessite alors
opérations: la procédure d'égalisation des tensions parcours au
plus
morceaux des fonctions de coût minimal, et copie au plus
arcs pour chaque morceau; de même l'algorithme 5.8 crée au plus
morceaux et copie pour chacun au plus
arcs.
 |
|
Figure 5.17: Un exemple de construction de la fonction de coût minimal
d'une relation parallèle. |
A partir des algorithmes présentés précédemment, il est possible de
proposer une méthode permettant de déterminer la tension optimale
et la fonction de coût minimal
d'un SP-graphe
entier. Cet algorithme repose sur le SP-arbre
associé à
: partant de ses feuilles, il suffit d'appliquer récursivement les
méthodes d'agrégation sur des SP-relations détaillées aux sections
précédentes (cf. algorithme 5.9). Nous montrons maintenant que cette procédure
est polynômiale.
La méthode d'agrégation nécessite
opérations. |
|
(5.9) |
Preuve:
Nous avons établi que chaque agrégation effectue
opérations. En début de chapitre, il a été signalé
qu'un SP-graphe possède
SP-relations. La méthode d'agrégation nécessite donc
opérations. Nous avons également expliqué que, pour chaque
SP-relation, si
et
sont les nombres de morceaux de
et
, alors
possède au plus
morceaux. Autrement dit, si chaque arc non agrégé possède deux
morceaux dans sa fonction de coût, alors la fonction de coût minimal du SP-graphe
complet ne peut pas excéder
morceaux. La méthode d'agrégation nécessite donc bien
opérations.
Algorithme 5.9: agréger(arbre
,tension
,fonction
)
si
alors
agréger( , , );
agréger( , , );
si
alors
agrégerSérie( , , );
;
sinon si
alors
égaliserTensionsParallèles( , , , );
agrégerParallèle( , , );
;
sinon
;
;
;
fin si;
fin si;
fin algorithme;
Nous proposons ici de comparer l'efficacité pratique des méthodes de
résolution du problème de tension de coût minimal présentées au
chapitre précédent et de la méthode d'agrégation sur des graphes
série-parallèles par rapport à des graphes quelconques. Pour connaître
en détails 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 que l'outil CPLEX 6.0 a été
utilisé avec ses paramètres par défaut pour résoudre les programmes
linéaires et que les problèmes générés ont des bornes de tension
et des coûts entiers. Les temps de calcul sont exprimés en secondes sur une machine
RISC-6000 à 160 MHz.
Dimension graphe |
Graphes quelconques |
Graphes série-parallèles |
Noeuds |
Arcs |
Prog. linéaire |
Conformité |
Echelle dual |
Prog. linéaire |
Conformité |
Echelle dual |
Agrégation |
50 |
200 |
0,4 |
0,13 |
0,11 |
0,4 |
0,07 |
0,09 |
0,05 |
50 |
400 |
0,9 |
0,31 |
0,21 |
0,71 |
0,15 |
0,2 |
0,09 |
100 |
400 |
1 |
0,5 |
0,3 |
0,73 |
0,2 |
0,31 |
0,09 |
100 |
800 |
1,9 |
1,2 |
0,58 |
1,4 |
0,38 |
0,63 |
0,18 |
500 |
2000 |
12,7 |
15,8 |
3,3 |
4,4 |
3 |
4,5 |
0,5 |
500 |
4000 |
37,8 |
49,8 |
6,6 |
10,7 |
5,3 |
11,3 |
0,99 |
1000 |
4000 |
56,8 |
81,2 |
18,3 |
11,6 |
9 |
17,2 |
1 |
1000 |
8000 |
219,7 |
249,2 |
18,5 |
30,8 |
21,5 |
34,5 |
2,1 |
|
|
Tableau 5.1: Comparatif des résultats numériques des algorithmes
de tension
de coût minimal sur des SP-graphes par rapport à des graphes quelconques. |
Le tableau 5.1 présente le temps de résolution (avec
) de la programmation linéaire (modèle
), de la mise à conformité (algorithme 4.4) et de la mise à
l'échelle du dual (algorithme 4.13). Les deux premières méthodes se comportent
nettement mieux, même si la mise à conformité profite un peu plus de la
simplification du problème. En revanche, la mise à l'échelle du dual est plus
décevante. Il semblerait que la structure série-parallèle des graphes
complique l'équilibrage des noeuds (cf. section 4.6). Même avec la technique
d'implémentation par vague (wave implementation [Ahuja93]), qui améliore la complexité de la méthode,
nous n'avons pas abouti à de meilleures performances.
Comme nous pouvions l'espérer, la méthode d'agrégation fournit des temps
de calcul significativement meilleurs que les autres méthodes. En outre, elle semble
beaucoup moins sensible à la taille du graphe: la mise à conformité et la mise
à l'échelle offrent un rapport entre
et
entre le temps de calcul des plus petites instances et des plus grandes;
l'agrégation propose elle un rapport d'environ
; seule la programmation linéaire se rapproche de ce comportement avec un
rapport de
. L'efficacité de la méthode d'agrégation pour des graphes
série-parallèles est telle qu'il serait intéressant de l'exploiter pour
résoudre le problème de la tension de coût minimal sur des graphes
"presque" série-parallèles, plus proches des cas réels de
synchronisation hypermédia.
|
5.3. GRAPHES PRESQUE
SERIE-PARALLELES |
|
Notamment à cause de la relation overlaps (cf. figure 5.9), les graphes temporels
issus de synchronisations hypermédia ne sont pas série-parallèles, mais
restent en pratique très proches de cette structure particulière. Nous introduisons
ici la notion de graphe presque série-parallèle pour caractériser des
graphes dont la structure de base est série-parallèle mais est perturbée par
l'ajout de quelques arcs. Cette dernière section propose une méthode pour
résoudre le problème de la tension de coût minimal sur ce type de graphe,
l'objectif étant d'exploiter la méthode d'agrégation pour fournir une
méthode plus efficace que les méthodes de mise à conformité et de mise
à l'échelle du dual pour des graphes presque série-parallèles.
Cependant les résultats numériques montrent que cette méthode est très
inefficace sur des graphes quelconques.
L'idée de la méthode de résolution consiste à décomposer un
graphe temporel en sous-graphes série-parallèles, ses composantes
série-parallèles. L'optimisation de la tension sur ces sous-graphes est
effectuée par la méthode d'agrégation. Ainsi, chaque composante est
agrégée et représentée par un seul arc avec un coût
linéaire par morceaux. Ensuite, dans un ordre précis, les composantes sont
rassemblées une à une, pour progressivement reformer le graphe original. Lors de
cette phase de reconstruction, la mise à conformité est employée pour
conserver une tension optimale. Dans un premier temps, nous précisons la notion de
composantes série-parallèles. Nous décrivons ensuite la phase de
reconstruction et présentons quelques résultats numériques, en supposant la
décomposition déjà effectuée (elle est obtenue lors de la
génération des jeux d'essais). Enfin, nous présentons et comparons deux
méthodes simples de décomposition d'un graphe quelconque en composantes
série-parallèles.
|
5.3.1. Composantes série-parallèles |
|
Un sous-graphe série-parallèle d'un graphe
est appelé composante série-parallèle, ou
SP-composante, de
. Une SP-composante est dite maximale si elle n'est pas contenue strictement
dans une autre. Une partition
des arcs de
définit une décomposition série-parallèle, ou
SP-décomposition, du graphe
où chaque ensemble d'arcs de
induit un sous-graphe série-parallèle de
. Une SP-décomposition du graphe
est donc un ensemble de SP-composantes deux à deux disjointes, en termes
d'arcs, et dont l'union est égale à
.
Pour les besoins de l'algorithme de reconstruction, nous supposons un ordre partiel sur les
composantes d'une SP-décomposition, telle que si la source ou le puits d'une composante
appartiennent à la composante
, alors
. Nous montrons dans la section sur les méthodes de décomposition qu'il
existe toujours une décomposition avec un tel ordre pour n'importe quel graphe.
Un graphe presque série-parallèle
est un graphe formé de l'union d'un SP-graphe
et d'un ensemble d'arcs
, i.e.
,
étant l'une des plus grandes SP-composantes maximales de
. Le rapport
est appelé la SP-perturbation du graphe
. D'après cette définition, tout graphe est presque
série-parallèle, avec une SP-perturbation plus ou moins élevée, mais le
terme presque série-parallèle est naturellement réservé aux
graphes avec une SP-perturbation faible, le seuil restant à définir. Nous proposons
maintenant une méthode d'optimisation pour des graphes avec une SP-perturbation faible, de
l'ordre de quelques pourcents. Des résultats numériques montrent la SP-perturbation
maximale pour laquelle la nouvelle approche est efficace, ce qui sera le seuil au delà
duquel les graphes ne seront plus considérés presque série-parallèles
par la suite. Notons que la SP-perturbation d'un graphe ne peut être mesurée que si
l'une de ses plus grandes SP-composantes maximales est connue, problème qui reste ouvert et
que nous aborderons plus tard.
|
5.3.2. Méthode de reconstruction |
|
Supposons
une SP-décomposition d'un graphe
triée selon l'ordre décrit à la section précédente.
La procédure itérative de reconstruction du graphe
à sa tension optimale à partir de sa SP-décomposition est la
suivante. La figure 5.18 illustre ce processus.
- Etape 1: Agrégation.
Supposons
le graphe obtenu à l'itération
(au départ,
). Pour construire
, on considère
la
composante de l'ensemble trié
. La tension optimale
et la fonction de coût minimal
de
sont obtenues par la méthode d'agrégation (cf. algorithme 5.9). On tente
ensuite d'ajouter l'arc agrégé
représentant
au graphe
. Si l'origine et la destination de cet arc sont des noeuds du graphe
, alors l'arc peut être ajouté directement (cf. étape 3). En
revanche, si une extrémité de l'arc n'existe pas, il faut désagréger
l'arc dont la composante qu'il représente contient l'extrémité manquante (cf.
étape 2). Cet arc existe forcément grâce à l'ordre partiel des
composantes dans la SP-décomposition. Dans l'exemple de la figure 5.18, lorsque l'arc
agrégé représentant la composante
est ajouté, les noeuds
et
ne sont pas présents dans
, il faut donc désagréger l'arc
qui représente la composante
et qui contient ces deux noeuds. Il faut remarquer que dans une
SP-décomposition où l'on a obtenu la plus grande composante possible, celle-ci sera
souvent ajoutée la première et désagrégée dès la seconde
itération.
- Etape 2: Désagrégation.
Désagréger un arc
consiste à le remplacer par la SP-composante
qu'il représente. Cependant, le bon fonctionnement de la procédure de
reconstruction repose sur la propriété qu'à chaque itération
, les arcs du graphe
, agrégés ou non, sont conformes. L'arc
est donc conforme, en se basant sur la fonction de coût
. A partir de la tension
et du flot
de l'arc agrégé
, il faut déterminer la tension et le flot équivalent sur la composante
, i.e. la tension principale de
doit être
, le flot principal (i.e. entre la source et le puits) de
doit être
, et le coût total de
doit être le même que celui de
. La tension est déterminée à partir de la fonction de coût
minimal
, et un algorithme de recherche de flot compatible (cf. la sous-section suivante pour
les détails) permet de déterminer un flot tel que tous les arcs sont conformes.
- Etape 3: Reconstruction.
L'arc agrégé
peut alors être ajouté au graphe
pour former le graphe
. La tension de cet arc est établie à partir du potentiel de ses noeuds,
et son flot est fixé à
. De cette manière, la tension et le flot sur tout le graphe sont valides. En
outre, tous les arcs sont conformes excepté celui qui vient d'être ajouté. Il
faut donc le rendre conforme en appliquant par exemple la procédure d'amélioration
d'un arc vue au chapitre 4. La seule différence réside dans le fait que les
coûts traités ont plus de deux morceaux: les arcs désagrégés
possèdent bien un coût avec deux morceaux, mais les arcs agrégés ont
comme coût leur fonction de coût minimal. Cette différence ne modifie pas la
complexité de la procédure (le nombre total de morceaux ne dépassant pas au
pire
dans tout le graphe), mais en pratique elle induit, comme le montrent les
résultats numériques, un ralentissement d'un facteur constant (e.g. tableau 5.2).
 |
|
Figure 5.18: Un exemple de reconstruction. |
Cette procédure est répétée jusqu'à ce que toutes les
composantes soient ajoutées au graphe. A la dernière itération, au moins un
arc, le dernier ajouté, est agrégé. Il faut donc terminer la reconstruction
par la désagrégation des arcs qui ne l'ont pas été au cours de la
procédure (cf. étape 2). Le graphe ainsi obtenu est bien l'original avec tous ses
arcs conformes. L'enchaînement des étapes de cette reconstruction est
résumé succinctement dans l'algorithme 5.10.
Algorithme 5.10: reconstruire(ensemble
,tension
)
soit
potentiel associé à
;
;
;
tant que
faire
;
soit
la
composante de
;
soit
et
la source et le puits de
;
soit
;
... /* Etape 1: Agréger
en l'arc
. */
si
alors
soit
l'arc agrégé de
contenant
;
... /* Etape 2: Désagréger
. */
fin si;
si
alors
soit
l'arc agrégé de
contenant
;
... /* Etape 2: Désagréger
. */
fin si;
/* Etape 3: Reconstruction. */
;
;
;
tant que
non conforme faire améliorerConformité( , , , );
fin tant que;
fin algorithme;
|
5.3.2.1. Algorithme de construction d'un flot conforme |
Au cours de la phase de reconstruction, nous avons vu qu'il était nécessaire,
pour une composante série-parallèle
dont on connaît le flot principal
(i.e. le flot entre sa source et son puits) et la tension optimale
(par rapport à tout le graphe
), de déterminer un flot sur tous les arcs de la composante de manière
à ce qu'ils soient conformes (cf. étape 2). Il est possible en regardant la courbe de
conformité d'un arc
de déterminer, par rapport à la tension
de l'arc, l'intervalle dans lequel son flot
doit se trouver pour que l'arc soit conforme (cf. figure 5.19). De cette
manière, à chaque arc
est associé un intervalle de flot
.
 |
|
Figure 5.19: Construction d'un flot conforme, connaissant la tension optimale.
|
En ajoutant un arc
de capacité de flot
entre le puits et la source de la composante série-parallèle
, trouver un flot qui rend tous les arcs conformes sur la composante
revient à déterminer un flot compatible avec les intervalles
établis sur la composante
complétée de l'arc
. Une condition nécessaire et suffisante pour qu'un tel flot existe est, pour
tout cocycle
,
(cf. [Gondran79]). Cette condition est toujours
vérifiée, car
représente le coût unitaire d'augmentation de la tension de
et
le coût unitaire de diminution de la tension de
, un cocycle avec une telle somme négative signifierait qu'une diminution du
coût global de la tension est possible.
L'une des meilleures complexités pour résoudre le problème du flot
compatible est
(cf. [Ahuja93]), mais nous avons choisi d'utiliser une
méthode similaire à l'agrégation, i.e. basée sur une approche
récursive exploitant le SP-arbre associé à la composante, car elle est
très simple à implémenter et polynômiale. Cette méthode
récursive tente de déterminer le flot principal
(i.e. entre la source et le puits) minimal d'un SP-graphe
, en récoltant en même temps des informations permettant d'augmenter le
flot
efficacement par la suite. De manière similaire à l'agrégation,
ces informations sont récoltées sous la forme d'un ensemble
constitué de couples
signifiant que l'on peut augmenter le flot des arcs de l'ensemble
au maximum de
, le flot sur le graphe restant compatible. Ainsi, pour la composante
, on obtiendra le flot principal minimal et comment l'augmenter efficacement à
la valeur
.
Algorithme 5.11: égaliserFlotsSéries( |
fonction
,fonction
, |
|
flot
,flot
) |
tant que
faire
si
alors arrêter; /* Flot non réalisable. */
soit
;
;
pour tout
faire
;
;
si
alors
;
fin tant que;
/* Procédure similaire pour le cas
. */
...
fin algorithme;
Considérons le graphe
, et supposons pour les sous-graphes
et
que leur flot minimal, respectivement
et
, et leur ensemble, respectivement
et
, sont connus. La relation série est possible seulement si
, le flot du graphe
n'est valide qu'à cette condition. Il faut une procédure
d'égalisation de deux flots en série, le flot principal résultant étant
minimal. A partir des ensembles
et
, il est possible de proposer une approche polynômiale, similaire à la
méthode d'égalisation de tensions parallèles (cf. algorithme 5.11).
Algorithme 5.12: minimiserSérie( |
fonction
,fonction
, |
|
fonction
) |
tant que
et
faire
soit
;
soit
;
;
;
;
;
si
alors
;
si
alors
;
fin tant que;
fin algorithme;
Une fois les deux flots principaux
et
égaux, il faut construire l'ensemble
de la relation série
. L'approche est similaire à la méthode d'agrégation de deux
sous-graphes parallèles (cf. algorithme 5.12).
Considérons maintenant le graphe
, et supposons pour les sous-graphes
et
que leur flot minimal, respectivement
et
, et leur ensemble, respectivement
et
, sont connus. Le flot principal minimal
est égal à
, et l'ensemble
est l'union
. La procédure complète pour déterminer le flot minimal d'un
graphe
est détaillée dans l'algorithme 5.13.
Algorithme 5.13: minimiserFlot(arbre
,flot
,fonction
)
si
alors
minimiserFlot( , , );
minimiserFlot( , , );
si
alors
égaliserFlotsSéries( , , , );
minimiserSérie( , , );
;
sinon si
alors
;
;
sinon
;
;
fin si;
fin si;
fin algorithme;
Une fois le flot minimal
déterminé et l'ensemble
construit, il est possible d'augmenter le flot principal de l'arc pour atteindre
, en utilisant les couples restants de l'ensemble
. La méthode complète détermine, pour chaque SP-relation, son flot
minimal à partir des deux sous-graphes déjà optimisés, cette
opération nécessite
opérations,
étant la cardinalité de l'ensemble
. Comme pour l'agrégation,
ne peut dépasser
, pour chaque SP-relation il faut donc
opérations. Le graphe contient
SP-relations, cette méthode effectue donc
opérations.
Cette complexité n'est pas la meilleure que l'on puisse obtenir pour le problème
du flot compatible, mais la méthode est simple à implémenter. En outre les
résultats numériques montrent que le temps passé dans cette phase de la
méthode de reconstruction est négligeable, la méthode employée pour
déterminer un flot compatible n'altère pas les performances globales de la
méthode de reconstruction (e.g. tableau 5.6).
|
5.3.2.2. Complexité et résultats numériques |
Notons
le nombre de composantes de la SP-décomposition du graphe
utilisée pour la reconstruction. Pour chaque composante
dont le nombre d'arcs est
, la méthode effectue une opération d'agrégation (soit
opérations), une opération de désagrégation (soit
opérations pour construire la tension et
opérations pour construire le flot) et une opération de reconstruction,
i.e. la mise à conformité d'un arc (soit
opérations). Le nombre total d'opérations est
, or
, donc
. La méthode complète, hors décomposition du graphe en
SP-composantes, nécessite alors
opérations. Remarquons que si le graphe est décomposé en
composantes, une par arc, on retrouve la complexité de la mise à
conformité.
Nous proposons maintenant une comparaison sur le plan pratique de la méthode de
reconstruction par rapport aux deux méthodes les plus efficaces sur des graphes quelconques:
la mise à l'échelle du dual et la mise à conformité. Pour
connaître en détails 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 et des coûts entiers. Le nombre
d'itérations pour la méthode de mise à conformité et la reconstruction
est le nombre de recherches de cycle et de cocycle effectuées. Les temps de calcul sont
exprimés en secondes sur une machine RISC-6000 à 160 MHz.
Les résultats présentés ici ne prennent pas en compte la phase de
décomposition, puisque la SP-décomposition des graphes est déterminée
au moment de leur génération. Il faut savoir que la décomposition n'est pas
optimale dans le sens où elle ne contient pas forcément l'une des plus grandes
SP-composantes maximales, mais elle en est très proche. En effet, les graphes sont
générés à partir d'un graphe série-parallèle en lui
ajoutant aléatoirement les arcs manquants pour obtenir la SP-perturbation souhaitée.
Mais ces ajouts peuvent tout à fait rajouter des opérations parallèles dans le
graphe, et agrandir la composante série-parallèle de départ.
Dimension graphe |
Mise conformité (4.4) |
Mise échelle dual (4.13) |
Reconstruction (5.10) |
Noeuds |
Arcs |
Itérations |
Temps |
Temps |
Itérations |
Temps |
50 |
200 |
251 |
0,08 |
0,1 |
10 |
0,05 |
50 |
400 |
471 |
0,16 |
0,2 |
19 |
0,1 |
100 |
400 |
484 |
0,22 |
0,32 |
31 |
0,12 |
100 |
800 |
935 |
0,47 |
0,61 |
48 |
0,24 |
500 |
2000 |
2125 |
3 |
4,6 |
149 |
1,2 |
500 |
4000 |
4303 |
8 |
10,7 |
227 |
3,2 |
1000 |
4000 |
4103 |
11,8 |
17 |
334 |
4,8 |
1000 |
8000 |
8224 |
27,7 |
33,6 |
454 |
11,9 |
|
|
Tableau 5.2: Résultats numériques de la méthode de
reconstruction sur des graphes
presque série-parallèles, influence de la dimension du graphe. |
Le tableau 5.2 montre le temps de résolution des algorithmes pour différentes
tailles de graphe (avec
) et une SP-perturbation fixe de
. La méthode de reconstruction se comporte mieux que les deux autres
méthodes, notamment en comparaison avec la méthode de mise à
conformité, puisqu'elle effectue beaucoup moins d'itérations. Cependant, comme elle
manipule des coûts linéaires avec plus de deux morceaux, chaque itération de la
mise à conformité est ralentie d'un facteur constant.
Le tableau 5.3 s'intéresse au comportement des méthodes en fonction de la
SP-perturbation du graphe (avec
,
et
). La méthode de reconstruction reste la plus efficace jusqu'à
de SP-perturbation, à partir de ce seuil la mise à l'échelle du
dual, la plus efficace sur des graphes quelconques, redevient compétitive. Notons la
stabilité de la mise à l'échelle qui, même si elle ne donne pas ses
meilleures performances ici, est totalement insensible à la SP-perturbation, ce qui veut
dire qu'avec
de perturbation les graphes possèdent toujours une structure
particulière qui handicape la méthode. A la vue des résultats
numériques, nous décidons qu'une SP-perturbation de
est un seuil raisonnable pour déclarer un graphe presque
série-parallèle, c'est la valeur au delà de laquelle la mise à
conformité simple est plus efficace que la méthode de reconstruction.
SP-perturbation
Pourcentage |
Mise conformité (4.4) |
Mise échelle dual (4.13) |
Reconstruction (5.10) |
Itérations |
Temps |
Temps |
Itérations |
Temps |
1 |
3175 |
5,1 |
7 |
189 |
2 |
2 |
3248 |
6,1 |
6,8 |
335 |
3,1 |
3 |
3306 |
6,7 |
7,2 |
464 |
4 |
4 |
3256 |
6,8 |
7 |
585 |
4,7 |
5 |
3375 |
8,1 |
6,7 |
702 |
5,9 |
6 |
3317 |
7,4 |
7,2 |
784 |
5,8 |
7 |
3408 |
8,6 |
6,6 |
923 |
7,3 |
8 |
3363 |
8,9 |
6,8 |
986 |
7,3 |
9 |
3460 |
9,7 |
6,9 |
1144 |
8,6 |
10 |
3468 |
9,9 |
6,5 |
1204 |
9,1 |
15 |
3544 |
11,8 |
6,6 |
1684 |
12,6 |
20 |
3567 |
12,7 |
6,6 |
2053 |
14,6 |
|
|
Tableau 5.3: Résultats numériques de la méthode de
reconstruction sur des graphes
presque série-parallèles, influence de la SP-perturbation du graphe. |
|
5.3.3. Méthodes de décomposition |
|
Dans les résultats numériques précédents, nous avons omis
volontairement la phase de décomposition d'un graphe en composantes
série-parallèles, afin de mettre en évidence le potentiel de la méthode
de reconstruction. Les tests ont été effectués sur des graphes dont une bonne
SP-décomposition était fournie (de la façon dont elle a été
obtenue, il est raisonnable de penser que la décomposition contient une SP-composante
très proche d'une des plus grandes composantes maximales), et ils montrent que la
méthode de reconstruction est potentiellement efficace pour des graphes avec une
SP-perturbation inférieure à
.
Il est donc nécessaire maintenant de proposer une méthode qui, pour un graphe
quelconque, propose une SP-décomposition avec l'une des plus grandes composantes maximales.
Le problème similaire pour les graphes planaires a été étudié et
s'avère être NP-complet (cf. [Liu77]). La plupart des
algorithmes à l'heure actuelle tentent de déterminer de bonnes solutions
approchées. Les graphes série-parallèles sont planaires, mais il n'est pas
sûr que le problème soit difficile pour cette classe de graphes.
A notre connaissance il n'existe pas de travaux pour déterminer une plus grande
composante maximale série-parallèle d'un graphe quelconque. Nous ne démontrons
pas ici la complexité du problème, ni même ne proposons une méthode
exacte. Dans notre cas, il ne faut pas consacrer trop de temps dans l'étape de
décomposition, l'efficacité de la phase de reconstruction pourrait alors être
perdue. Nous avons donc choisi d'élaborer deux méthodes rapides et simples à
implémenter, puisqu'elles reposent sur les deux algorithmes de reconnaissance de graphe
série-parallèle vus précédemment (cf. les algorithmes 5.1 et 5.4). Ces
méthodes n'offrent naturellement pas la meilleure SP-décomposition d'un graphe, mais
elles permettent tout de même à la méthode de reconstruction de rester efficace
jusqu'à
de SP-perturbation.
Les deux approches reposent sur la même idée. Lors de la reconnaissance du graphe,
c'est un blocage de la procédure qui permet de détecter que le graphe n'est pas
série-parallèle. Dans la première méthode, il n'est plus possible de
réduire le graphe. Dans la seconde méthode, il y a deux possibilités: soit les
signatures de deux arcs entrants d'un noeud de synchronisation sont différentes, soit il y a
un circuit dans le graphe et le parcours est stoppé. Dans ces trois cas, il est possible, en
supprimant judicieusement un ou plusieurs arcs de continuer la reconnaissance, le graphe n'est bien
entendu pas série-parallèle, mais l'identification de la structure
série-parallèle continue. Les arcs ainsi enlevés représentent chacun
une SP-composante. Si l'arc est agrégé, la composante est un sous-graphe, sinon il
s'agit d'un simple arc.
Il faut noter également que l'ordre imposé à la SP-décomposition,
pour que la procédure de reconstruction fonctionne, est facile à obtenir avec cette
approche. Les arcs sont retirés du graphe dans un certain ordre, en inversant cet ordre, la
SP-décomposition est triée comme souhaité. En effet, au moment où l'on
retire un arc, ses extrémités sont encore dans le graphe, la ou les composantes les
contenant seront retirées par la suite, et se trouveront alors avant l'arc dans la
SP-décomposition. Penchons-nous maintenant, pour les deux approches de reconnaissance, sur
les stratégies intuitives élaborées pour sélectionner le ou les arcs
à retirer au moment du blocage de la procédure.
|
5.3.3.1. Approche par réduction |
Pour reconnaître un graphe série-parallèle, cette méthode
réduit successivement les relations séries et parallèles simples du graphe.
Lorsque la procédure s'arrête, soit il reste un seul arc dans le graphe et à ce
moment le graphe est série-parallèle, soit il faut décider d'enlever un arc
pour poursuivre les réductions. En supprimant un arc, il est impossible de faire
apparaître une relation parallèle, en revanche des relations séries (au maximum
) peuvent être révélées. Une manière intuitive de
procéder consiste, en cas de blocage, à supprimer l'arc qui fait apparaître le
plus de relations séries, et s'il n'en existe aucun, il faut alors sélectionner celui
qui en favorisera le plus. Pour cela, nous avons choisi d'attribuer à chaque noeud
deux scores, l'un qui sera utilisé lorsque
est l'origine d'un arc (i.e. le score
), et l'autre lorsqu'il est la destination d'un arc (i.e. le score
). Le score d'un arc
est la somme
, les scores des noeuds étant calculés de la manière suivante.

Intuitivement, le noeud
avec
et
est le meilleur candidat pour être l'origine de l'arc à supprimer, il
fait apparaître une relation série et totalise un score de
. De la même manière, le noeud
avec
et
est le meilleur candidat pour être la destination de l'arc à supprimer.
Un arc qui fait apparaître deux relations séries totalise donc un score de
. Ce score décroît ensuite plus les extrémités de l'arc
possèdent des degrés entrant et sortant élevés, puisque cela signifie
de nombreuses suppressions d'arc avant qu'elles soient une relation série. Les suppressions
d'arc altérant la connexité du graphe sont pénalisées d'un score
négatif, ainsi un noeud qui risque d'obtenir un degré entrant ou sortant nul se voit
attribué un score de
,
doit être choisi de manière à ce que même le meilleur score
de la seconde extrémité de l'arc ne puisse pas remonter le score de l'arc au dessus
de 0, toute valeur
peut donc convenir. La figure 5.20 montre un exemple de scores. Les arcs
et
totalisent le meilleur score, et supprimer l'un ou l'autre permet bien de poursuivre
la réduction du graphe par deux relations séries et une relation parallèle.
 |
|
Figure 5.20: Un exemple de score pour une SP-décomposition. |
En cas d'égalité de scores, c'est l'arc qui représente le plus petit
sous-graphe série-parallèle qui est éliminé, ainsi un arc
agrégé sera toujours préservé face à un arc non
agrégé, et l'on espère dégager de cette manière une plus grande
composante série-parallèle au final. L'algorithme de décomposition ainsi
formé a une complexité identique à celle de l'algorithme de reconnaissance par
réduction sur lequel il repose (i.e.
opérations), car la sélection d'un arc à éliminer
nécessite
opérations (pour attribuer un score à tous les arcs du graphe).
|
5.3.3.2. Approche par chemin |
Dans cette approche, l'identification d'un graphe non série-parallèle survient de
deux manières. La première se produit lors du parcours des noeuds dans un ordre
topologique, s'il existe un circuit dans le graphe, il arrive un moment où le parcours ne
peut plus continuer, et le circuit passe forcément par l'un des noeuds visités en
dernier (i.e. noeuds pour lesquels leurs prédécesseurs et eux mêmes ont
été visités, mais pas tous leurs successeurs), notons
l'ensemble de ces noeuds. En effet, plus aucun noeud ne peut être visité
car dans l'ensemble
, deux noeuds au moins sont mutuellement prédécesseurs l'un de l'autre,
directement ou indirectement. La procédure consiste alors pour chaque noeud de
à vérifier que l'un de ses arcs entrants ne fait pas partie d'un
circuit. Une fois un tel circuit trouvé, l'arc entrant impliqué est
éliminé du graphe, et la procédure de reconnaissance peut reprendre.
L'algorithme 5.14 précise ce processus d'élimination.
Algorithme 5.14: briserCircuit(graphe
,ensemble
,arc
)
; /* L'arc à éliminer. */
tant que
et
faire
soit
un noeud de
;
;
pour tout
et tant que
faire
si
alors
;
sinon
/* On utilise l'algorithme de Minty avec la bonne
coloration */
/* (cf. section 2.1.4) pour rechercher le cycle. */
cycleMinty( , , , );
si
alors
;
fin si;
fin pour;
fin tant que;
fin algorithme;
La seconde manière d'identifier un graphe non-série parallèle survient
lorsqu'à la visite d'un noeud
, il est impossible d'établir une synchronisation, i.e. un arc entrant
possède une signature différente de tous les autres arcs entrants de
.
 |
|
Figure 5.21: Des exemples de situations de suppression d'arc. |
Deux possibilités intuitives s'offrent alors, supprimer cet arc (cf. figure 5.21a) ou
bien s'il est issu d'un noeud de branchement
de degré sortant
, vérifier que la suppression de son voisin (i.e. le second arc sortant de
) ne lui permet pas d'obtenir une signature identique à l'un des arcs entrants de
(cf. figures 5.21b et 5.21c). Pour cela, il suffit de vérifier que la signature
de l'arc entrant de
, s'il existe, possède une signature identique à celle de l'un des arcs
entrants de
. En résumé, quand un arc
bloque la procédure de reconnaissance, soit on le supprime, soit on supprime
son voisin au branchement
si cela permet ensuite la synchronisation de l'arc
avec l'un de ses voisins entrants de
. L'algorithme 5.15 détaille cette procédure d'élimination.
Algorithme 5.15: supprimerArc(graphe
,arc
)
si
ou
alors /* Supprimer
. */
sinon
soit
;
si
tel que
alors /* Supprimer
. */
sinon
soit
tel que
;
/* Supprimer
. */
fin si;
fin si;
fin algorithme;
L'algorithme de décomposition résultant a une complexité identique
à celle de l'algorithme de reconnaissance par chemin sur lequel il repose (i.e.
opérations), car la sélection d'un arc à éliminer
nécessite
opérations (pour vérifier les signatures des arcs entrants du noeud
considéré).
|
5.3.3.3. Résultats numériques |
Les résultats numériques présentés ici comparent les deux approches
de décomposition en termes de rapidité d'exécution et également de
qualité de la décomposition. Pour évaluer le deuxième critère,
la SP-décomposition obtenue au moment de la génération aléatoire des
instances sera utilisée comme référence. Même si elle n'est pas optimale
dans le sens où elle ne contient pas forcément la plus grande SP-composante du
graphe, elle en est certainement très proche, et nous permet donc de juger tout de
même de la qualité des décompositions proposées par les deux approches.
Le tableau 5.4 montre le temps de calcul de chaque méthode avec le nombre de composantes
qu'elle a obtenue pour différentes tailles de graphe (avec une SP-perturbation fixée
à
). Le tableau 5.5 met en évidence le comportement des méthodes en
fonction de la SP-perturbation du graphe (avec
et
).
Dimension graphe |
Décomposition idéale
Composantes |
Par réduction |
Par chemin |
Noeuds |
Arcs |
Composantes |
Temps |
Composantes |
Temps |
50 |
200 |
3 |
3 |
0,02 |
3 |
0,02 |
50 |
400 |
5 |
5 |
0,04 |
4 |
0,04 |
100 |
400 |
5 |
5 |
0,04 |
5 |
0,04 |
100 |
800 |
9 |
11 |
0,08 |
10 |
0,07 |
500 |
2000 |
21 |
25 |
0,32 |
26 |
0,23 |
500 |
4000 |
41 |
51 |
0,9 |
53 |
0,46 |
1000 |
4000 |
41 |
50 |
0,97 |
55 |
0,5 |
1000 |
8000 |
81 |
100 |
3,1 |
112 |
1 |
|
|
Tableau 5.4: Comparaison des méthodes de SP-décomposition,
influence de la dimension du graphe. |
Pour une SP-perturbation de quelques pourcents, les deux méthodes semblent finalement
très proches. L'approche par réduction propose néanmoins des
décompositions apparemment de meilleure qualité, puisqu'elles possèdent moins
de composantes. En revanche, elle est un peu moins rapide que l'approche par chemin pour une
SP-perturbation raisonnable, et devient inefficace pour une forte SP-perturbation. Les
résultats numériques présentés en conclusion montreront que la vitesse
de décomposition obtenue par nos approches n'est pas un facteur décisif pour choisir
entre les deux méthodes, en raison du faible degré de SP-perturbation. Le temps de
décomposition est négligeable par rapport au temps de reconstruction. En revanche la
qualité de la décomposition est beaucoup plus importante, car elle semble influer
directement sur la vitesse de la phase de reconstruction.
SP-perturbation
Pourcentage |
Décomposition idéale
Composantes |
Par réduction |
Par chemin |
Composantes |
Temps |
Composantes |
Temps |
1 |
31 |
38 |
0,56 |
41 |
0,33 |
2 |
61 |
75 |
0,81 |
83 |
0,34 |
5 |
151 |
190 |
1,6 |
207 |
0,34 |
10 |
301 |
369 |
2,7 |
390 |
0,37 |
20 |
601 |
697 |
5,2 |
728 |
0,39 |
30 |
901 |
1000 |
7,9 |
1036 |
0,45 |
40 |
1201 |
1309 |
10,8 |
1341 |
0,47 |
50 |
1501 |
1602 |
14 |
1637 |
0,5 |
|
|
Tableau 5.5: Comparaison des méthodes de SP-décomposition,
influence de la SP-perturbation du graphe. |
Pour conclure, nous présentons le comportement en pratique de la méthode de
reconstruction complète, avec les deux méthodes de décomposition utilisant
l'approche par réduction (A) et l'approche par chemin (B). En outre, les résultats
détaillent le temps passé dans les principales étapes de la reconstruction: la
décomposition (I), l'agrégation (II), la désagrégation (III) et la mise
à conformité (IV).
Dimension graphe |
Conformité (4.4) |
Echelle dual (4.13) |
Reconstruction A (5.10) |
Itérations |
Temps |
Noeuds |
Arcs |
Itérations |
Temps |
Temps |
I |
II |
III |
IV |
V |
50 |
200 |
251 |
0,08 |
0,1 |
9 |
0,02 |
0,02 |
0,01 |
0,01 |
0,07 |
50 |
400 |
471 |
0,16 |
0,2 |
21 |
0,04 |
0,05 |
0,02 |
0,01 |
0,15 |
100 |
400 |
484 |
0,22 |
0,32 |
32 |
0,04 |
0,04 |
0,02 |
0,03 |
0,16 |
100 |
800 |
935 |
0,47 |
0,61 |
59 |
0,08 |
0,1 |
0,04 |
0,08 |
0,36 |
500 |
2000 |
2125 |
3 |
4,6 |
209 |
0,32 |
0,26 |
0,11 |
1 |
1,9 |
500 |
4000 |
4303 |
8 |
10,7 |
339 |
0,9 |
0,61 |
0,23 |
3,3 |
5,4 |
1000 |
4000 |
4103 |
11,8 |
17 |
494 |
0,97 |
0,64 |
0,24 |
6,2 |
8,5 |
1000 |
8000 |
8224 |
27,7 |
33,6 |
739 |
3,1 |
1,7 |
0,48 |
16,4 |
22,5 |
|
|
Dimension graphe |
Reconstruction B (5.10) |
Itérations |
Temps |
Noeuds |
Arcs |
I |
II |
III |
IV |
V |
50 |
200 |
10 |
0,02 |
0,02 |
0,01 |
0,01 |
0,08 |
50 |
400 |
21 |
0,04 |
0,05 |
0,02 |
0,01 |
0,15 |
100 |
400 |
36 |
0,04 |
0,05 |
0,02 |
0,03 |
0,17 |
100 |
800 |
60 |
0,07 |
0,1 |
0,04 |
0,07 |
0,35 |
500 |
2000 |
235 |
0,23 |
0,27 |
0,11 |
1,24 |
2 |
500 |
4000 |
374 |
0,46 |
0,68 |
0,24 |
3,7 |
5,5 |
1000 |
4000 |
542 |
0,5 |
0,67 |
0,25 |
6,4 |
8,3 |
1000 |
8000 |
856 |
1 |
1,9 |
0,48 |
18,3 |
22,5 |
|
|
Tableau 5.6: Résultats numériques des méthodes de
reconstruction sur des graphes
presque série-parallèles, influence de la dimension du graphe. |
Le temps total de la méthode de reconstruction est indiqué dans la colonne (V).
Pour connaître en détails 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 et des coûts entiers. Le nombre
d'itérations présenté correspond au nombre de recherches de cycle et de
cocycle lors de la phase de mise à conformité. Les temps de calcul sont
exprimés en secondes sur une machine RISC-6000 à 160 MHz.
Le tableau 5.6 montre le comportement des deux versions de la méthode de reconstruction
en fonction de la taille du graphe (avec une SP-perturbation de
), et le tableau 5.7 montre l'évolution de leurs performances par rapport
à la SP-perturbation (avec
et
). On constate que le temps passé dans les phases d'agrégation et de
désagrégation est négligeable. Le temps d'exécution de la phase de
décomposition l'est un peu moins mais reste faible par rapport à celui de la phase de
mise à conformité. Comme nous l'avions déjà remarqué, la phase
de mise à conformité dans la reconstruction effectue peu d'itérations par
rapport à la méthode de mise à conformité seule, mais les
itérations sont plus longues à cause d'une structure de données plus lourde
pour manipuler des coûts linéaires avec plus de deux morceaux. Nous constatons aussi
que, moins il y a de SP-composantes, plus la reconstruction est rapide, l'approche par
réduction pour la décomposition semble mieux adaptée, mais elle ne rend la
reconstruction efficace que jusqu'à
de SP-perturbation.
SP-perturbation
Pourcentage |
Conformité (4.4) |
Echelle dual (4.13) |
Reconstruction A (5.10) |
Itérations |
Temps |
Itérations |
Temps |
Temps |
I |
II |
III |
IV |
V |
0,5 |
3245 |
5,2 |
6,8 |
154 |
0,44 |
0,37 |
0,17 |
1,2 |
2,5 |
1 |
3175 |
5,1 |
7 |
282 |
0,56 |
0,41 |
0,16 |
2 |
3,4 |
1,5 |
3204 |
5,4 |
7,2 |
424 |
0,68 |
0,47 |
0,17 |
2,8 |
4,4 |
2 |
3248 |
6,1 |
6,8 |
540 |
0,81 |
0,52 |
0,16 |
3,8 |
5,6 |
3 |
3306 |
6,7 |
7,2 |
894 |
1 |
0,62 |
0,16 |
6,3 |
8,4 |
5 |
3375 |
8,1 |
6,7 |
1321 |
1,6 |
0,81 |
0,16 |
8,9 |
11,8 |
6 |
3317 |
7,4 |
7,2 |
1692 |
1,8 |
0,85 |
0,18 |
10 |
13,2 |
7 |
3408 |
8,6 |
6,6 |
1845 |
2 |
0,91 |
0,17 |
12 |
15,5 |
9 |
3460 |
9,7 |
6,9 |
2414 |
2,6 |
1,1 |
0,16 |
15,2 |
19,4 |
10 |
3468 |
9,9 |
6,5 |
2748 |
2,7 |
1,1 |
0,17 |
16,8 |
21,1 |
|
|
SP-perturbation
Pourcentage |
Reconstruction B (5.10) |
Itérations |
Temps |
I |
II |
III |
IV |
V |
0,5 |
181 |
0,33 |
0,39 |
0,17 |
1,3 |
2,5 |
1 |
312 |
0,33 |
0,44 |
0,16 |
2,1 |
3,4 |
1,5 |
485 |
0,33 |
0,49 |
0,17 |
3,3 |
4,5 |
2 |
595 |
0,34 |
0,54 |
0,16 |
4 |
5,3 |
3 |
1121 |
0,34 |
0,65 |
0,16 |
7,5 |
9 |
5 |
1596 |
0,34 |
0,85 |
0,18 |
10,7 |
12,4 |
6 |
1830 |
0,35 |
0,89 |
0,17 |
10,7 |
12,4 |
7 |
2184 |
0,35 |
0,99 |
0,16 |
14,1 |
15,9 |
9 |
2789 |
0,37 |
1,1 |
0,16 |
17,8 |
19,8 |
10 |
3105 |
0,37 |
1,2 |
0,16 |
19,3 |
21,3 |
|
|
Tableau 5.7: Résultats numériques des méthodes de
reconstruction sur des graphes
presque série-parallèles, influence de la SP-perturbation du graphe. |
Il ressort de ces résultats numériques deux points importants. Le premier est que
la qualité de la SP-décomposition est importante pour l'efficacité de la phase
de reconstruction. En outre, compte tenu du peu de temps consacré à la
décomposition, il semble possible d'investir dans une méthode plus coûteuse
mais donnant des SP-décompositions de meilleure qualité. Le second point est qu'il y
a un réel décalage entre les performances de la mise à conformité pour
des coûts linéaires avec deux morceaux et des coûts avec plus de morceaux. Un
gain important de vitesse pourrait profiter à la méthode de reconstruction, en
utilisant une structure de données plus performante pour représenter des coûts
linéaires avec plus de deux morceaux.
Dans ce chapitre, une méthode d'agrégation tout à fait efficace, en
opérations, a été proposée pour résoudre le
problème de la tension de coût minimal dans des graphes
série-parallèles. Cette classe d'instances étant trop idéale, il nous a
semblé important de considérer des graphes avec une structure plus réaliste.
Pour cela, nous proposons la notion peu formelle de graphe presque série-parallèle
qui permet toutefois d'appréhender et de mesurer la complexité de la structure d'un
graphe par rapport au problème de la tension de coût minimal.
Une méthode de reconstruction a été proposée pour ces graphes
presque série-parallèles. Des résultats numériques, il ressort un
potentiel intéressant de la méthode dont nous n'avons pas complètement
réussi à profiter. Il faudrait en effet étudier des méthodes de
décomposition d'un graphe quelconque en composantes série-parallèles, en
expérimentant deux types d'optimalité: minimiser le nombre de composantes ou obtenir
la composante maximale la plus grande.
Néanmoins, avec la méthode d'agrégation, la méthode de
reconstruction et les méthodes du chapitre précédent, il est possible de
proposer différents algorithmes pour le problème de la tension de coût minimal,
chacun étant efficace sur différentes structures de graphe: la mise à
l'échelle est très efficace sur des graphes a priori quelconques, la mise à
conformité prend le relais pour des graphes plus structurés, se rapprochant des
graphes presque série-parallèles et enfin l'agrégation s'avèrent
très efficace pour des graphes série-parallèles. La combinaison de la mise
à conformité et de l'agrégation permet de traiter plus efficacement le
problème de la tension de coût minimal sur des graphes presque
série-parallèles, que nous avons définis comme étant des graphes avec
une SP-perturbation inférieure à
.
|
|
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). |
|
|
|