# Alobé (TP2)

## 1. Description

Alobé est un logiciel libre permettant de manipuler de grands graphes non-orientés décrits par la liste de leurs arrêtes. Il possède les caractéristiques suivantes :

- Il est distribué sous la licence GNU General Public License
- Il est écrit en C (bien qu'écrit au départ en C++, comme en témoigne le dépôt subversion) et possède une interface en ligne de commande,
- Il implémente le calcul de la distance d'un noeud à tous les autres (exercice 1).
- Il fournit en sortie des données permettant de tracer la distribution des distance à un noeud donné (exercice 2)
- Il fournit en sortie les données permettant de tracer l'évolution de l'estimation de la distance moyenne en fonction du nombre de parcours effectués. (exercice 3)
- Il implémente le calcul de la borne inférieure du diamètre, en prenant la distance maximale d'un noeud donné à tous les autres (exercice 4).
- Il implémente le calcul de la borne supérieure du diamètre, en prenant la distance maximale dans l'arbre du parcours en largeur (exercice 5).
- Il fournit en sortie des données permettant de tracer les courbes des meilleurs bornes inférieures et supérieure en fonction du nombre de parcours effectués. (exercice 6 - défi).

### 1.1. Auteurs

Alobé a été entièrement réalisé par Glenn ROLLAND <glenux@fr.st> à l'occasion de travaux pratiques du cours de Grand Réseaux du Master 2 Ingénierie Informatique - Systèmes, Réseaux et Internet.

## 2. Pré-requis

Alobé ne nécessite pas de bibliothèques de fonctions particulières pour fonctionnner.

## 3. Se procurer Alobé

Vous pouvez télécharger la dernière archive des sources, ou bien directement la version la plus récente du projet sur le dépôt Subversion du projet.

### 3.1. L'archive des sources

Elle est disponible à l'adresse :
http://glenux2.free.fr/pub/projets/Alobe/archives/

### 3.2. Le dépôt Subversion

Afin d'obtenir les sources les plus à jour, vous pouvez utiliser le logiciel de contrôle de sources Subversion

$ svn checkout http://repository.glenux.ath.cx/svn/Cours/M2/Grand_Reseaux/TP1/

Il n'y a pas de mot de passe, il suffit donc de presser la touche "Entrée" pour l'utilisateur "anonymous", si ce dernier vous est demandé.

## 4. Utiliser Alobé

### 4.1. Compilation

Commencez par décompressez l'archive.

$ tar -xzvf alobe-0.2.tar.gz

Rendez vous ensuite dans le dossier qui vient d'être créé lors de la décompression.

$ cd alobe-0.2

Puis lancez l'auto-configuration du logiciel, puis la compilation.

$ ./autogen
$ ./configure
$ make

Le binaire produits se trouve dans le dossier :

- src/alobe

### 4.2. Utilisation

Les binaires de Alobé doivent être appelés avec la syntaxe suivante:

Usage: alobe <commande> <parametres_obligatoires> [options]

Les commandes sont les suivants:

-I, --tp2distance
  Calcule les distances à partir du noeud donné.
-J, --tp2distanceplot
  Donne la distribution des distances à partir du noeud donné.
-L, --tp2distevolution
  Donne l'évolution de l'estimation de la distance moyenne.pour un noeud donné, ou au hasard, en fonction du nombre d'itérations.
-M, --tp2limitinf
  Calcule la borne inférieure du diamètre pour un noeud donné ou au hasard, en fonction du nombre d'itérations.
-N, --tp2limitsup
  Calcule la borne supérieure du diamètre pour un noeud donné ou au hasard, en fonction du nombre d'itérations.
-O, --tp2defi
  Fournit les données permettant de tracer les courbes de meilleures bornes inférieures et supérieures du diamètre en fonction du nombre d'itération.

Les paramètres obligatoires sont les suivants:

-c, --count <entier> <fichier> </fichier>
  Nombre de noeuds du fichier d'entrée.

Les parames optionnels sont les suivants:

-i, --input <fichier>
  Le fichier d'entrée, "-" désignant l'entrée standard,
-o, --output <fichier>
  Le fichier de sorftie, "-" désignant la sortie standard.
-v, --verbose
  Passe l'affichage en mode verbeux.e numéro du noeud à lire et afficher à partir du fichier compressé
-r, --root <entier>
  Noeur servant de racine à la première itération.
-n, --iterations <entier>
  Nombre d'itérations a effectuer.

## 5. Documentation

### 5.1. Code

Vous pouvez trouver la documentation de Alobé dans le dossier doc/html de l'application, ou en suivant ce lien.

### 5.2. Remarques sur les différents exercices

#### 5.2.1. Exercice 1

On calcule la distance d'un noeud (le 24 par exemple) à tous les autres, ainsi que la moyenne de toutes ses distances, par la commande suivante:

./alobe -I -i web.data.gz -o result.txt -c 701654 -r 24

Ce qui produit le fichier result.txt suivant :

Maximum distance : 1
Average distance : 0.666667

#### 5.2.2. Exercice 2

On obtient la distribution des distances pour un noeud donné (le 24 par exemple) de la façon suivante:

$ ./alobe -J -i web.data.gz -o result.txt -c 701654 -r 24

Ce qui produit en sortie

0 1
1 336
2 3017
3 21100
4 89398
5 146225
6 145567
7 118491
8 77830
9 47189
10 21247
11 8628
12 1550
13 532
14 112
15 7
16 4

Soit le graphique suivant :

#### 5.2.3. Exercice 3

On trace l'évolution de l'estimation de la distance moyenne (en fonction du nombre d'itération) par la commande suivante:

./alobe -L -i web.data.gz -o result.txt -c 701654 -n 100 -r 24

Ce qui produit en sortie:

0 6.228710
1 7.560919
2 9.514071
3 9.537433
4 9.504442
5 9.567365
6 9.542382
7 9.429151
8 9.426282
9 9.566440
10 9.583777
11 9.450484
12 9.548250
13 9.503499
14 9.508191
15 9.475249
16 9.297400
17 9.210398
[...]

Soit sous forme graphique :

#### 5.2.4. Exercice 4

Pour calculer la borne inférieure, on fera:

./alobe -M -i web.data.gz -o result.txt -c 701654 -n 5 -r 24

Iteration 0 -- choosing root 24
-- borne inférieure 17
Iteration 1 -- choosing root 60401
-- borne inférieure 18
Iteration 2 -- choosing root 700018
-- borne inférieure 24
Iteration 3 -- choosing root 77852
-- borne inférieure 24
Iteration 4 -- choosing root 45944
-- borne inférieure 24

#### 5.2.5. Exercice 5

Pour le calcul de la borne supérieure, on fait :

./alobe -N -i ~/web.data.gz -o result.txt -c 701654 -n 10 -r 24

Iteration 0 -- choosing root 24
-- borne supérieure 33
Iteration 1 -- choosing root 96542
-- borne supérieure 33
Iteration 2 -- choosing root 49208
-- borne supérieure 33
Iteration 3 -- choosing root 436498
-- borne supérieure 33
Iteration 4 -- choosing root 309990
-- borne supérieure 32
Iteration 5 -- choosing root 538890
-- borne supérieure 32
Iteration 6 -- choosing root 266656
-- borne supérieure 32
Iteration 7 -- choosing root 529998
-- borne supérieure 32
Iteration 8 -- choosing root 140145
-- borne supérieure 32
Iteration 9 -- choosing root 640316
-- borne supérieure 32

#### 5.2.6. Exercice 6 - Défi

Le cumul des courbes précédentes se fait par :

$ ./alobe -O -i web.data.gz -o result.txt -c 701654 -n 100 -r 24

Puis :

$ ./defiplot.sh result.txt

Pour obtenir :

Remarque: pour le défi, il aurait fallu en plus utiliser une heuristique de choix des noeuds permettant de faire converger les deux courbes bornant le diamètre au plus vite. Par exemple, choisir les noeuds par degré décroissant dans la composante connexe, en supposant qu'un noeud a fort degré comme racine donne un arbre plus plat et donc la borne suppérieure par la même occasion...