Propagation sur réseau statique et dynamique



Documents pareils
Recherche dans un tableau

Cours Informatique Master STEP

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

RapidMiner. Data Mining. 1 Introduction. 2 Prise en main. Master Maths Finances 2010/ Présentation. 1.2 Ressources

1. Structure d'un programme FORTRAN 95

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Chapitre 4 Pierre, papier, ciseaux

Examen Médian - 1 heure 30

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

L analyse boursière avec Scilab

L ALGORITHMIQUE. Algorithme

Correction TD algorithmique

Application 1- VBA : Test de comportements d'investissements

Conception de circuits numériques et architecture des ordinateurs

Raisonnement par récurrence Suites numériques

Algorithmes de recherche

I- Définitions des signaux.

Chapitre 1 Régime transitoire dans les systèmes physiques

TD 3 : suites réelles : application économique et nancière

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Algorithmique et structures de données I

Conception d'un réseau de transport d'électricité

MATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */.

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

Définitions. Numéro à préciser. (Durée : )

TRIGONOMETRIE Algorithme : mesure principale

Compte-rendu de projet de Système de gestion de base de données

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

PREINSCRIPTION EN LIGNE

3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Publipostage avec Calc

Algorithmique avec Algobox

Programmation C++ (débutant)/instructions for, while et do...while

CORRECTION EXERCICES ALGORITHME 1

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Initiation à LabView : Les exemples d applications :

Ebauche Rapport finale

Organigramme / Algorigramme Dossier élève 1 SI

Chapitre 5 : Flot maximal dans un graphe

Baccalauréat ES Polynésie (spécialité) 10 septembre 2014 Corrigé

Corrigé des TD 1 à 5

1 - Clients 2 - Devis 3 - Commandes 4 - Livraisons 5 - Factures 6 - Avoirs 7 - Modèles

Vers l'ordinateur quantique

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Nombre de marches Nombre de facons de les monter

Créer et gérer des catégories sur votre site Magento

Rappels sur les suites - Algorithme

Mathématiques et petites voitures

Initiation à la programmation en Python

1. Introduction Création d'une requête...2

Comment congurer WinEdt pour L A TEX?

TUTORIAL REUTERS. Utilisation de l'utilitaire de recherche Reuters

Pourquoi l apprentissage?

Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes.

Plan du cours Cours théoriques. 29 septembre 2014

Manuel d Utilisateur - Logiciel ModAFi. Jonathan ANJOU - Maud EYZAT - Kévin NAVARRO

Série TD 3. Exercice 4.1. Exercice 4.2 Cet algorithme est destiné à prédire l'avenir, et il doit être infaillible! Exercice 4.3. Exercice 4.

PRISE EN MAIN D UN TABLEUR. Version OPEN OFFICE

Cours d algorithmique pour la classe de 2nde

Couples de variables aléatoires discrètes

MODE OPERATOIRE CIEL GESTION COMMERCIALE VERSION EVOLUTION BTS PME PMI

Éléments d'architecture des ordinateurs

TD 11. Les trois montages fondamentaux E.C, B.C, C.C ; comparaisons et propriétés. Association d étages. *** :exercice traité en classe.

Résolution de systèmes linéaires par des méthodes directes

Vision industrielle et télédétection - Détection d ellipses. Guillaume Martinez 17 décembre 2007

Représentation d un entier en base b

Université du Québec à Chicoutimi. Département d informatique et de mathématique. Plan de cours. Titre : Élément de programmation.

Algorithmique avec Algobox

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Cours Langage C/C++ Programmation modulaire

Introduction à MATLAB R

Cadastre du bruit SIT-JURA. Connecteur Arcview9.x - MSAccess. Mode d emploi. Appel formulaire. Page 1 sur 15

FONCTION COMPTAGE BINAIRE ET DIVISION DE FRÉQUENCE

LE PROBLEME DU PLUS COURT CHEMIN

Exercices du Cours de la programmation linéaire donné par le Dr. Ali DERBALA

CONCOURS DE L AGRÉGATION INTERNE «ÉCONOMIE ET GESTION» SESSION 2015 SECONDE ÉPREUVE

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

Gestion mémoire et Représentation intermédiaire

Fonctions de deux variables. Mai 2011

Découverte du logiciel ordinateur TI-n spire / TI-n spire CAS

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

