Projet : SLOOP

previous up next contents
Précédent : Programmation distribuée, parallèle, et concurrente Remonter : Fondements scientifiques Suivant : Domaines d'applications


Sous-sections


   
Algorithmique et structures discrètes

Mots clés : algorithmique, mathématiques discrètes, optimisation combinatoire, théorie des graphes, algorithmique parallèle, algorithmique distribuée .

Aperçu des outils et méthodes utilisés

Cet axe s'appuie sur les trois disciplines étroitement interconnectées que sont les Mathématiques Discrètes, l'Algorithmique et l'Optimisation Combinatoire. Si, d'une part, leurs frontières communes sont assez floues, les techniques et les outils que l'on y trouve couvrent un champ très vaste et sont utilisés dans de nombreux domaines d'application.

Par exemple, les réseaux de communication (réseaux d'interconnexion de processeurs ou réseaux de télécommunication) sont souvent modélisés par des graphes ou leurs généralisations (hypergraphes, graphes valués). Rappelons qu'un graphe (resp. graphe orienté) G = (V, E) est défini par un ensemble V de sommets et un ensemble E d' arêtes (resp. arcs) formé de paires (couples) de sommets. Typiquement, un sommet représentera un processeur, un routeur, un abonné, un central ou un commutateur. Une arête représentera une liaison physique ou virtuelle de communication entre les éléments représentés par les sommets. On peut être amené à rajouter des informations sur les sommets ou les arêtes. Par exemple, on place des valuations sur les arêtes qui correspondront à des capacités ou des largeurs de bande, ou on utilise des couleurs sur des chemins correspondant dans une fibre optique à la longueur d'onde qu'ils utilisent. Un hypergraphe H = (V, E') est une généralisation des graphes où la cardinalité des éléments de E' peut être plus grande que 2. Ces objets combinatoires permettent de modéliser des entités du monde réel bien au delà des problèmes d'interconnexion et de télécommunications. Citons par exemple les graphes de calcul ou les problèmes d'allocation de ressources. L'étude des propriétés et des comportements de ces entités est alors effectuée en profitant de l'énorme quantité de résultats existant dans la littérature en Mathématiques Discrètes, soit sur des propriétés structurelles (par exemple connectivité, couplages, ensembles indépendants, nombre chromatique, ...), soit sur des principes de construction ( graphes de Cayley, graphes extrémaux, ...), soit enfin sur l'algorithmique qui s'y rapporte (algorithmes de flot, connectivité, calcul de couverture par les sommets, ...).

Notons que beaucoup d'aspects algorithmiques ne sont pas spécifiques à la théorie des graphes. Certains algorithmes utilisent des principes généraux (partitionnement, structures de données, ...). Plus particulièrement, nous nous fondons sur des résultats de complexité concernant la possibilité ou non de fournir une solution proche de l'optimum (algorithmique d'approximation) et sur des méthodes de randomisation ou d'algorithmique probabiliste. Nous utilisons aussi des méthodes issue de l'analyse d'algorithmes (évaluation de quantités combinatoires, techniques de comptage) afin d'analyser la complexité des algorithmes (ou les propriétés de la solution). Des techniques de comptage voisines interviennent aussi quand nous utilisons des probabilités discrètes. Un certain nombre d'outils issus de la recherche opérationnelle comme la programmation convexe (programmation linéaire, programmation semi-définie positive), les techniques d'arrondi et de résolution de problèmes en nombres entiers ou encore des heuristiques (tabu search, simulated annealing, ...) sont aussi parfois utilisés.

Enfin, précisons que presque toujours nous travaillons avec des hypothèses déterministes. Par exemple, si un objet tombe en panne, il ne fonctionne plus; ce qui revient dans le graphe associé à supprimer le sommet ou l'arête modélisant l'objet. S'il arrive que nous traitions parfois des problèmes non déterministes, notre approche se limite à l'utilisation de probabilités discrètes simples (par exemple, nous pouvons intégrer la probabilité de panne d'un élément sous la forme d'une loi de Bernouilli).

Quelques exemples caractéristiques

Pour mieux cerner notre problématique, commençons par donner un résultat classique qui correspond au cas favorable où il existe un algorithme polynômial pour optimiser un paramètre : le théorème de Menger.

Théorème 1 (Menger)   Dans un graphe orienté le nombre maximum de chemins deux à deux arc-disjoints d'un sommet x à un sommet y est égal au nombre minimum d'arcs à supprimer pour déconnecter x de y.

La démonstration de ce théorème induit un algorithme en temps polynômial pour trouver les chemins disjoints ou les arcs à supprimer (le lecteur connaissant la théorie des flots aura reconnu un cas particulier du théorème du flot maximum et de la coupe minimum).

De ce théorème, on déduit le résultat suivant : soient deux ensembles de sommets S = {s1, s2,..., sk} et T = {t1, t2,..., tk}, il existe k chemins deux à deux arc-disjoints de S à T si et seulement si la suppression de k arcs ne déconnecte pas S de T. Si maintenant on cherche des chemins dont les extrémités sont fixées à l'avance (c'est-à-dire que le chemin i doit relier si à ti), alors le problème devient NP-complet même pour k = 2. Notons que :

