Algorithmique de la mobilité
Important: Pour chaque sujet, nous ne donnons ci-dessous qu'une description sommaire vous permettant de choisir ce qui vous intéresse le plus. Les objectifs de chaque projet seront ensuite affinés (probablement pendant la première séance) pour harmoniser la difficulté et la quantité de travail que cela représente pour chaque groupe et l'adapter au nombre de personnes dans le groupe.
Nous avons vu en TP un algorithme de maintien de forêt couvrante dans un réseau dynamique. Cet algorithme utilisait un modèle à très forte atomicité : les réétiquetages de graphes (aussi appelés protocoles de population). L'objectif de ce projet est d'implémenter une version utilisant des messages classiques (en environnement synchrone). L'algorithme existe et sa description est donné dans cet article et dans cette présentation. Cet algorithme étant assez sophistiqué, le fait de le comprendre et de l'implémenter représente déjà un projet à part entière.
Etant donné un réseau et un noeud destination $x$, on veut calculer, pour chaque noeud du réseau, la route locale qu'il faut emprunter pour rejoindre $x$ avec le moins de sauts possibles. L'objectif de ce projet est d'implémenter les fonctionnalités suivantes de manière distribuée :
Lien vers un article qui parle de choses similaires (mais qui ne donne pas de solution).
Un spanneur est un sous-graphe qui connecte tous les noeuds d'un réseau. Par exemple, un arbre couvrant est un spanneur utilisant $n-1$ arêtes. Comme on peut s'en douter, il y a un compromis entre le nombre d'arêtes utilisées et la dégradation des distances entre sommets. On parle alors de facteur d'étirement. L'objectif de ce projet est d'implémenter un algorithme existant de construction distribuée (et locale) d'un spanneur n'utilisant que deux rondes et qui garantit un étirement de $3$ avec "seulement" $O(n\sqrt{n})$ arêtes.
L'algorithme est présenté dans ce document (issu d'un polycopié de C. Gavoille).
Plusieurs robots (disons $n$) sont placés à des coordonnées aléatoires dans le plan. Ces robots sont en sommeil, pour les réveiller, il faut procéder comme suit:
L'objectif de ce projet est de minimiser le temps utilisé jusqu'au réveil du dernier robot. Il existe des travaux sur le sujet (vous pouvez chercher "freeze-tag"), cependant nous ne savons pas si les algorithmes existants sont pertinents dans le contexte d'un placement aléatoire des robots. Selon ce qui existe, vous pourrez implémenter un ou plusieurs algorithmes existants, ou en concevoir de nouveaux. Notez que l'on considère ici une version centralisée du problème (donc non distribuée).
Etant donné une source et une destination, calculer k chemins noeuds-disjoints (c'est à dire k chemins qui passent tous par des noeuds différents, hormis la source et la destination elles-mêmes). On pourra commencer par traiter le cas k=2, puis trouver le k maximum, et enfin voir si on peut mettre à jour ces routes à moindre frais lorsque la topologie change ?