V- Manipulations de nombres en binaire

Chapitre 2. Classes et objets

Introduction. I Étude rapide du réseau - Apprentissage. II Application à la reconnaissance des notes.

Commission Polydog Règlement de compétition SportPlaisir Catalogue des disciplines catégorie adresse niveau B

Correction du baccalauréat ES/L Métropole 20 juin 2014

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Mode d'emploi du plugin Grayscale_Granulometry

Feuille TD n 1 Exercices d algorithmique éléments de correction

TP : Shell Scripts. 1 Remarque générale. 2 Mise en jambe. 3 Avec des si. Systèmes et scripts

Solutions du chapitre 4

Chapitre 7 - Relativité du mouvement

Transcription:

Université de la Méditerranée UFR Sciences de Luminy Rapport de stage informatique pour le Master 2 de Physique, Parcours Physique Théorique et Mathématique, Physique des Particules et Astroparticules. Université de la Méditerranée (Aix-Marseille II) Stage sous la direction de A. Barrat (CPT) Propagation sur réseau statique et dynamique Boris ARM Marseille, le 28 février 2011

1 Introduction Un réseau est un ensemble d'objets modelisé par des points qui sont reliés les uns avec les autres. L'étude des réseau dynamique permet de modeliser et de comprendre les phénomènes naturels tels que les propagation d'épidemies, les propagations d'informations sur des réseaux existant dans la nature. La propagation se fait par contact entre un points non infecté et un point infecté. Un patient 0 est à l'origine de cette propagation. Ces réseaux peuvent être soit dynamique (qui varient au cours du temps) soit au contraire statique. Dans ce travail, nous rendrons compte d'une étude basée sur une propagation d'un message lors d'une conférence composée d'individus. Dans la première partie nous verrons les réseaux dynamiques dans la deuxième, es réseaux dynamiques. Pour ce travail, j'ai utilisé un compilateur fortran nommé Force 3.0, la modelisation informatique de la propagation sont des chiers timelinecontact qui à chaque temps décrivent tous les contacts présents à ce moment. 2 nombre d'infections Le premier programme consiste à calculer le nombre de personne ayant été infectée N en fonction du temps. L'algoritme consite à faire une boucle de un jusqu'au nombre de lignes du chiers décrivant chaque contact à chaque instant. À chaque instant diérent on calcul le nombre de nouveau points inecté et on l'additionne avec le nombre de points infectés du moments précédent. Figure 1 Nombre de points infectés en fonction du temps En outre, pour qu'un point soit infecté, il sut que l'un des deux points en contact soit déjà infecté alors que si aucun des deux ne sont infectés ou tous les deux sont infectés alors il ne se passe rien. Donc l'algoritmhe pour chaque instant calcule le nombre de points infectés et l'additionne au nombre de points infectés au moment précédent. Lorsqu'il change de moments il ecrit sur le chier de sortie le moment précédents et le nombre de points infectés au moment précédent. On trace ensuite la courbe du nombre de points infecté en fontion du temps (cf gure 1). On peut remarquer qu'il y des moments 2

où l'information ne se propage pas (la nuit, les pauses..) et des moments où au contraire elle se propage très vite (pendant les reprises). 3 Propagation sur réseau dynamique Un réseau dynamique est donc un réseau dont les contacts changent au cours du temps. On peut en s'en faire une image comme ceci sur quelques points. Pour calculer les distances entre tous les points il faut d'abord un Figure 2 Exemple de propagation sur réseau dynamique programme qui calcule tous points infectés au cours de la propagation (programme points). Pour cela, on fait une boucle sur le nombre de ligne du chier d'entrée timelinecontact et on dit d'inscrire sur un chier de sortie (points entrants) chaque points qui est infectés par un contact avec un autre points infectés sachant que le patient 0 est à l'origine de la propagation. On sait qu'un point i est infecté ou pas par la valeur 1 ou 0 dans la ième case d'un tableau à une colonne b. Ensuite dans un autre programme distance, on prend en entrée ce chier points entrants que l'on rentre dans un tableau d'une colonne a et on initialise un autre tableau d'une colonne b. On lit ensuite la première ligne du chier timelinecontact et on eectue une double boucle pour calculer toutes les distance entre tous les points a(i) et a(j). On initialise une variable d et le tableau b, on pose dans le tableau b que le premier points de la première ligne du chier timelinecontact est infecté (donc b(premierpoint)=1). On eectue une boucle tant que le point a(j) n'a pas été infecté (b(a(j))=1) et on fait se propager l'infection en même temps (on met des valeurs dans b égales à 1 à chaque fois qu'un nouveau points est infectés par un autre point déjà infecté sachant que le patient 0 est à l'origine de la propagation). Ensuite quand le points a(i) est trouvé dans timelinecontact, on se décale au moment suivant dans ce chier et on réinitialise le tableau b pour recommencer la propagation de l'infection à partie du moment où a(i) à été trouvé jusqu'à ce que le point que l'on trouve que a(j) soit infecté (avec une boucle do while). À chaque fois que le programme lit une nouvelle ligne qui a un temps diérent de la ligne d'avant et qui a un nouveau point infecté (t diérent de k), on incrémente un compteur d qui est la distance dynamique juqu'à ce que le point que l'on cherche a(j) soit infecté. On sort alors de la boucle do while et on écrit la distance dynamique dans un chier de sortie distance. Ensuite un autre programme (nombredefoispoint) qui prend en entré le chier distance calcule le nombre 3

