Vous êtes sur la page 1sur 2

Modélisation du Web et classement des pages par importance

laurent.jospin.59@free.fr, http://jospin.lstl.fr
Lycée Saint-Louis, Paris

On peut modéliser le web par un graphe dans lequel on définit une arête d’un site i à un site j s’il existe un lien
sur le site i pointant sur le site j.
1. Quelle représentation numérique du graphe semble plus adaptée ?
2. Ecrire une fonction qui génère un tel graphe de façon aléatoire en ajoutant des liens sortants à un site en suivant une
loi géométrique de paramètre p pris en argument (pour chaque site, on arrête d’ajouter des liens avec une probabilité
p à chaque itération). On ajoutera un lien systématique de chaque site vers lui-même.
3. On cherche à écrire un aspirateur de pages Web : une application qui télécharge une page, puis aspire les liens
depuis cette page et ce tant que l’utilisateur n’interrompt pas l’application. Quel type de parcours va-t-on utiliser ?
Pour modéliser cette application par une fonction Python, on constituera une liste des numéros des sites visités.
Après chaque téléchargement, on réalisera une expérience de Bernoulli de probabilité de succès p prise en argument
le processus, et en cas de succès on arrête la fonction et on renverra la liste des numéros des sites visités. Ecrire cette
fonction.
L’objectif de la suite de cette activité est de classer les sites internets par ordre d’importance. On estime en
premier lieu qu’un site web est important si beaucoup de sites pointent vers lui. Le principe de l’algorithme étudié est
de modéliser un surfeur aléatoire qui, partant d’une page quelconque, suit de façon équiprobable les liens des sites
web qu’il visite.

1 Simulation du surfeur et sites puits


4. Ecrire une fonction surfeur(graphe,temps,position) qui simule un surfeur aléatoire qui, partant du site position
, surfe sur le web représenté par le graphe en choisissant de façon équiprobable un lien sur chaque site web traversé à
chaque unité de l’entier temps (par exemple pour temps=3, il visitera 3 liens). Renvoyer un dictionnaire indiquant la
proportion de temps passé sur chaque site web visité par le surfeur.
5. On remarque que si un site ne contient aucun lien sortant, il « capture » le surfeur. On appelle un tel site web, un
site puit.
Ecrire une fonction qui prend en argument le web représenté par un graphe et renvoie la liste des sites puits.
6. Inversement on appelle ici site fantome un site web qui n’est pointé par aucun autre site. Ecrire une fonction qui
prend en argument le web représenté par un graphe et renvoie la liste des sites fantômes.

2 Surfeur avec téléportation


Afin d’éviter différents problèmes liés au modèle simpliste précédent, on raffine le modèle en définissant une
probabilité c d’abandonner une page web à chaque instant et de se téléporter sur une page web aléatoire quelconque.
Une valeur pertinente est c = 0,15 (que l’on peut interpréter comme : on abandonne une page web en moyenne après
environ 6 sites traversés).
On cherche maintenant à calculer la probabilité que le surfeur soit sur un site web quelconque après p unités de
temps. On initialise pour cela la probabilité qu’il soit sur chaque site initial à n1 , puis on calcule la probabilité qi qu’il
soit sur un site web i à l’instant t + 1 en utilisant les probabilité (pj ) qu’il soit sur un site web j à l’instant t :
c X pj
qi = + (1 − c)
n lj
j→i

où lj est le nombre de liens sortants du site j.


7. Ecrire une fonction qui calcule le tableau des probabilités d’être sur chaque site après un nombre d’instants pris en
argument.
L’algorithme proposé ici s’appelle PageRank et est utilisé par Google pour attribuer une mesure d’importance
à chaque site web. Source : http://images.math.cnrs.fr/Comment-Google-classe-les-pages.
html.

1
Modélisation du Web et classement des pages par importance

3 Accessibilité d’un site Web depuis un autre


8. Ecrire une fonction qui prend en argument un site Web de départ et un site Web d’arrivée et qui détermine s’il
existe un chemin permettant de passer du premier site au second et qui renvoie la longueur minimal d’un tel chemin.

4 Graphe probabiliste
On suppose désormais que les arêtes du graphe sont pondérées par des probabilités.

9. Ecrire une fonction qui vérifie que les pondérations d’un graphe peuvent bien être interprétées comme de telles
probabilités.

10. Modéliser un surfeur aléatoire.

11. Peut-on adapter la formule qui donne qi ?

12. Adapter l’algorithme de Dijkstra pour déterminer le chemin le plus probable d’un site Web de départ vers un site
Web d’arrivée.

13. Ecrire une fonction qui calcule la probabilité qu’un surfeur finisse par atteindre un site Web d’arrivée en partant
d’un site Web de départ. La précision relative des nombres à virgule en Python est de 10−16 (autrement dit, pour
Python, 1 == 1+1e-16 renvoie True).

Vous aimerez peut-être aussi