Ces exemples démontrent l'importance d'une définition précise des modèles, puisque des variations apparemment mineures transforment un problème « facile » en un problème « difficile ».

Il est aussi fréquent qu'un problème en général NP-complet puisse être résolu dans des cas particuliers. Un exemple récent est celui du Ring Loading Problem. Étant donnés un anneau non orienté (cycle) et k couples de sommets (requêtes) (si, ti), on souhaite acheminer un trafic di de si à ti. Pour chaque requête, nous pouvons choisir de l'acheminer sur le cycle via une route qui sera soit le chemin horaire, soit le chemin anti-horaire. On appelle charge d'une arête le trafic qui l'emprunte. Notons [si, ti] l'ensemble des arêtes du chemin horaire de si a ti, et posons xi = 1 si le chemin horaire est choisi (0 sinon). Le problème d'optimisation s'écrit alors :

$\displaystyle \left\{\vphantom{\begin{array}{c} \mbox{ minimiser } \{ max_j \... ...i]}{x_i d_i}+ \sum_{j \not \in [s_i,t_i]}{ (1- x_i) d_i} \end{array} }\right.$$\displaystyle \begin{array}{c} \mbox{ minimiser } \{ max_j \{ L_j\}\} \ L_... ...n [s_i,t_i]}{x_i d_i}+ \sum_{j \not \in [s_i,t_i]}{ (1- x_i) d_i} \end{array}$ $\displaystyle \left.\vphantom{\begin{array}{c} \mbox{ minimiser } \{ max_j \{... ...i]}{x_i d_i}+ \sum_{j \not \in [s_i,t_i]}{ (1- x_i) d_i} \end{array} }\right.$