de fois que chaque distance apparaîssent et écrit dans un chier de sortie (P) le nombre de fois qu'apparaissent les distance en fonction des distances. Dans un autre chier de sortie (nombredefoispoints), il écrit le nombre de points infecté N pour chaque distance ce qui revient à faire la somme des P sur les distance inférieures à celle que l'on cherche. Pour ce faire on fait une boucle sur le nombre de points et on initialise un tableau d'une colonne nombredynamique. On fait lire ensuite le chier distance en entrée puis on fait une boucle sur le nombre de points et on lis à chaque fois la distance dans le chier distance dynamique ddyn et on incrémente la ddyn ième case du tableau nombredynamique à chaque fois que la distance dynamique ddyn apparaît. Quand la boucle est nit, on en fait une deuxième sur ddyn allant de 1 au nombre de points pour écrire les valeurs de la distance dynamique ddyn et nombredynamique(ddyn) (qui correspond à P), à condition qu'elle ne soit pas nulle, et à chaque fois une autre variable k qui prend le cumul des nombredyn sur toutes les distances dynamiques précédentes que l'on af- che enn dans un autre chier N. On trace ensuite N et P en fonction des distances : Figure 3 fréquence des diérentes distances dynamique entre les points Figure 4 nombre de points infectés en fonction des distances dynamiques On peut s'apercevoir en regardant la gure 6 que la distance dynamique moyenne est de l'ordre de 15 dans un réseau ayant 405 points. 4 Propagation sur réseau statique Le réseau statique est la somme des contacts entre les diérents points produits par le réseau dynamique. Ce réseau ne bouge donc pas dans le temps. On peut l'illustrer dans un exemple : Dans la gure 5 le chemin dynamique est le chemin parcourue par les gros pointillés alors que le chemin 4

