Newer
Older
Nous allons analyser un réseau de collaboration scientifique en informatique. Le réseau est extrait de DBLP et disponible sur [SNAP](https://snap.stanford.edu/data/com-DBLP.html).
GraphStream permet de mesurer de nombreuses caractéristiques d'un réseau. La plupart de ces mesures sont implantées comme des méthodes statiques dans la classe [`Toolkit`](https://data.graphstream-project.org/api/gs-algo/current/org/graphstream/algorithm/Toolkit.html). Elles vous seront très utiles par la suite.
> **Note : les résultats affichés sont approximatifs, mais les calculs ont bien été réalisés avec les valeurs réelles calculées par GraphStream.**
1. Commencez par télécharger les données et les lire avec GraphStream. GraphStream sait lire ce format. Voir [`FileSourceEdge`](https://data.graphstream-project.org/api/gs-core/current/org/graphstream/stream/file/FileSourceEdge.html) et ce [tutoriel](http://graphstream-project.org/doc/Tutorials/Reading-files-using-FileSource/). Vous pouvez essayer de visualiser le graphe mais pour cette taille ça sera très lent et très peu parlant.
2. Prenez quelques mesures de base: nombre de nœuds et de liens, degré moyen, coefficient de clustering. Quel sera le coefficient de clustering pour un réseau aléatoire de la même taille et du même degré moyen ?
| Donnée | Valeur approximative |
|-----------------------------------------|----------------------|
| Nombre de noeuds ($N$) | 317080 |
| Nombre de liens ($L$) | 1049866 |
| Degré moyen ($`\langle k \rangle`$) | 6.62208890914917 |
| Coefficient moyen de clustering ($C_i$) | 0.6324308280637396 |
Pour un réseau aléatoire, le coefficient moyen de clustering est $`C_i = p = \cfrac{\langle k \rangle}{N}`$, soit $`C_i \approx \cfrac{6.622}{317080} \approx \boxed {2.088e^{-5}}`$
3. Le réseau est-il connexe ? Un réseau aléatoire de la même taille et degré moyen sera-t-il connexe ? À partir de quel degré moyen un réseau aléatoire avec cette taille devient connexe ?
Le réseau est connexe.
Pour un réseau aléatoire, le régime connecté s'atteint lorsque $`\langle k \rangle > \ln N`$.
Ici, $`\langle k \rangle \approx 6.622`$ et $`\ln N \approx 12.667`$, donc le régime n'est pas atteint. Cela signifie qu'un réseau aléatoire de la même taille et de même degré moyen ne sera pas forcément connexe.
Le degré moyen à atteindre pour n'avoir que des réseaux connexes est donc $`\langle k \rangle \gtrapprox 12.667`$.
4. Calculez la distribution des degrés et tracez-la avec `gnuplot` (ou avec votre outil préféré) d'abord en échelle linéaire, ensuite en échelle log-log. Est-ce qu'on observe une ligne droite en log-log ? Que cela nous indique ? Tracez la distribution de Poisson avec la même moyenne pour comparaison. Utilisez la commande `fit` de `gnuplot` pour trouver les coefficients de la loi de puissance et tracez-la.
La distribution de degrés $`p_k = \frac{N_k}{N}`$ est la probabilité qu'un nœud choisi au hasard ait degré $`k`$. On peut utiliser [`Toolkit.degreeDistribution()`](https://data.graphstream-project.org/api/gs-algo/current/org/graphstream/algorithm/Toolkit.html#degreeDistribution(org.graphstream.graph.Graph)) pour obtenir $`N_k`$ et normaliser par la suite :
```java
int[] dd = Toolkit.degreeDistribution(graph);
for (int k = 0; k < dd.length; k++) {
if (dd[k] != 0) {
System.out.printf(Locale.US, "%6d%20.8f%n", k, (double)dd[k] / graph.getNodeCount());
}
}
```
En traçant la distribution de degrés en échelle log-log on observe une ligne droite pendant plusieurs ordres de grandeur. Cela nous indique une loi de puissance :
On utilise ce [script](/gnuplot/plot_dd.gnu) pour tracer la distribution et estimer l'exposant de la loi de puissance.
5. Maintenant on va calculer la distance moyenne dans le réseau. Le calcul des plus courts chemins entre toutes les paires de nœuds prendra plusieurs heures pour cette taille de réseau. C'est pourquoi on va estimer la distance moyenne par échantillonnage en faisant un parcours en largeur à partir de 1000 sommets choisis au hasard. L'hypothèse des six degrés de séparation se confirme-t-elle ? Est-ce qu'il s'agit d'un réseau petit monde ? Quelle sera la distance moyenne dans un réseau aléatoire avec les mêmes caractéristiques ? Tracez également la *distribution* des distances. Formulez une hypothèse sur la loi de cette distribution.
Avec la fonction `getAverageDistance`, je calcule la distance moyenne : $`\langle d \rangle \approx 6.75`$
$`\langle d \rangle > 6`$ donc l'hypothèse des six degrés de séparations n'est pas validée avec cette approximation.
Pour vérifier qu'il s'agit d'un petit monde, on doit vérifier que $`\langle d \rangle \approx \cfrac{\ln N}{\ln \langle k \rangle}`$ :
$`\cfrac{\ln N}{\ln \langle k \rangle} \approx \cfrac{\ln 317080}{\ln 6.62208890914917} = 6.70061181886`$
Avec une différence d'environ 0.05, $`\langle d \rangle \approx \cfrac{\ln N}{\ln \langle k \rangle}`$. J'estime donc que ce graphe représente un petit monde.
D'ailleurs, pour un réseau aléatoire, la distance moyenne correspond à cette valeur.

6. Utilisez les générateurs de GraphStream pour générer un réseau aléatoire et un réseau avec la méthode d'attachement préférentiel (Barabasi-Albert) qui ont la même taille et le même degré moyen. Refaites les mesures des questions précédentes pour ces deux réseaux. Les résultats expérimentaux correspondent-ils aux prédictions théoriques ? Comparez avec le réseau de collaboration. Que peut-on conclure ?
| | Graphe aléatoire | Barabàsi-Albert |
|----------------------------------------|------------------|-----------------|
| Nombre de noeuds ($N$) | 102 | 102 |
| Nombre de liens ($L$) | 344 | 344 |
| Degré moyen ($L$) | 6.75 | 6.75 |
| Coefficient de clustering ($C_i$) | 0.084 | 0.177 |
| Distance moyenne ($\langle d \rangle$) | 2.63 | 2.5 |
| Est connexe ? | Non | Oui |

Distribution des degrés pour le graphe de Barabàsi-Albert :

Distribution des distances pour le graphe aléatoire :

Distribution des distances pour le graphe de Barabàsi-Albert :

### Conclusion
- Le réseau de collaboration est très structuré : fort clustering, régime de petit monde et loi de puissance.
- Le modèle Barabási-Albert reproduit certaines propriétés (loi de puissance, petite distance moyenne) mais pas le clustering élevé.
- Le réseau aléatoire n'imite pas du tout ces caractéristiques.
7. (*Question bonus*) S'il y a une caractéristique du réseau de collaboration que le modèle de Barabasi-Albert n'arrive pas à reproduire c'est le coefficient de clustering. Est-ce qu'on peut espérer faire mieux avec une variante de la méthode de copie :
* Le nouveau nœud choisit au hasard un nœud `v`.
* Ensuite il parcourt tous les voisins de `v` et se connecte à eux avec probabilité `p`.
* À la fin il se connecte à `v`
Essayez d'implanter un tel générateur et voir les résultats qu'il donne.