TP 3 – Vagues multiples, plus court chemin
Si vous n’aviez pas réussi à terminer le TP 2, une solution pour AstAck est disponible sur la page
des TP.
Vagues dans un graphe connecté quelconque – Applications
Dans cette partie, on met en application l’algorithme AstAck du TP2 pour résoudre un problème de
consensus simple.
On suppose que chaque nœud est initialement vert ou bleu. Les processus doivent se coordonner
pour choisir une même couleur pour tous, qui correspond à la couleur initiale majoritaire. On veut
de plus qu’un processus ne change au plus qu’une fois sa couleur.
On peut résoudre ce problème à l’aide de l’algorithme suivant. Chaque processus diffuse son
identifiant et sa couleur aux autres processus à l’aide de l’algorithme AstAck. Lorsqu’il connaît la
couleur des autres processus, il peut choisir sa couleur finale. Il s’agit donc d’un algorithme à vague
multiple dans lequel chaque processus crée une vague.
Indications :
•Dans l’algorithme AstAck, chaque processus maintient l’adresse de son père dans une
variable parent. Ici chaque processus initie une vague, qui va créer un arbre de
recouvrement. Il faut donc mémoriser l’adresse d’un père pour chacun de ces arbres.
Comme on ne connaît pas le nombre de nœuds du graphe, on utilisera une table
d’association :
Map<Node, Node> m = new HashMap<Node, Node>()
La table m est définie pour chaque processus et associe à un nœud n1, initiateur de vague,
un nœud n2 qui correspond au père dans l’arbre de recouvrement qui permet de remonter à
n1.
•Un processus utilise deux compteurs qui permettent de compter les nombres de couleurs.
Pour savoir quand il a reçu toutes les couleurs, il doit connaître le nombre de processus dans
le graphe. Il peut obtenir cette information via les accusés de réception de l’algorithme
AstAck (cf. TP 2).
Remarque : on peut également résoudre le problème à l’aide d’une méthode un peu différente.
Chaque processus ne diffuse que son identifiant via AstAck, et récupère les couleurs dans les
accusés de réception.
1. Implanter cet algorithme dans un nouveau projet (consensus)
2. Pourrait-on utiliser l’algorithme Ast plutôt que AstAck ?
3. Quel est le nombre total de messages envoyés (en fonction des nombres de nœuds et
d’arêtes du graphe)?
4. Quel est le temps d’exécution ?
Une autre méthode pour résoudre le problème est d’élire un leader (également à l’aide d’une vague
multiple), puis d’utiliser ce leader comme coordinateur.