Figure 5 Comparaison réseau dynamique versus statique statique est celui parcourue par les petits pointillés sur des contacts qui n'existent pas au moment de la propagation dynamique. La distance statique est donc de fait plus petite que la distance dynamique. Pour calculer la distance statique, le programme distanceagreger prend en entrée le chier timelinecontact et initialise deux tableau b et c à une colonne et un tableau reseau à 9999 lignes et 9999 colonnes. On dit comme dans les cas précédents que le b(patient0)=1 et on initialise la variable qui représente le nombre de points nbpoints=0. On construit ensuite le réseau dynamique en faisant une boucle sur le nombre de ligne de timelinecontact et en lisant à chaque fois sur ce chier la contamination de j par i. Ceci se traduit dans le programme par une condition sur le fait que i doit être contaminé (b(i)=1) alors on pose reseau(i,j)=1 pour modeliser ce contact contaminant entre les deux points, et inversement si j contamine i. On incrémente au passage la variable nbpoints chaque fois qu'un contact contaminant se fait,on marque le point infecté i dans un chier points entrants et on pose b(i)=1 pour signier qu'il a été infecté. En faisant ceci sur tous les contact, on obtient le réseau agrégé constitué de tous les contacts entre tous les points ainsi que le nombre. En parcourant ainsi une colonne j de reseau(i,j) on peut donc connaître tous les points avec lesquels est en contact j. On rentre tous les points infecté dans un tableau a à une colonne pour avoir la liste de points en faisant une boucle et en lisant sur le chier pointsentrants la valeur de a(i). On fait ensuite une double boucle sur i et j allant de 1 au nombre de points si i est égale à j on retourne la valeur 0 dans un chier de sortie distanceagreger. Sinon on réinitialise des variables ntot et trouve à 0, nb et di à 1. On rentre dans la première case d'un tableau à une colonne les points a(i) dont on cherche la distance avec a(j). L'idée de l'algorithme est alors de chercher tous les voisins de a(i) ( voisins de distance 1), ensuite les voisins des voisins de a(i) (voisins de distance 2), et ensuite les voisins des voisins des voisins de a(i) (voisins de distance 3)... jusqu'à ce que l'on trouve le point a(j). Ceci ce modélise algorithmiquement en faisant une boucle tant que la variable touve n'est pas 1. Dans cette boucle on initialise à chaque fois le tableau b dont on posera la ligne a(i) égale à 1 car a(i) est le points dont l'on part et une variable k=0. On eectue ensuite une boucle sur m qui varie de 1 jusqu'à nb le nombre de point de distance di puis une autre boucle sur n allant de 1 à 9999 pour parcourir une colonne de reseau(c(m), n). On fait une condition pour que c(m) ne soit pas égale à n an de ne pas revenir en 5

arrière dans l'arborescence et une autre condition si on trouve un voisin à c(m) (reseau(c(m),n)=1). Dans cette dernière condition, on met une dernière condition pour que n ne soit pas déjà infecté (b(n) diérent de 1). Si toutes ces conditions sont vériées, on incrémente la variable k qui est le nombre de voisin de distance di. On note en suite ce point dans un tableau d qui est la liste des point de rang di, on dit que n a été infecté ce qui revient à poser b(n)=1. Et ensuite si ce n est égale à a(j) dont on cherche la distance avec a(i), alors on note dans un chier de sortie distanceagreger la distance di et on pose trouve=1 pour sortir de la boucle tant trouve=0 et ainsi changer de j. Sinon on met tous les voisins de distance di qui sont dans le tableaux d dans les voisins de distance di-1, qui sont dans le tableaux c. On incremente di et on pose le nb le nombre de voisins de distance di reliés à c(m) égale au nombre de voisins de distance d, k (nb=k), on additionne ntot et nb car ntot représente le nombre de voisins de distance d-1. Il faut donc mettre une condition lorsque m est égale au dernier voisin de rang d-1 pour qu'il change de nombre nb qui devient ntot et initialise ntot à 0. Tout ceci jusqu'à ce que l'algorithme trouve a(j) (trouve=1) et ceci pour tous les poins a(i). On trouve ensuite grâce au programme décrit dans la partie précédente la fréquence de distribution des distances ainsi que le nombre de points infectés en fonction des distances. Figure 6 fréquence des diérentes distances statiques entre les points On s'aperçoit que la distance statique moyenne est de l'ordre de 6. Figure 7 nombre de points infectés en fonction des distances statiques 6

Références [1] What's in a crowd? Analysis of face-to-face behavioral networks L. Isella, J. Stehlé, A. Barrat, C. Cattuto, J.-F. Pinton, W. Van den Broeck, J. Theor. Biol. 271 (2011) 166-180. [2] On the Dynamics of Human Proximity for Data Diusion in Ad-Hoc Networks A. Panisson, A. Barrat, C. Cattuto, G. Ruo, R. Schifanella A Algorithme pour calculer le nombre de points infectés en fonction du temps program nombre dimension a(9999) parameter(debut=1244098276,nbligne=76892,patient0=1537) open (10,le='timeline_contacts_sfhh.dat') open (13,le='nombre_sfhh.dat') do i=1,9999 a(i)=0 m=0 l=debut a(patient0)=1 do i=1,nbligne read(10,*) k, o, j if(k.eq.l) then if(a(o).eq.1) then if(a(j).eq.0) then m=m+1 a(j)=1 else if(a(j).eq.1)then m=m+1 a(o)=1 else write(13,*)l-debut, m if(a(o).eq.1) then if(a(j).eq.0) then m=m+1 7