di représente le poids de la connexion (si, ti), Lj est la charge de l'arête j et maxj(Lj) est la charge maximum d'une arête, que l'on souhaite minimiser. Lorsqu'il n'y a pas de contrainte sur les poids des connexions, le problème est NP-difficile, mais il devient polynômial si di = 1. On ne connaît pas sa complexité lorsque que di est supposé borné par une constante. Enfin, il existe un algorithme polynômial qui calcule une solution dont la charge est au plus $ {\frac{3}{2}}$ fois l'optimum. Si l'on relâche la contrainte d'intégrité des xi (ce qui revient à autoriser la séparation du flux d'une requête sur le chemin horaire et anti-horaire) le problème est une instance classique de problème de programmation linéaire et se résout en temps polynômial. Cet exemple démontre une fois encore la nécessité d'hypothèses précises ; il est aussi typique car sa résolution repose sur l'utilisation conjointe d'outils de théorie des graphes, de techniques d'optimisation combinatoire (programmation linéaire, relaxation) et de techniques d'approximation.

Le Ring Loading problem provient d'un problème fondamental pour les réseaux SONET (Synchronous Optical NETworks) ou utilisant la SDH (Synchronous Digital Hierarchy).

Une variante plus complexe de ce problème consiste à colorer les chemins associés aux requêtes, de manière à ce que les chemins partageant une même arête aient des couleurs distinctes. Les différentes couleurs correspondent alors aux longueurs d'ondes disponibles dans un réseau optique. Le but est de minimiser les nombre de couleurs. Ce problème reste ouvert.



Nous pouvons classer nos recherches en trois grands domaines scientifiques décrits dans les sections suivantes.

   
Modélisation et conception de réseaux

Dans ce domaine, nous modélisons un réseau réel par un objet combinatoire. La modélisation est presque systématiquement simplificatrice, mais elle retient les paramètres critiques en jeu. Nous cherchons alors :

Un des problème de design les plus étudiés est le suivant :

[Problème ($ \Delta$, D) :] Construire le graphe de degré maximum $ \Delta$ et de diamètre [*] D ayant le maximum de sommets. Ce nombre maximum de sommets est noté N($ \Delta$, D).

Bien que d'énoncé trivial, le problème est très difficile (hormis les cas particuliers N($ \Delta$, 1) = $ \Delta$ (graphe complet) et N(2, D) = D + 1 (Cycle)). Pourtant, une valeur approximative de N($ \Delta$, D) a été théoriquement déterminée puisqu'il a été démontré qu'un graphe aléatoire de paramètres $ \Delta$et D contient quasiment un nombre optimum de sommets ; à titre d'exemple, si on ajoute à un cycle de n sommets un couplage aléatoire, le graphe obtenu est de degré 3 et de diamètre log2(n) + loglog(n) alors que l'optimal est log(n). Les méthodes constructives sont loin d'être aussi efficaces et un grand nombre de constructions de bons réseaux (i.e. bon signifiant que le réseau proposé contient plus de sommets que ceux précédemment proposés) ont été proposées. Les graphes étudiés sont souvent des graphes de Cayley basés sur un groupe fini (les sommets sont les éléments d'un groupe fini et leur voisins sont obtenus par multiplication par certains éléments spécifiques du groupe appelés générateurs). Les réseaux usuels sont en fait des graphes de Cayley sur des groupes familiers (par exemple, Zn muni des générateurs +1, - 1correspond au cycle) ; les bonnes constructions reposent alors sur des techniques d'algèbre poussée et utilisent des groupes plus complexes comme ceux agissant sur les géométries finies.

Une autre technique consiste à construire des réseaux en composant entre eux des graphes plus petits. Enfin, les graphes sur alphabet et les graphes d'arcs itérés offrent un bon compromis, car, bien qu'étant des objets assez simples, ils sont proches des meilleures constructions. C'est le cas du graphe de de Bruijn non-orienté dont les sommets sont des D-uplets (x1, x2,..., xD) avec xi $ \in$ {0, 1,...d - 1} et où (x1, x2,..., xD) est voisin de tout sommet (x2,...xD - 1*) (resp. (*x2...xD - 1xD)) obtenu par décalage à gauche (resp. à droite).

Pour conclure sur ce problème, notons que l'analogue orienté du problème ($ \Delta$, D) est bien moins difficile, puisque que les graphes de Bruijn orientés sont alors presque optimaux. Une fois un réseau construit, on cherche à déterminer diverses propriétés, comme :

Des questions directement liées à son utilisation en tant que réseau d'interconnexion peuvent aussi être abordées  : comment router les messages dans le réseau, comment y diffuser l'information (voir le livre [[11]]).

Nous sommes alors conduits à utiliser les outils développés en théorie des graphes ou à déterminer des algorithmes «efficaces» afin de résoudre ces questions.

Pour finir, citons un problème de construction non résolu provenant du CNET :

Construire un graphe à N sommets, k-connexe, de diamètre D ayant un nombre minimum d'arêtes.
Le lecteur trouvera des problèmes de conception plus spécifiques dans les domaines d'application (Cf. section 4.4).

   
Algorithmique des communications

Dans ce domaine, la topologie du réseau, les communications à effectuer et le modèle sont déjà déterminés. Le but est de réaliser un ensemble de requêtes ou demandes. Une requête est modélisée par un couple de sommets (si, ti) associé à une intensité de trafic di qui correspond à la quantité de messages que si veut envoyer à ti. Le trafic est en général un multiple entier d'un trafic considéré comme unitaire qui dépend de l'application. Satisfaire la requête consiste à trouver un (ou plusieurs) chemins de si à ti qui permettent d'écouler le trafic  di.

Le Ring Loading problem est un exemple des problèmes considérés. Deux variantes peuvent apparaître : un problème de décision (on souhaite alors simplement satisfaire les requêtes), ou un problème d'optimisation (il faut alors minimiser les ressources utilisées, ou dimensionner le réseau afin qu'il satisfasse les requêtes à un coût minimum, ou encore ne satisfaire qu'une partie des requêtes, celles représentant un profit maximum).

Il est utile de distinguer deux types de problèmes de communication :

1.
Les communications structurées (parfois appelées communications globales). Dans ce cas, les requêtes ont une structure déterminée. Par exemple cela peut être une diffusion [*] ( broadcasting) ou une diffusion partielle [*] (multi-cast). Dans un échange total (gossiping), les noeuds communiquent tous entre eux (cela peut être vu comme n diffusions concurrentes). Le plus souvent, on considère des trafics homogènes.
2.
Les communications irrégulières (ou quelconques) pour lesquelles les requêtes sont quelconques et les trafics variables.

Le premier type de communication se rencontre dans la plupart des algorithmes parallèles (par exemple, algèbre linéaire, traitement d'image, bases de données, cf section 3.3.5). Il peut aussi se rencontrer dans le domaine des télécommunications ou servir de base à la conception d'un réseau quand on ne dispose pas d'information sur le trafic (l'échange total reflète assez bien la superposition de nombreuses communications quelconques) ou si l'on souhaite assurer une qualité de service uniforme. Le deuxième type correspond plus aux problèmes posés par les réseaux de télécommunication.

Schématiquement, il existe deux grand modes de commutation : la commutation de paquets (store and forward) et la commutation de circuits (mode connecté). Dans le premier mode, les messages sont acheminés pas à pas depuis l'émetteur vers le récepteur; lors de la réception d'un message, le routeur détermine vers ou doit s'effectuer l'envoi suivant. En mode commutation de circuits, le chemin est établi soit de manière statique soit par un en-tête; les messages sont ensuite simplement transmis le long du chemin logique ainsi obtenu.

Lorsque les chemins sont établis de manière statique, le problème revient à déterminer une topologie logique satisfaisant un certain nombre de contraintes. C'est par exemple le cas pour les réseaux de type ATM, où l'on cherche une topologie logique capable d'écouler le trafic et vérifiant des contraintes de capacité, de nombre maximal de liens logiques partageant un même lien physique, ou encore de nombre de commutateurs. Dans le cas de réseaux de type WDM, c'est le nombre de couleurs ou le nombre de commutateurs optiques qui est déterminant. Toutes ces questions se formalisent sous la forme de problèmes de plongement contraint d'un graphe dans un autre (i.e. du graphe logique dans le graphe physique) Ces problèmes sont très étudiés en théorie des graphes. Pour les résoudre, on peut utiliser des techniques d'extraction de représentants : on peut chercher un ensemble minimum de sommets S tel que tout sommet soit à distance au plus $ \rho$ de S; ou encore déterminer un ensemble maximum de sommets que l'on puisse interconnecter complètement. Néanmoins, il existe une différence notable : le choix de la topologie logique, bien que contraint, est laissé au concepteur, alors que, pour des plongements classiques, la structure à placer est complètement déterminée.

     
Algorithmique du parallélisme

Le calcul parallèle de problèmes discrets traite, en bonne partie, de la solution d'un problème d'imagerie ou géométrique de taille n sur un ordinateur parallèle avec pprocesseurs. La solution parallèle est dite optimale si Tpar = O($ {\frac{T_{seq}}{p}}$), où Tpar et Tseq sont, respectivement, le temps parallèle et séquentiel requis pour résoudre le problème.

Le modèle théorique utilisé pour ce genre de problèmes a été, jusqu'à très récemment, celui où $ {\frac{n}{p}}$ = O(1), aussi connu comme le modèle de parallélisme à grain fin. Toutefois, pour qu'un algorithme parallèle soit important en pratique, il doit être portable et extensible (scalable), i.e., il doit être applicable sur plusieurs ordinateurs parallèles et efficace pour un large intervalle de valeurs de  $ {\frac{n}{p}}$.

La conception de ce type d'algorithmes est l'un des grands objectifs de l'algorithmique parallèle depuis toujours, principalement parce que les architectures de la plupart des ordinateurs existants (e.g. Paragon d'Intel et T3E de Cray) sont composés de p processeurs standards (e.g. le Sparc), chacun avec une mémoire locale importante, connectés par un réseau d'interconnexion (e.g. grille, hypercube, fat-tree). Ces machines sont d'habitude à gros grain (i.e., la taille de chaque mémoire locale est beaucoup plus grande que O(1)).

Les modèles Bulk Synchronous Processes ( BSP) and Coarse Grained Multicomputer ( CGM) sont donc composés de p processeurs avec O($ {\frac{n}{p}}$) mémoire locale chacun, connectés par un réseau d'interconnexion quelconque ou par une mémoire partagée. Le terme «bulk» fait référence au fait que le grain de calcul est important et le terme «coarse-grained» fait référence au fait que (comme dans la pratique) la taille O($ {\frac{n}{p}}$) de chaque mémoire locale est définie «beaucoup plus large» que O(1).

Nous remarquons que, s'il existe un algorithme optimal à grain fin avec Tpar = O($ {\frac{T_{seq}}{p}}$), alors, au moins d'un point de vue théorique, le problème de l'extensibilité ne se pose pas. En effet, une simulation standard (aussi appelée simulation par «processeurs virtuels» dans plusieurs systèmes d'exploitation de machines parallèles) donne un algorithme optimal pour tout n et p. Cependant, pour la plupart des réseaux d'interconnexion utilisés dans la pratique, nombreux sont les problèmes pour lesquels il n'existe pas de telles solutions optimales à grain fin ; ou encore, les algorithmes optimaux à grain fin sont impossibles à cause des limitations dues à la largeur de bande ou au diamètre (e.g. sur la grille).

