From 9f321ff6cb4911bd48e1e884852384fdb16eda6e Mon Sep 17 00:00:00 2001 From: lfainsin Date: Mon, 7 Dec 2020 20:07:59 +0000 Subject: [PATCH] cf mail KJR + 2/3 changements mineurs git-svn-id: http://cregut.svn.enseeiht.fr/2020/1sn/pim/projets/GH-05@207543 e13453a9-b01f-0410-a051-f404c4f0c485 --- livrables/raffinages.txt | 52 +++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 28 deletions(-) diff --git a/livrables/raffinages.txt b/livrables/raffinages.txt index 2fa7242..4fea3f6 100644 --- a/livrables/raffinages.txt +++ b/livrables/raffinages.txt @@ -1,6 +1,9 @@ Ce raffinage décrit l'implémentation de l'algorithme de PageRank dans le cas d'une implémentation de matrice naives. Une syntaxe proche du python3 est adoptée pour simplifier l'écriture et la lisibilité. -DISCLAIMER: raffinages pas encore finis + +DISCLAIMER: Cette implémentation n'est pas la plus efficace, mais la plus simple. + +On suppose que l'on utilise un language fortement typé (utile pour la robustesse). On suppose que les procédures/fonctions suivantes sont élémentaires: Std: - Arguments @@ -11,7 +14,6 @@ On suppose que les procédures/fonctions suivantes sont élémentaires: - Ouvrir - Fermer - Fin // end of file - - Abs - Somme Matrice: @@ -27,8 +29,8 @@ 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 - Initialiser les variables out: pi, G, epsilon, N - Éxecuter l'algorithme itératif in out: pi ; in: G, epsilon + Initialiser les variables out: pi, G, N + Éxecuter l'algorithme itératif in out: pi ; in: G Écrire les résultats dans des fichiers in: pi, filename, N R2: Comment « Récupérer les arguments de la ligne de commande » ? @@ -39,26 +41,27 @@ R2: Comment « Récupérer les arguments de la ligne de commande » ? Sinon Traiter les arguments in: args, len_args ; out: filename, ite_max, alpha, naif FinSi - Si Exception(QUELCONQUE) + Quand Exception(QUELCONQUE) + // ici on attend principalement les exceptions: EEROR_ARGS et CONSTRAINT_ERROR Afficher les consignes d'utilisation Fin Si R3: Comment « Traiter les arguments » ? - ite_max ← 150 - alpha ← 0.85 - naif ← False + ite_max ← 150 // Integer + alpha ← 0.85 // Float + naif ← False // Boolean i ← 0 Répéter Si args[i] = "-I" Alors - ite_max ← args[i+1] + ite_max ← Integer(args[i+1]) i ← i + 2 SinonSi args[i] = "-A" Alors - alpha ← args[i+1] + alpha ← Float(args[i+1]) i ← i + 2 - SinonSi args[i][-4:-1] == ".net" Alors + SinonSi args[i][-4:-1] = ".net" Alors filename ← args[i][0:-4] i ← i + 1 - SinonSi args[i] == "-P" Alors + SinonSi args[i] = "-P" Alors naif ← True i ← i + 1 Sinon @@ -72,12 +75,10 @@ R3: Comment « Afficher les consignes d'utilisation » ? Écrire("Usage: pagerank [-I max_iterations] [-A alpha] fichier_reseau.net") R2: Comment « Initialiser les variables » ? - epsilon ← 0.01 Créer H out: H, N Créer S in: H, N ; out: S - pi ← Ones(N, N)/N - E ← Ones(N, N) * (1-alpha)/N - G ← alpha * S + E + pi ← Ones(N, 1)/N + G ← alpha * S + Ones(N, N) * (1-alpha)/N R3: Comment « Créer H » ? fichier ← Ouvrir(filename + ".net") @@ -96,27 +97,22 @@ R3: Comment « Créer H » ? FinPour R3: Comment « Créer S » ? - X ← Ones(N, 1) - V ← H * X + V ← H * Ones(N, 1) S ← H Pour i de 0 a N-1 Faire Si V[i] = 0 Alors - S[i,:] = 1/N + S[i,:] ← 1/N Fin Si FinPour R2: Comment « Éxecuter l'algorithme itératif » ? - i ← 0 - Répéter - pi_last ← pi + Pour i de 1 à ite_max Faire pi ← Transposer(G) * pi - i ← i + 1 - SortirQuand i >= ite_max ou Abs(pi - pi_last) < epsilon - FinRépéter + FinPour R2: Comment « Écrire les résultats dans des fichiers » ? Coupler les poids et leur indice in: pi ; out: pi_couple - pi_couple ← Trier(pi_couple, 'c', 0) // on trie selon la première colonne + pi_couple ← Trier(pi_couple, 0) // on trie selon la première colonne fichier ← Ouvrir(filename + ".p") Écrire(fichier, pi_couple[:,0]) @@ -128,7 +124,7 @@ R2: Comment « Écrire les résultats dans des fichiers » ? R3: Comment « Coupler les poids et leur indice » ? pi_couple ← Zeros(N, 2) - pi_couple[:, 0] = pi - Pour i de 0 N-1 Faire + pi_couple[:, 0] ← pi + Pour i de 0 à N-1 Faire pi_couple[i, 1] ← i FinPour \ No newline at end of file