a(j)=1 else if(a(j).eq.1)then m=m+1 a(o)=1 l=k write(13,*) l-debut,m close(13) B algoritme points program points_sfhh implicit integer(a-z) dimension a(9999) parameter(nbligne=76892,nbpoints=386) open (12,le='timeline_contacts_sfhh.dat') open (14,le='pointsentrants.dat') open (15,le='pointsortants.dat') do i=1,9999 a(i)=0 do i=1,nbligne read(12,*) k, o, j if(a(o).eq.0) then a(o)=1 write(14,*)o write(15,*)o if(a(j).eq.0) then a(j)=1 write(14,*)j write(15,*)j 8

close(12) close(13) close(14) close(15) end close(10) C algorithme distance program distance implicit integer(a-z) parameter(nbligne=76892,nbpoints=386,debut=1244098276, 8 n=1244213236,patient0=1537) dimension a(nbpoints), b(9999) open (13,le='distance_sfhh.dat') open (14,le='pointsentrants.dat') open (12,le='timeline_contacts_sfhh.dat') do i=1,nbpoints read(14,*) a(i) do i=1,9999 b(i)=0 la=1 read(12,*)k,l,m do i=1,nbpoints do j=1,nbpoints d=0 do w=1,9999 b(w)=0 b(patient0)=1 do while(b(a(i)).ne.1) 9

if (a(i).eq.m) then c=l l=m m=c goto 91 read(12,*)k,l,m if(b(l).eq.1) then if(b(m).eq.0) then b(m)=1 else if(b(m).eq.1)then b(l)=1 91 do r=1,9999 b(r)=0 d=0 t=k b(l)=1 if(a(j).eq.m) then d=d+1 goto 92 if(a(i).eq.a(j))then d=0 goto 92 do while (t.eq.k) t=k 10

read(12,*)k,l,m d=d+1 do while(a(j).ne.m) if (a(j).eq.l) then c=l l=m m=c goto 92 read(12,*)k,l,m if (k.eq.n) then goto 92 if(b(l).eq.1) then if(b(m).eq.0) then if (t.ne.k) then d=d+1 b(m)=1 else if(b(m).eq.1)then if (t.ne.k) then d=d+1 b(l)=1 t=k 92 write(13,*) d la=la+1 close(12) 11

open (12,le='timeline_contacts_sfhh.dat') close(14) close(13) end end D algoritme distanceagreger program distanceagreger implicit integer(a-z) parameter(nbligne=76892,debut=1244098276, 8 n=1244213236, patient0=1537) dimension a(9999), b(9999),c(9999),d(9999), 3 reseau(9999,9999),distance(9999,9999) open (13,le='distanceagreger_sfhh.dat') open (14,le='pointsentrants.dat') open (12,le='timeline_contacts_sfhh.dat') do i=1,9999 c(i)=0 do i=1,9999 b(i)=0 do i=1,9999 do j=1,9999 reseau(i,j)=0 b(patient0)=1 nbpoints=0 do i=1,nbligne 12

read(12,*) k, o, j if(b(o).eq.1) then if(b(j).eq.0) then reseau(o,j)=1 b(j)=1 write(14,*)j nbpoints=nbpoints+1 else if(b(j).eq.1)then reseau(j,o)=1 b(o)=1 write(14,*)o nbpoints=nbpoints+1 close(14) open (14,le='pointsentrants.dat') do i=1,nbpoints read(14,*)a(i) do i=1,nbpoints do j=1,nbpoints if(a(i).eq.a(j))then trouve=1 write(13,*) 0 goto 81 trouve=0 ntot=0 nb=1 13

c(1)=a(i) di=1 do while(trouve.ne.1) if(a(i).eq.a(j))then trouve=1 write(13,*) 0 goto 81 do m=1,9999 b(m)=0 b(a(i))=1 k=0 do m=1,nb do n=1,9999 if(c(m).ne.n)then if(reseau(c(m),n).eq.1) then if(b(n).eq.0)then k=k+1 d(k)=n b(n)=1 if(n.eq.a(j))then distance(i,j)=di write(13,*)di trouve=1 goto 81 do m=1,k c(m)=d(m) di=di+1 nb=k ntot=ntot+nb if(m.eq.nb) then nb=ntot ntot=0 14

81 write(13,*)'c est la n' close(14) close(13) end 15