Les algorithmes développés pour ces modèles ont pour but de proposer des résultats indépendants du réseau de communication des machines cibles pour que les algorithmes soient portables. Une des caractéristiques principales de cette approche est que toutes les communications entre les processeurs doivent être restreintes à un nombre constant d'étapes de communication globale. La stratégie de base est la suivante : on essaye de combiner des algorithmes séquentiels optimaux existants avec un routage global et un mécanisme de partitionnement efficaces. Chaque processeur résout alors en séquentiel un nombre constant de sous-problèmes de taille O($ {\frac{n}{p}}$) et on utilise un très petit nombre d'étapes de communication pour permuter les sous-problèmes parmi les processeurs. À la fin, chaque processeur combine les solutions des sous-problèmes pour déterminer sa partie de la solution globale, partie de taille O($ {\frac{n}{p}}$).

Cette description est aussi brève que simplifiée. Les vrais algorithmes font plus que seulement permuter des données. En fait, la vraie difficulté se trouve dans le développement des schémas de partitionnement cohérents, puisque chaque processeur résout seulement un très petit nombre de sous-problèmes de taille O($ {\frac{n}{p}}$), mais doivent déterminer leur contribution (de taille O($ {\frac{n}{p}}$)) à la résolution du problème complet (sans pour autant avoir accès à toutes les n données). La partie la plus technique de la conception des algorithmes est celle qui consiste à garantir qu'un très petit nombre d'étapes de communication globale est suffisant.


Footnotes

... diamètre[*]
Le diamètre est la distance maximale entre deux sommets.
... colorier[*]
Dans une coloration, les arêtes et/ou les sommets adjacents doivent recevoir des couleurs distinctes.
... hamiltoniens[*]
L'existence d'un cycle hamiltonien assure que le réseau contient le cycle comme sous-topologie, ce problème est aussi lié au problème du voyageur de commerce.
... diffusion[*]
consiste en l'envoi d'un message / l'établissement d'une communication depuis un sommet vers tous les autres
... partielle[*]
consiste en l'envoi d'un message / l'établissement d'une communication depuis un sommet vers un sous-ensemble des noeuds


previous up next contents
Précédent : Programmation distribuée, parallèle, et concurrente Remonter : Fondements scientifiques Suivant : Domaines d'applications