2020-12-03 18:56:35 +00:00
|
|
|
Ce raffinage décrit l'implémentation de l'algorithme de PageRank dans le cas d'une implémentation de matrice naives.
|
|
|
|
|
|
|
|
R0: Calculer le PageRank et le poids de chaque nœud d'un réseau
|
|
|
|
|
|
|
|
R1: Comment « Calculer le PageRank et le poids de chaque nœud d'un réseau » ?
|
|
|
|
Récuperer les arguments de la ligne de commande out: filename, ite_max, alpha, naif
|
2020-12-07 20:07:59 +00:00
|
|
|
Initialiser les variables out: pi, G, N
|
|
|
|
Éxecuter l'algorithme itératif in out: pi ; in: G
|
2020-12-03 18:56:35 +00:00
|
|
|
Écrire les résultats dans des fichiers in: pi, filename, N
|
|
|
|
|
|
|
|
R2: Comment « Récupérer les arguments de la ligne de commande » ?
|
2020-12-09 13:44:41 +00:00
|
|
|
args ← Récuperer les arguments de la ligne de commande
|
|
|
|
len_args ← Récuperer le nombre d'arguments de la ligne de commande
|
|
|
|
Si non() 0 < len_args <= 6 ) Alors
|
2020-12-09 13:28:36 +00:00
|
|
|
Lever l'exception ERROR_ARGS
|
2020-12-03 18:56:35 +00:00
|
|
|
Sinon
|
|
|
|
Traiter les arguments in: args, len_args ; out: filename, ite_max, alpha, naif
|
|
|
|
FinSi
|
2020-12-09 13:44:41 +00:00
|
|
|
Lors d'une exception (quelconque) Faire
|
2020-12-03 18:56:35 +00:00
|
|
|
Afficher les consignes d'utilisation
|
2020-12-09 13:28:36 +00:00
|
|
|
Fin du traitement des excpetions
|
2020-12-03 18:56:35 +00:00
|
|
|
|
2020-12-05 13:48:44 +00:00
|
|
|
R3: Comment « Traiter les arguments » ?
|
2020-12-09 13:28:36 +00:00
|
|
|
ite_max ← 150
|
|
|
|
alpha ← 0.85
|
|
|
|
naif ← False
|
2020-12-03 18:56:35 +00:00
|
|
|
i ← 0
|
|
|
|
Répéter
|
2020-12-09 13:28:36 +00:00
|
|
|
Si le ième argument est "-I" Alors
|
|
|
|
ite_max ← l'entier du (i+1)ème argument
|
2020-12-03 18:56:35 +00:00
|
|
|
i ← i + 2
|
2020-12-09 13:28:36 +00:00
|
|
|
SinonSi le ième argument est "-A" Alors
|
|
|
|
alpha ← le réel du (i+1)ème argument
|
2020-12-03 18:56:35 +00:00
|
|
|
i ← i + 2
|
2020-12-09 13:28:36 +00:00
|
|
|
SinonSi le ième argument finit par ".net" Alors
|
|
|
|
filename ← le ième argument sans l'extension
|
2020-12-03 18:56:35 +00:00
|
|
|
i ← i + 1
|
2020-12-09 13:28:36 +00:00
|
|
|
SinonSi le ième argument est "-P" Alors
|
2020-12-03 18:56:35 +00:00
|
|
|
naif ← True
|
|
|
|
i ← i + 1
|
|
|
|
Sinon
|
2020-12-09 13:28:36 +00:00
|
|
|
Lever l'exception ERROR_ARGS
|
2020-12-03 18:56:35 +00:00
|
|
|
FinSi
|
|
|
|
SortirQuand i < len_args
|
|
|
|
FinRépéter
|
|
|
|
|
|
|
|
R3: Comment « Afficher les consignes d'utilisation » ?
|
|
|
|
Écrire("Erreur lors de la saisi de la commande")
|
|
|
|
Écrire("Usage: pagerank [-I max_iterations] [-A alpha] fichier_reseau.net")
|
|
|
|
|
|
|
|
R2: Comment « Initialiser les variables » ?
|
2020-12-09 13:28:36 +00:00
|
|
|
Créer H out: H, N
|
|
|
|
Créer S in: H, N ; out: S
|
|
|
|
pi ← Vecteur de Taille N remplit de 1/N
|
2020-12-09 13:44:41 +00:00
|
|
|
E ← Matrice de Taille N, N remplit de (1-alpha)/N
|
|
|
|
G ← alpha * S + E
|
2020-12-03 18:56:35 +00:00
|
|
|
|
|
|
|
R3: Comment « Créer H » ?
|
2020-12-09 13:44:41 +00:00
|
|
|
Ouvrir le fichier: filename + ".net"
|
2020-12-09 13:28:36 +00:00
|
|
|
N ← Lire(fichier)
|
|
|
|
|
|
|
|
H ← Matrice de Taille de N,N de 0
|
|
|
|
TantQue non Fin(fichier) Faire
|
|
|
|
i ← Lire(fichier)
|
|
|
|
j ← Lire(fichier)
|
|
|
|
L'element i,j de la matrice H ← 1
|
|
|
|
FinTantQue
|
2020-12-09 13:44:41 +00:00
|
|
|
Fermer le fichier: filename + ".net"
|
2020-12-09 13:28:36 +00:00
|
|
|
|
|
|
|
Pour i de 0 à N-1 Faire
|
2020-12-09 13:44:41 +00:00
|
|
|
somme_ligne ← La Somme la ligne i de la matrice H
|
|
|
|
Si somme_ligne /= 0
|
|
|
|
La ligne i de la matrice H ← La ligne i de la matrice H, divisé par somme_ligne
|
|
|
|
FinSi
|
2020-12-09 13:28:36 +00:00
|
|
|
FinPour
|
2020-12-03 18:56:35 +00:00
|
|
|
|
|
|
|
R3: Comment « Créer S » ?
|
2020-12-09 13:28:36 +00:00
|
|
|
S ← H
|
2020-12-09 13:44:41 +00:00
|
|
|
Pour i de 0 à N-1 Faire
|
|
|
|
somme_ligne ← La Somme la ligne i de la matrice S
|
|
|
|
Si somme_ligne = 0
|
|
|
|
La ligne i de la matrice S ← 1/somme_ligne
|
|
|
|
FinSi
|
2020-12-09 13:28:36 +00:00
|
|
|
FinPour
|
2020-12-03 18:56:35 +00:00
|
|
|
|
|
|
|
R2: Comment « Éxecuter l'algorithme itératif » ?
|
2020-12-09 13:28:36 +00:00
|
|
|
G ← Transposer(G)
|
2020-12-07 20:07:59 +00:00
|
|
|
Pour i de 1 à ite_max Faire
|
2020-12-09 13:44:41 +00:00
|
|
|
pi ← G_transpo multiplié matriciellement par pi
|
2020-12-09 13:28:36 +00:00
|
|
|
FinPour
|
2020-12-03 18:56:35 +00:00
|
|
|
|
|
|
|
R2: Comment « Écrire les résultats dans des fichiers » ?
|
2020-12-09 13:28:36 +00:00
|
|
|
Coupler les poids et leur indice in: pi ; out: pi_couple
|
2020-12-09 13:44:41 +00:00
|
|
|
Trier pi_couple selon sa première colonne
|
2020-12-09 13:28:36 +00:00
|
|
|
|
2020-12-09 13:44:41 +00:00
|
|
|
Ouvrir le fichier: filename + ".p"
|
|
|
|
Écrire dans le fichier la première colonne de pi_couple
|
|
|
|
Fermer le fichier: filename + ".p"
|
2020-12-09 13:28:36 +00:00
|
|
|
|
2020-12-09 13:44:41 +00:00
|
|
|
Ouvrir le fichier: filename + ".net"
|
|
|
|
Écrire dans le fichier la seconde colonne de pi_couple
|
|
|
|
Fermer le fichier: filename + ".ord"
|
2020-12-03 18:56:35 +00:00
|
|
|
|
|
|
|
R3: Comment « Coupler les poids et leur indice » ?
|
2020-12-09 13:28:36 +00:00
|
|
|
pi_couple ← Matrice de Taille N,2 remplit de 0
|
|
|
|
Première Colone de pi_couple ← pi
|
|
|
|
Pour i de 0 à N-1 Faire
|
2020-12-09 13:44:41 +00:00
|
|
|
L'élément i,1 de pi-couple ← i
|
2020-12-09 13:28:36 +00:00
|
|
|
FinPour
|