diff --git a/README.md b/README.md index 9db5a956516579412248cf5b35eb42dbb8ef5057..9e8e33234f46f7c50b47147aa9a2c3ce8d4c1865 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ double averageDegree = Toolkit.averageDegree(graph); ```java double clusteringCoefficient = Toolkit.averageClusteringCoefficient(graph); ``` -- Coefficient de clustering (aléatoire) : ⟨k⟩/N = 2.0884599814397534E-5 +- Coefficient de clustering (aléatoire) : ⟨k⟩/N = 2.0884599814397534E-5 ## 3- Autres mesures Voyons maintenant si le graphe est connexe : @@ -115,21 +115,20 @@ System.out.println("Distance moyenne du réseau Aléatoire : " + NetworkDistance ``` Tracer les distributions des distances : +![Distribution des distances](dist_distribution_plot.png) -![Distribution des distances](distance_distribution.png) +###### Analyse de la courbe des distances moyennes : -- Analyse de la courbe des distances moyennes : +- Forme en cloche avec une décroissance symétrique de chaque côté. -Forme en cloche avec une décroissance symétrique de chaque côté. - -La courbe montre un pic central autour de 6. Cela suggère que la distance moyenne entre +- La courbe montre un pic central autour de 6. Cela suggère que la distance moyenne entre les paires de nœuds est proche de cette valeur. Cela soutient l'hypothèse des six degrés de séparation, car la majorité des distances sont à 6 ou moins. -Décroissance rapide : Les distances très petites et très grandes sont rares, tandis que les distances proches de la moyenne sont les plus fréquentes. +- Décroissance rapide : Les distances très petites et très grandes sont rares, tandis que les distances proches de la moyenne sont les plus fréquentes. -- Formulez une hypothèse sur la loi de cette distribution. +###### Formulez une hypothèse sur la loi de cette distribution. On conclut donc que la forme de la distribution est proche d'une loi normale, ce qui est souvent observé dans les réseaux petits mondes. @@ -167,7 +166,6 @@ public static Graph createRandomGraph(Graph initialGraph) { return graphAlea; } - ``` Les caractéristiques de ce graphe sont : @@ -188,6 +186,10 @@ j'ai aussi calculé les degrés de distribution à l'échelle linéaire et à l' ![Distribution des degrés](degree_distribution_loglog_random.png) +- Distribution des distances : + +![Distribution des distances](random_distribution_plot.png) + 2 - Le graphe Barabàsi-Albert: @@ -222,10 +224,10 @@ public static Graph generateBarabasiAlbertGraph(Graph initialGraph) { Les caractéristiques de ce graphe sont : -Nombre de nœuds : 317080 -Nombre de liens : 1108680 -Degré moyen : 6.993061542510986 -Coefficient de clustering : 4.235788849759945E-4 +- Nombre de nœuds : 317080 +- Nombre de liens : 1108680 +- Degré moyen : 6.993061542510986 +- Coefficient de clustering : 4.235788849759945E-4 j'ai aussi calculé les degrés de distribution à l'échelle linéaire et à l'échelle log-log @@ -238,6 +240,9 @@ j'ai aussi calculé les degrés de distribution à l'échelle linéaire et à l' ![Distribution des degrés](degree_distribution_loglog_ba.png) +- Distribution des distances : + +![Distribution des distances](ba_distribution_plot.png) Comparaison des réseaux générés @@ -289,7 +294,7 @@ En résumé, ces expériences confirment que le modèle Barabási-Albert est plu jouent un rôle important. ## 7- La méthode Copie : -La méthode de copie modifiée sert à générer un réseau en imitant des caractéristiques des réseaux réels, comme la formation +La méthode de copie sert à générer un réseau en imitant des caractéristiques des réseaux réels, comme la formation de triangles et un haut coefficient de clustering. Comment ça fonctionne ? @@ -467,11 +472,19 @@ ou non et on passera au else donc le scénario 3 (on convint 50% des gens à con if (immunizationFraction > 0) { int immunizedCount = (int) (immunizationFraction * graph.getNodeCount()); if (randomImmunization) { - // Immunisation aléatoire : immuniser des nœuds directement + // Récupérer tous les nœuds dans une liste + List allNodes = new ArrayList<>(graph.nodes().toList()); + + // Mélanger la liste pour une sélection aléatoire unique + Collections.shuffle(allNodes, random); + + // Immuniser les premiers `immunizedCount` nœuds for (int i = 0; i < immunizedCount; i++) { - Node node = graph.getNode(random.nextInt(graph.getNodeCount())); - node.setAttribute("immune", true); - } + Node node = allNodes.get(i); + if (node != null) { + node.setAttribute("immune", true); + } + } } else { // Immunisation sélective : immuniser un voisin pour 50% des nœuds existants List nodes = new ArrayList<>( graph.nodes().toList()); @@ -564,9 +577,63 @@ int totalNonImmune = 0; return infectedFractions; } ``` + + +#### Attention : La réalisation d'un scénario autour des valeurs critiques est sensible aux conditions initiales. +c'est pour ça que j'ai simulé plusieurs fois chaque scénario en **itérant sur 10** et en faire la moyenne après. + +```java +// --- Scénarios avec itérations --- +for (int scenario = 0; scenario < 3; scenario++) { +double[] averageFractions = new double[daysToSimulate]; +Arrays.fill(averageFractions, 0); // Initialiser à zéro pour chaque scénario + + for (int iteration = 0; iteration < iterations; iteration++) { + // Cloner le graphe pour garantir une nouvelle simulation à chaque itération + Graph graphClone = cloneGraph(graph); + + // Définir les paramètres spécifiques au scénario + double immunizationFraction = 0; + boolean randomImmunization = false; + + if (scenario == 1) { // Immunisation aléatoire + immunizationFraction = 0.5; + randomImmunization = true; + } else if (scenario == 2) { // Immunisation sélective + immunizationFraction = 0.5; + randomImmunization = false; + } + + // Exécuter la simulation et capturer les résultats + double[] fractions = simulateAndCaptureResults(graphClone, infectionProbability, recoveryProbability, daysToSimulate, immunizationFraction, randomImmunization); + + // Ajouter les résultats de cette itération à la moyenne + for (int day = 0; day < daysToSimulate; day++) { + averageFractions[day] += fractions[day]; + } + } + + // Diviser par le nombre d'itérations pour obtenir la moyenne + for (int day = 0; day < daysToSimulate; day++) { + averageFractions[day] /= iterations; + } + + // Stocker les résultats du scénario + results[scenario] = averageFractions; + + // Enregistrer les résultats dans un fichier + writeResultsToFile(fileNames[scenario], averageFractions); + } + + +``` + #### on obtient ces courbes qui montrent bien l'efficacité de l'immunisation séléctive. -![propagation simulation](propagationsimulation.png) +![propagation simulation](propagation_simulation_2.png) + + +- on voit bien à quel point l'immunisation séléctive est efficace. ## 3 - Le degré moyen des groupes 0 et 1 : @@ -669,4 +736,105 @@ La différence entre les degrés moyens reflète l’efficacité de l’immunisa Le degré moyen est similaire au degré moyen global du graphe. ###### Immunisation sélective : Le degré moyen est nettement plus élevé, car les voisins des hubs -(nœuds critiques) sont ciblés, ce qui fragmente davantage le réseau. \ No newline at end of file +(nœuds critiques) sont ciblés, ce qui fragmente davantage le réseau. + + +## 4 - suppression des noeuds si ils sont immunisés : + +on utilise une méthode pour chaque immunisation : + +- immunisation random : + +Cette méthode applique une immunisation aléatoire en supprimant un pourcentage donné (fraction) de nœuds sélectionnés +au hasard dans le graphe. + +```java + +private static void applyRandomImmunization(Graph graph, double fraction) { + Random random = new Random(); + int immunizedCount = (int) (fraction * graph.getNodeCount()); + for (int i = 0; i < immunizedCount; i++) { + Node node = graph.getNode(random.nextInt(graph.getNodeCount())); + if (node != null) { + graph.removeNode(node); + } + } + } + +``` +Cette méthode applique une immunisation sélective en parcourant les nœuds du graphe et, +pour chaque nœud sélectionné avec une probabilité donnée (fraction), elle supprime tous ses voisins. + +```java +private static void applySelectiveImmunization(Graph graph, double fraction) { + Random random = new Random(); + + // Créer une liste des nœuds + var nodes = graph.nodes().toList(); + + for (Node node : nodes) { + if (node != null && random.nextDouble() < fraction) { + // Parcourir les voisins et les supprimer + var neighbors = node.neighborNodes().toList(); + for (Node neighbor : neighbors) { + if (graph.getNode(neighbor.getId()) != null) { // Vérifier que le voisin existe toujours + graph.removeNode(neighbor.getId()); + } + } + } + } +} + +``` + +Voici les résultats : + +- Analyse après immunisation aléatoire : +- Taux de propagation (τ) : 2.0 +- Seuil épidémique réel (c_réel) : 0.08716647329769069 +- Seuil épidémique théorique (c_théorique) : 0.23112472214969867 + + +- Analyse après immunisation sélective : +- Taux de propagation (τ) : 2.0 +- Seuil épidémique réel (c_réel) : 0.5494896486700256 +- Seuil épidémique théorique (c_théorique) : 0.8383065431501645 + + +on constate que ça correspond parfaitement aux résultats théoriques : + +| **Stratégie d’immunisation** | **Impact sur ⟨k⟩** | **Impact sur ⟨k²⟩** | **Seuil épidémique c** | +|-------------------------------|-------------------------------|------------------------------|-------------------------------| +| Aucune immunisation | Aucun changement | Aucun changement | Bas | +| Immunisation aléatoire | Réduction proportionnelle | Faible réduction | Modérément augmenté | +| Immunisation sélective | Réduction modérée | Forte réduction | Significativement augmenté | + + + +## 5 - Simulez l'épidémie avec un réseau aléatoire et un réseau BA: + +J'ai utilisé les graphes que j'ai généré dans le TP1. + +```java +private static void runSimulations(Graph graph) { +int daysToSimulate = 90; // 3 mois +double infectionProbability = 1.0; // β = 1 +double recoveryProbability = 0.5; // μ = 0.5 + + // Scénario 1 : Aucune immunisation + System.out.println("Scénario 1 : Aucune immunisation"); + simulateAndCaptureResults(graph, infectionProbability, recoveryProbability, daysToSimulate, 0, false); + + // Scénario 2 : Immunisation aléatoire + System.out.println("Scénario 2 : Immunisation aléatoire"); + applyRandomImmunization(graph, 0.5); // Immunisation aléatoire de 50 % + simulateAndCaptureResults(graph, infectionProbability, recoveryProbability, daysToSimulate, 0, true); + + // Scénario 3 : Immunisation sélective + System.out.println("Scénario 3 : Immunisation sélective"); + applySelectiveImmunization(graph, 0.5); // Immunisation sélective de 50 % + simulateAndCaptureResults(graph, infectionProbability, recoveryProbability, daysToSimulate, 0, false); + } + + +``` \ No newline at end of file diff --git a/ba.txt b/ba.txt new file mode 100644 index 0000000000000000000000000000000000000000..33753813632d20ea456794d939d78d9e32ee4777 --- /dev/null +++ b/ba.txt @@ -0,0 +1,10 @@ +1 0.000022 +2 0.000671 +3 0.015908 +4 0.185851 +5 0.519170 +6 0.251577 +7 0.025966 +8 0.000826 +9 0.000009 +10 0.000000 diff --git a/barabasi_degree_distribution.txt b/barabasi_degree_distribution.txt index f71e80d10f88e93bfbb3c2bbe0aee7a8a9e98c21..8e7618d030379f46b8674b854db5a234117e8fb5 100644 --- a/barabasi_degree_distribution.txt +++ b/barabasi_degree_distribution.txt @@ -1,321 +1,310 @@ # Degree Probability -1 0.11089945755014508 -2 0.11121798915100291 -3 0.11159959631638704 -4 0.11104768512678188 -5 0.11085845843320298 -6 0.11048631260249779 -7 0.0743944745805475 -8 0.05184496026239435 -9 0.03817333165131828 -10 0.028141163113409865 -11 0.021619149741390186 -12 0.017200706446322694 -13 0.013725242840923427 -14 0.011113914469534502 -15 0.009294184432950674 -16 0.007584836634287877 -17 0.006354863126024978 -18 0.005364576762962029 -19 0.0045982086539674534 -20 0.004197678819225432 -21 0.0035038476094361045 -22 0.0031001639964677685 +1 0.11088999621546612 +2 0.11071969219124511 +3 0.1112999873848871 +4 0.11090261132837138 +5 0.11115806736470292 +6 0.1108836886590135 +7 0.07437555191118961 +8 0.051885959379336447 +9 0.037936798284344646 +10 0.028560615617509777 +11 0.021543459063958624 +12 0.0171187082124385 +13 0.013526554812665573 +14 0.011135990917118707 +15 0.009382490223287498 +16 0.007521761069761574 +17 0.006266557335688154 +18 0.005282578529077835 +19 0.004629746436230604 +20 0.003935915226441276 +21 0.0035259240570203105 +22 0.0031790084521256465 23 0.0027595559480257346 -24 0.0022770278793995207 -25 0.001986880282578529 -26 0.0018008073672259367 -27 0.0016368108994575502 -28 0.001510659770404945 -29 0.0014412766494260123 -30 0.00125520373407342 -31 0.0011984357259997476 -32 0.0010722845969471427 -33 0.001006055254194525 +24 0.0025230225810521003 +25 0.002191875867289012 +26 0.0019963416172574743 +27 0.0018764980446574996 +28 0.0015201211050838905 +29 0.0012962028510155165 +30 0.0013119717421470921 +31 0.0011700517219629116 +32 9.082881291787562E-4 +33 9.429796896682225E-4 34 8.672890122366595E-4 -35 8.199823388419326E-4 -36 7.915983348050965E-4 -37 6.843698751103823E-4 -38 6.812160968840671E-4 -39 6.2760186703671E-4 -40 5.172196291156806E-4 -41 4.478365081367478E-4 -42 5.01450737984105E-4 -43 3.847609436104453E-4 -44 4.1314494764728145E-4 -45 3.8160716538413017E-4 -46 3.595307177999243E-4 -47 3.343004919894033E-4 -48 3.469156048946638E-4 -49 2.6491737101047054E-4 -50 2.996089314999369E-4 -51 2.4599470165257976E-4 -52 2.712249274631008E-4 -53 2.239182540683739E-4 -54 2.2707203229468904E-4 -55 2.2707203229468904E-4 -56 2.0184180648416804E-4 -57 1.860729153525924E-4 -58 1.9238047180522266E-4 -59 1.8291913712627727E-4 -60 1.8922669357890754E-4 -61 1.5453513308944116E-4 -62 1.5768891131575627E-4 -63 1.4507379841049577E-4 -64 1.5453513308944116E-4 +35 7.758294436735209E-4 +36 7.663681089945755E-4 +37 6.969849880156427E-4 +38 6.654472057524914E-4 +39 5.739876371893528E-4 +40 5.046045162104201E-4 +41 5.392960766998864E-4 +42 5.203734073419957E-4 +43 4.1314494764728145E-4 +44 4.036836129683361E-4 +45 4.667591774946386E-4 +46 3.311467137630882E-4 +47 3.4060804844203354E-4 +48 3.311467137630882E-4 +49 2.712249274631008E-4 +50 3.6268449602623945E-4 +51 2.743787056894159E-4 +52 2.5230225810521004E-4 +53 2.743787056894159E-4 +54 2.491484798788949E-4 +55 2.1445691938942854E-4 +56 2.1761069761574365E-4 +57 1.7030402422101677E-4 +58 1.734578024473319E-4 +59 1.608426895420714E-4 +60 1.3876624195786552E-4 +61 1.6715024599470166E-4 +62 1.7976535889996216E-4 +63 1.3876624195786552E-4 +64 1.2615112905260502E-4 65 1.2615112905260502E-4 -66 1.0092090324208402E-4 -67 1.2615112905260502E-4 -68 9.461334678945377E-5 -69 1.103822379210294E-4 -70 7.569067743156301E-5 +66 1.356124637315504E-4 +67 7.569067743156301E-5 +68 1.1353601614734452E-4 +69 9.145956856313863E-5 +70 6.307556452630251E-5 71 1.0407468146839915E-4 -72 7.884445565787813E-5 -73 9.461334678945377E-5 -74 9.461334678945377E-5 -75 8.830579033682351E-5 -76 8.199823388419326E-5 -77 6.307556452630251E-5 -78 7.884445565787813E-5 -79 6.307556452630251E-5 +72 9.145956856313863E-5 +73 9.77671250157689E-5 +74 7.569067743156301E-5 +75 8.515201211050838E-5 +76 1.0722845969471427E-4 +77 8.515201211050838E-5 +78 1.0722845969471427E-4 +79 6.622934275261763E-5 80 7.253689920524788E-5 -81 6.307556452630251E-5 -82 4.4152895168411754E-5 -83 6.307556452630251E-5 -84 6.307556452630251E-5 -85 6.307556452630251E-5 -86 5.9921786299987385E-5 -87 5.3614229847357136E-5 -88 4.099911694209663E-5 -89 5.046045162104201E-5 -90 4.7306673394726886E-5 -91 4.7306673394726886E-5 -92 6.938312097893276E-5 -93 4.099911694209663E-5 -94 2.5230225810521005E-5 -95 5.676800807367226E-5 -96 2.838400403683613E-5 -97 3.469156048946638E-5 -98 4.4152895168411754E-5 -99 3.7845338715781505E-5 -100 4.7306673394726886E-5 -101 1.5768891131575628E-5 -102 4.7306673394726886E-5 -103 4.099911694209663E-5 -104 3.1537782263151255E-5 -105 2.838400403683613E-5 -106 1.5768891131575628E-5 -107 2.2076447584205877E-5 -108 3.7845338715781505E-5 -109 2.5230225810521005E-5 +81 5.046045162104201E-5 +82 6.307556452630251E-5 +83 7.884445565787813E-5 +84 7.253689920524788E-5 +85 5.676800807367226E-5 +86 6.307556452630251E-5 +87 5.676800807367226E-5 +88 4.4152895168411754E-5 +89 2.5230225810521005E-5 +90 3.7845338715781505E-5 +91 6.307556452630251E-5 +92 3.469156048946638E-5 +93 2.838400403683613E-5 +94 5.676800807367226E-5 +95 4.099911694209663E-5 +96 4.4152895168411754E-5 +97 4.4152895168411754E-5 +98 3.469156048946638E-5 +99 1.5768891131575628E-5 +100 3.7845338715781505E-5 +101 4.099911694209663E-5 +102 2.838400403683613E-5 +103 3.7845338715781505E-5 +104 4.7306673394726886E-5 +105 3.469156048946638E-5 +106 2.5230225810521005E-5 +107 1.5768891131575628E-5 +108 4.099911694209663E-5 +109 1.8922669357890752E-5 110 3.1537782263151255E-5 -111 2.838400403683613E-5 -112 2.838400403683613E-5 -113 2.2076447584205877E-5 -114 1.5768891131575628E-5 -115 2.5230225810521005E-5 -116 1.8922669357890752E-5 -117 2.5230225810521005E-5 -118 1.5768891131575628E-5 -119 1.8922669357890752E-5 -120 6.307556452630251E-6 +111 1.5768891131575628E-5 +112 1.8922669357890752E-5 +113 1.2615112905260503E-5 +114 4.099911694209663E-5 +115 1.8922669357890752E-5 +116 2.2076447584205877E-5 +117 1.5768891131575628E-5 +118 1.8922669357890752E-5 +119 2.2076447584205877E-5 +120 2.5230225810521005E-5 121 1.8922669357890752E-5 -122 2.838400403683613E-5 -123 1.8922669357890752E-5 -124 2.5230225810521005E-5 +122 1.2615112905260503E-5 +123 2.5230225810521005E-5 +124 2.2076447584205877E-5 125 1.8922669357890752E-5 -126 6.307556452630251E-6 -127 1.5768891131575628E-5 -128 9.461334678945376E-6 -129 1.5768891131575628E-5 -130 2.5230225810521005E-5 +126 2.5230225810521005E-5 +127 1.2615112905260503E-5 +128 1.8922669357890752E-5 +129 1.2615112905260503E-5 +130 1.2615112905260503E-5 131 2.2076447584205877E-5 132 1.5768891131575628E-5 -133 1.2615112905260503E-5 -134 1.5768891131575628E-5 -135 1.5768891131575628E-5 +133 2.5230225810521005E-5 +134 1.2615112905260503E-5 +135 3.1537782263151257E-6 136 1.2615112905260503E-5 137 1.2615112905260503E-5 -138 9.461334678945376E-6 -139 3.1537782263151255E-5 -140 9.461334678945376E-6 -141 2.838400403683613E-5 -142 6.307556452630251E-6 -143 1.2615112905260503E-5 -144 1.5768891131575628E-5 -145 1.5768891131575628E-5 -146 6.307556452630251E-6 -147 9.461334678945376E-6 -148 3.1537782263151257E-6 -149 6.307556452630251E-6 -150 9.461334678945376E-6 -151 9.461334678945376E-6 -152 9.461334678945376E-6 -153 9.461334678945376E-6 -154 1.8922669357890752E-5 -155 3.1537782263151257E-6 -156 6.307556452630251E-6 -157 6.307556452630251E-6 -158 1.5768891131575628E-5 -159 6.307556452630251E-6 +138 3.1537782263151255E-5 +139 1.2615112905260503E-5 +140 1.5768891131575628E-5 +141 2.2076447584205877E-5 +142 1.2615112905260503E-5 +143 3.1537782263151257E-6 +144 3.1537782263151257E-6 +145 6.307556452630251E-6 +146 9.461334678945376E-6 +147 2.2076447584205877E-5 +148 1.5768891131575628E-5 +149 9.461334678945376E-6 +150 2.2076447584205877E-5 +151 1.2615112905260503E-5 +152 1.2615112905260503E-5 +153 1.5768891131575628E-5 +154 9.461334678945376E-6 +155 9.461334678945376E-6 +156 3.1537782263151255E-5 +157 9.461334678945376E-6 +158 3.1537782263151257E-6 +159 1.2615112905260503E-5 160 6.307556452630251E-6 -161 9.461334678945376E-6 -162 6.307556452630251E-6 -163 9.461334678945376E-6 +161 6.307556452630251E-6 +162 1.2615112905260503E-5 +163 1.2615112905260503E-5 164 3.1537782263151257E-6 -165 1.2615112905260503E-5 -166 3.1537782263151257E-6 -167 6.307556452630251E-6 +165 9.461334678945376E-6 +166 6.307556452630251E-6 +167 1.2615112905260503E-5 168 3.1537782263151257E-6 -169 3.1537782263151257E-6 -170 9.461334678945376E-6 -171 3.1537782263151257E-6 +169 9.461334678945376E-6 +170 1.2615112905260503E-5 +171 6.307556452630251E-6 172 3.1537782263151257E-6 -173 2.2076447584205877E-5 -174 1.8922669357890752E-5 -175 6.307556452630251E-6 +173 9.461334678945376E-6 +175 1.2615112905260503E-5 176 9.461334678945376E-6 -177 3.1537782263151257E-6 -178 3.1537782263151257E-6 -180 1.2615112905260503E-5 -181 9.461334678945376E-6 -182 1.2615112905260503E-5 -183 6.307556452630251E-6 -184 1.2615112905260503E-5 +177 6.307556452630251E-6 +179 6.307556452630251E-6 +180 3.1537782263151257E-6 +181 6.307556452630251E-6 +182 9.461334678945376E-6 +183 1.8922669357890752E-5 +184 3.1537782263151257E-6 185 3.1537782263151257E-6 -186 9.461334678945376E-6 -188 6.307556452630251E-6 -190 6.307556452630251E-6 -191 9.461334678945376E-6 -192 3.1537782263151257E-6 -193 6.307556452630251E-6 -195 6.307556452630251E-6 +186 3.1537782263151257E-6 +187 3.1537782263151257E-6 +188 1.2615112905260503E-5 +189 6.307556452630251E-6 +190 9.461334678945376E-6 +192 6.307556452630251E-6 +194 3.1537782263151257E-6 196 3.1537782263151257E-6 -197 3.1537782263151257E-6 -198 3.1537782263151257E-6 -199 6.307556452630251E-6 +198 6.307556452630251E-6 +199 9.461334678945376E-6 200 3.1537782263151257E-6 -202 6.307556452630251E-6 +201 3.1537782263151257E-6 +202 9.461334678945376E-6 203 3.1537782263151257E-6 -204 1.2615112905260503E-5 +204 3.1537782263151257E-6 205 3.1537782263151257E-6 206 3.1537782263151257E-6 207 3.1537782263151257E-6 -208 3.1537782263151257E-6 -209 6.307556452630251E-6 +208 6.307556452630251E-6 210 6.307556452630251E-6 -211 6.307556452630251E-6 -213 6.307556452630251E-6 -214 6.307556452630251E-6 -215 6.307556452630251E-6 -217 6.307556452630251E-6 +212 3.1537782263151257E-6 +214 3.1537782263151257E-6 +215 3.1537782263151257E-6 +216 3.1537782263151257E-6 +217 3.1537782263151257E-6 +218 6.307556452630251E-6 +219 9.461334678945376E-6 221 3.1537782263151257E-6 -222 6.307556452630251E-6 -223 3.1537782263151257E-6 -226 3.1537782263151257E-6 +222 3.1537782263151257E-6 +227 3.1537782263151257E-6 228 3.1537782263151257E-6 -230 9.461334678945376E-6 -231 9.461334678945376E-6 -232 3.1537782263151257E-6 +229 3.1537782263151257E-6 +231 3.1537782263151257E-6 233 3.1537782263151257E-6 234 3.1537782263151257E-6 -235 3.1537782263151257E-6 -236 3.1537782263151257E-6 238 3.1537782263151257E-6 -240 3.1537782263151257E-6 -242 1.2615112905260503E-5 -243 3.1537782263151257E-6 -244 6.307556452630251E-6 -247 3.1537782263151257E-6 -249 3.1537782263151257E-6 -250 6.307556452630251E-6 -254 9.461334678945376E-6 +241 3.1537782263151257E-6 +243 6.307556452630251E-6 +245 6.307556452630251E-6 +246 3.1537782263151257E-6 +248 3.1537782263151257E-6 +250 3.1537782263151257E-6 +252 3.1537782263151257E-6 +254 3.1537782263151257E-6 255 3.1537782263151257E-6 -256 3.1537782263151257E-6 -259 6.307556452630251E-6 +257 3.1537782263151257E-6 +258 3.1537782263151257E-6 +259 3.1537782263151257E-6 +260 3.1537782263151257E-6 +261 6.307556452630251E-6 +262 6.307556452630251E-6 263 3.1537782263151257E-6 264 3.1537782263151257E-6 -265 6.307556452630251E-6 -266 3.1537782263151257E-6 -267 6.307556452630251E-6 -269 3.1537782263151257E-6 -270 3.1537782263151257E-6 -272 3.1537782263151257E-6 -273 6.307556452630251E-6 -278 9.461334678945376E-6 -281 3.1537782263151257E-6 -283 3.1537782263151257E-6 +265 3.1537782263151257E-6 +270 6.307556452630251E-6 +271 3.1537782263151257E-6 +272 9.461334678945376E-6 +274 6.307556452630251E-6 +276 6.307556452630251E-6 +278 6.307556452630251E-6 +279 3.1537782263151257E-6 284 3.1537782263151257E-6 -285 6.307556452630251E-6 -286 3.1537782263151257E-6 -288 6.307556452630251E-6 -292 3.1537782263151257E-6 -293 9.461334678945376E-6 -294 3.1537782263151257E-6 -295 6.307556452630251E-6 +285 9.461334678945376E-6 +286 9.461334678945376E-6 +291 3.1537782263151257E-6 +297 3.1537782263151257E-6 298 3.1537782263151257E-6 -299 3.1537782263151257E-6 -300 3.1537782263151257E-6 -303 3.1537782263151257E-6 -304 3.1537782263151257E-6 -306 6.307556452630251E-6 -310 3.1537782263151257E-6 -317 3.1537782263151257E-6 -318 3.1537782263151257E-6 -326 3.1537782263151257E-6 -334 3.1537782263151257E-6 -336 3.1537782263151257E-6 +302 6.307556452630251E-6 +317 6.307556452630251E-6 +321 3.1537782263151257E-6 +322 3.1537782263151257E-6 +325 3.1537782263151257E-6 +333 3.1537782263151257E-6 +337 3.1537782263151257E-6 338 3.1537782263151257E-6 -341 3.1537782263151257E-6 -342 3.1537782263151257E-6 -345 6.307556452630251E-6 +339 3.1537782263151257E-6 347 3.1537782263151257E-6 -348 3.1537782263151257E-6 -349 3.1537782263151257E-6 -358 3.1537782263151257E-6 -368 3.1537782263151257E-6 -373 3.1537782263151257E-6 -375 3.1537782263151257E-6 -376 3.1537782263151257E-6 -378 3.1537782263151257E-6 -391 3.1537782263151257E-6 -411 3.1537782263151257E-6 -420 3.1537782263151257E-6 -428 6.307556452630251E-6 -430 6.307556452630251E-6 +354 3.1537782263151257E-6 +355 3.1537782263151257E-6 +357 3.1537782263151257E-6 +361 3.1537782263151257E-6 +362 3.1537782263151257E-6 +363 3.1537782263151257E-6 +384 6.307556452630251E-6 +389 3.1537782263151257E-6 +399 3.1537782263151257E-6 +400 6.307556452630251E-6 +402 3.1537782263151257E-6 +415 6.307556452630251E-6 +416 3.1537782263151257E-6 +417 3.1537782263151257E-6 +422 6.307556452630251E-6 +423 3.1537782263151257E-6 +430 3.1537782263151257E-6 432 3.1537782263151257E-6 444 3.1537782263151257E-6 +450 3.1537782263151257E-6 453 3.1537782263151257E-6 -460 3.1537782263151257E-6 -468 3.1537782263151257E-6 -473 3.1537782263151257E-6 -481 3.1537782263151257E-6 -488 3.1537782263151257E-6 -490 3.1537782263151257E-6 -562 3.1537782263151257E-6 -591 3.1537782263151257E-6 -596 3.1537782263151257E-6 -597 3.1537782263151257E-6 -601 3.1537782263151257E-6 -639 3.1537782263151257E-6 -644 3.1537782263151257E-6 -648 3.1537782263151257E-6 -654 3.1537782263151257E-6 -666 3.1537782263151257E-6 +458 3.1537782263151257E-6 +482 3.1537782263151257E-6 +501 3.1537782263151257E-6 +523 3.1537782263151257E-6 +528 3.1537782263151257E-6 +544 3.1537782263151257E-6 +546 3.1537782263151257E-6 +558 3.1537782263151257E-6 +560 3.1537782263151257E-6 +581 3.1537782263151257E-6 +612 3.1537782263151257E-6 +618 3.1537782263151257E-6 +667 3.1537782263151257E-6 +670 3.1537782263151257E-6 672 3.1537782263151257E-6 -676 3.1537782263151257E-6 -697 3.1537782263151257E-6 -701 3.1537782263151257E-6 -702 3.1537782263151257E-6 -771 3.1537782263151257E-6 -846 3.1537782263151257E-6 -961 3.1537782263151257E-6 -974 3.1537782263151257E-6 -1074 3.1537782263151257E-6 -1097 3.1537782263151257E-6 -1107 3.1537782263151257E-6 -1159 3.1537782263151257E-6 -1166 3.1537782263151257E-6 -1303 3.1537782263151257E-6 -1329 3.1537782263151257E-6 -1527 3.1537782263151257E-6 +682 3.1537782263151257E-6 +693 3.1537782263151257E-6 +784 3.1537782263151257E-6 +789 3.1537782263151257E-6 +824 3.1537782263151257E-6 +882 3.1537782263151257E-6 +954 3.1537782263151257E-6 +1008 3.1537782263151257E-6 +1051 3.1537782263151257E-6 +1257 3.1537782263151257E-6 +1459 3.1537782263151257E-6 +1580 3.1537782263151257E-6 +1661 3.1537782263151257E-6 diff --git a/comparison_results.txt b/comparison_results.txt index c9221006655be092bd51a23e054f41a199b4a47b..d19a83c296d69ba1a14319f569feaccdd6fc4c97 100644 --- a/comparison_results.txt +++ b/comparison_results.txt @@ -2,12 +2,12 @@ Comparaison des réseaux générés : Réseau aléatoire : Nombre de noeuds : 317080 -Nombre de liens : 1049119 -Degré moyen : 6,6174 +Nombre de liens : 1050369 +Degré moyen : 6,6253 Coefficient de clustering : 0,0000 Réseau Barabási-Albert : Nombre de noeuds : 317080 -Nombre de liens : 1110120 -Degré moyen : 7,0021 +Nombre de liens : 1110048 +Degré moyen : 7,0017 Coefficient de clustering : 0,0004 diff --git a/dist.txt b/dist.txt new file mode 100644 index 0000000000000000000000000000000000000000..3223f682b509ae78817631fba72faee2263fb8d5 --- /dev/null +++ b/dist.txt @@ -0,0 +1,20 @@ +1 0.000020 +2 0.000243 +3 0.002972 +4 0.026590 +5 0.127179 +6 0.276021 +7 0.286456 +8 0.171287 +9 0.071630 +10 0.025324 +11 0.008565 +12 0.002695 +13 0.000754 +14 0.000198 +15 0.000049 +16 0.000011 +17 0.000003 +18 0.000001 +19 0.000000 +20 0.000000 diff --git a/distance_distribution.dat b/distance_distribution.dat deleted file mode 100644 index 2ec3ea4331f86a5c6fbad7dc84004ab3aa12c8bd..0000000000000000000000000000000000000000 --- a/distance_distribution.dat +++ /dev/null @@ -1,20 +0,0 @@ -1 0.000020 -2 0.000237 -3 0.002877 -4 0.026896 -5 0.131700 -6 0.284280 -7 0.284713 -8 0.164319 -9 0.069059 -10 0.024703 -11 0.008037 -12 0.002319 -13 0.000624 -14 0.000163 -15 0.000041 -16 0.000010 -17 0.000002 -18 0.000000 -19 0.000000 -20 0.000000 diff --git a/propagation_simulation_2.png b/propagation_simulation_2.png new file mode 100644 index 0000000000000000000000000000000000000000..06fb91118370266f1bc0659baa7a4471dce3755e Binary files /dev/null and b/propagation_simulation_2.png differ diff --git a/propagationsimulation.png b/propagationsimulation.png deleted file mode 100644 index 3b0a698e7eb356cf98c9b9be73edeafe5b460804..0000000000000000000000000000000000000000 Binary files a/propagationsimulation.png and /dev/null differ diff --git a/random.txt b/random.txt new file mode 100644 index 0000000000000000000000000000000000000000..c5832fa1a8d036e6ca31249daa0309c37a8d87ae --- /dev/null +++ b/random.txt @@ -0,0 +1,12 @@ +1 0.000022 +2 0.000183 +3 0.001679 +4 0.015501 +5 0.111260 +6 0.382010 +7 0.385665 +8 0.095467 +9 0.007884 +10 0.000319 +11 0.000011 +12 0.000000 diff --git a/random_degree_distribution.txt b/random_degree_distribution.txt index d350b6989344fde13c413b1103a7e5358b8b78a8..17a6220e7b3da3ac673566d61fba5ad09bb7cfc8 100644 --- a/random_degree_distribution.txt +++ b/random_degree_distribution.txt @@ -1,49 +1,46 @@ # Degree Probability -0 0.008404818973129809 -1 0.03444871956604011 -2 0.07259997476977419 -3 0.1079853664690299 -4 0.12453639460073168 -5 0.12400971363693705 -6 0.11061877128800303 -7 0.09228901223665952 -8 0.07288066103191623 -9 0.057897060678693074 -10 0.04512741264034313 -11 0.03466948404188217 -12 0.026867036709978556 -13 0.020619402043648292 -14 0.015699508010596695 -15 0.01218304528825533 -16 0.009209032420840167 -17 0.007045540557587991 -18 0.005219502964551532 -19 0.004049451242588621 -20 0.003062318657751987 -21 0.0024788696858836887 -22 0.0020373407341995713 -23 0.001302510407468147 -24 9.80825028384004E-4 -25 9.05134350952441E-4 -26 6.969849880156427E-4 -27 4.951431815314747E-4 -28 4.0052983474202095E-4 -29 2.996089314999369E-4 -30 2.491484798788949E-4 -31 1.6715024599470166E-4 -32 1.103822379210294E-4 -33 1.5768891131575627E-4 -34 6.622934275261763E-5 -35 6.622934275261763E-5 -36 3.469156048946638E-5 -37 3.7845338715781505E-5 -38 2.5230225810521005E-5 -39 6.307556452630251E-6 -40 9.461334678945376E-6 -41 6.307556452630251E-6 -42 3.1537782263151257E-6 -43 1.8922669357890752E-5 -44 6.307556452630251E-6 -47 6.307556452630251E-6 -48 6.307556452630251E-6 -51 3.1537782263151257E-6 +0 0.00843004919894033 +1 0.034262646650687525 +2 0.07335057398763718 +3 0.10682477608174593 +4 0.12378264160464236 +5 0.12347357133846348 +6 0.11095937933644506 +7 0.09248454648669105 +8 0.07402232874984231 +9 0.05880534880787183 +10 0.0447868045919011 +11 0.03459694714267693 +12 0.02626151129052605 +13 0.020524788696858837 +14 0.01559227955090198 +15 0.012233505739876372 +16 0.009010344392582314 +17 0.007159076573735335 +18 0.005370884319414659 +19 0.004345906395862243 +20 0.0030970102182414534 +21 0.00250409991169421 +22 0.002002649173710105 +23 0.0014160464236154914 +24 0.0010344392582313613 +25 8.389050081998233E-4 +26 6.875236533366973E-4 +27 4.793742903998991E-4 +28 4.2576006055254195E-4 +29 3.1537782263151254E-4 +30 1.9238047180522266E-4 +31 1.608426895420714E-4 +32 1.2930490727892016E-4 +33 1.2299735082628988E-4 +34 7.253689920524788E-5 +35 5.9921786299987385E-5 +36 2.838400403683613E-5 +37 2.838400403683613E-5 +38 3.469156048946638E-5 +39 2.838400403683613E-5 +40 2.5230225810521005E-5 +41 1.8922669357890752E-5 +42 1.2615112905260503E-5 +43 3.1537782263151257E-6 +44 3.1537782263151257E-6 diff --git a/scenario1_no_control.dat b/scenario1_no_control.dat index 226310d3f26e6c5682fd19fc1375954e6ae64fd1..fda5e5c59ecad929a25e8247b8fafb268f002b1b 100644 --- a/scenario1_no_control.dat +++ b/scenario1_no_control.dat @@ -1,90 +1,90 @@ -1 3.1537782263151257E-6 -2 9.461334678945376E-6 -3 1.0722845969471427E-4 -4 0.0014412766494260123 -5 0.016346032546991296 -6 0.14012552037340734 -7 0.46108553046549766 -8 0.616002270720323 -9 0.6426327740633279 -10 0.6503059164879526 -11 0.6505771414154157 -12 0.6537813800933518 -13 0.650700138766242 -14 0.6522770278793996 -15 0.6523243345527943 -16 0.6531443168916362 -17 0.6540052983474202 -18 0.6512268197300366 -19 0.6527248643875363 -20 0.6530812413271099 -21 0.6525577141415415 -22 0.6508042134477103 -23 0.6535700769521887 -24 0.6518071149236786 -25 0.6526081745931626 -26 0.6522202598713258 -27 0.6529834742020941 -28 0.6525671754762206 -29 0.6525766368108995 -30 0.6513498170808629 -31 0.6532452377948783 -32 0.6521130314116311 -33 0.651501198435726 -34 0.6515453513308944 -35 0.6530749337706573 -36 0.652652327488331 -37 0.6532294689037467 -38 0.6523590261132837 -39 0.6523905638955468 -40 0.6523779487826417 -41 0.6531632395609941 -42 0.6514192002018419 -43 0.6526712501576889 -44 0.6532736217989151 -45 0.6522644127664943 -46 0.6517440393591523 -47 0.6535732307304151 -48 0.6522265674277785 -49 0.6521035700769522 -50 0.6520278793995207 -51 0.6525104074681468 -52 0.6517471931373786 -53 0.6533272360287624 -54 0.651662041125268 -55 0.6538034565409361 -56 0.6516525797905891 -57 0.6533997729279677 -58 0.6521004162987258 -59 0.6530560111012994 -60 0.6524788696858836 -61 0.6513182792985998 -62 0.6525167150245995 -63 0.6527059417181784 -64 0.6519963416172575 -65 0.6534660022707203 -66 0.6524883310205626 -67 0.6523306421092468 -68 0.6528163239560995 -69 0.6541377570329254 -70 0.6520941087422732 -71 0.6513088179639208 -72 0.6533398511416677 -73 0.6508609814557841 -74 0.6542039863756781 -75 0.6522707203229469 -76 0.6524631007947521 -77 0.6523369496656996 -78 0.6527974012867415 -79 0.6517345780244733 -80 0.6526870190488205 -81 0.6514034313107102 -82 0.6526365585971995 -83 0.6521981834237417 -84 0.6526397123754257 -85 0.6524504856818468 -86 0.6531474706698625 -87 0.6518891131575627 -88 0.6539516841175729 -89 0.6514948908792734 -90 0.6527090954964047 +0 3.1537782263151257E-6 +1 2.5545603633152517E-5 +2 1.9742651696732683E-4 +3 0.0017793616752869938 +4 0.018638829317522396 +5 0.12560331777469408 +6 0.36179891510029016 +7 0.5434697868045919 +8 0.6287659265800429 +9 0.6452046802068878 +10 0.6511233758042134 +11 0.651804276523275 +12 0.6521026239434843 +13 0.6521581304402675 +14 0.6526775577141415 +15 0.652301311971742 +16 0.6525350069383121 +17 0.652376687271351 +18 0.6523940330515958 +19 0.6524047558975654 +20 0.6522704049451242 +21 0.6529677053109626 +22 0.6522599974769775 +23 0.6527939321306925 +24 0.6525340608048442 +25 0.6523110886842438 +26 0.6524987384887095 +27 0.6527207644758422 +28 0.6527892014633531 +29 0.6522489592531853 +30 0.6531891005424497 +31 0.6521609688406711 +32 0.6524031790084521 +33 0.6521928220007569 +34 0.6530162734956477 +35 0.6522312980951178 +36 0.6522915352592404 +37 0.652466569950801 +38 0.6526021824145327 +39 0.6524280938564401 +40 0.6523915100290147 +41 0.65248202346411 +42 0.6526813422480131 +43 0.6524318783903116 +44 0.6526728270468021 +45 0.6524605777721711 +46 0.652165384130188 +47 0.6524741390185442 +48 0.6525643370758168 +49 0.6523609183802195 +50 0.65269774189479 +51 0.6527333795887473 +52 0.6522041756023718 +53 0.6527819477734326 +54 0.6523880408729659 +55 0.6530093351835499 +56 0.6525687523653337 +57 0.6524634161725748 +58 0.6525485681846852 +59 0.6524479626592657 +60 0.6525375299608932 +61 0.6525965056137252 +62 0.6521581304402675 +63 0.6525968209915479 +64 0.6522407594297969 +65 0.6529103065472437 +66 0.652040494512426 +67 0.652215844581809 +68 0.6523344266431185 +69 0.6524378705689416 +70 0.6527794247508515 +71 0.6521786299987384 +72 0.6521988141793869 +73 0.6527803708843194 +74 0.6526050208149364 +75 0.652640343131071 +76 0.6521625457297842 +77 0.6521865144443043 +78 0.6530449728775073 +79 0.6525551911189607 +80 0.6524369244354737 +81 0.6526668348681721 +82 0.6524990538665321 +83 0.6524022328749842 +84 0.6527712249274631 +85 0.6526021824145327 +86 0.6524239939447459 +87 0.6524807619528195 +88 0.6526791346032547 +89 0.6520676170051722 diff --git a/scenario2_random_immunization.dat b/scenario2_random_immunization.dat index 09536c7edf7d981df7de3cafd1e4d0b9124680dc..4a2fbaf7ed7c9847c19153b32a853ea7238a1aef 100644 --- a/scenario2_random_immunization.dat +++ b/scenario2_random_immunization.dat @@ -1,90 +1,90 @@ -1 5.2046737970697684E-6 -2 1.0409347594139537E-5 -3 1.0409347594139538E-4 -4 0.0011190048663700003 -5 0.006453795508366513 -6 0.041772711895281964 -7 0.1875660342988003 -8 0.38429229448044344 -9 0.46847789314804694 -10 0.48930699768392016 -11 0.49389231529913863 -12 0.4978374580373175 -13 0.4966872251281651 -14 0.49830067400525674 -15 0.4966247690426003 -16 0.49951336299997395 -17 0.49857131704270435 -18 0.49627605589819657 -19 0.4984047674811981 -20 0.4988888021443256 -21 0.49647383350248525 -22 0.497951960860853 -23 0.4973742420693783 -24 0.4963957633955292 -25 0.49816535248653293 -26 0.49754079163088455 -27 0.4984412001977776 -28 0.49643740078590576 -29 0.4972128971816691 -30 0.498321492700445 -31 0.4969422541442215 -32 0.4973898560907695 -33 0.49795716553465014 -34 0.49727014859343693 -35 0.4967340671923387 -36 0.49913862648658497 -37 0.4987586852993989 -38 0.4960626642725167 -39 0.49918546855075857 -40 0.4975303822832904 -41 0.49793634683946186 -42 0.4981497384651417 -43 0.4960314362297343 -44 0.4973013766362193 -45 0.4985504983475161 -46 0.4968225466468889 -47 0.49876388997319593 -48 0.4981341244437505 -49 0.4978062299945351 -50 0.49730658131001637 -51 0.49907096572722304 -52 0.4978530720587087 -53 0.4983423113956333 -54 0.4965987456736149 -55 0.4991646498555703 -56 0.498920030187108 -57 0.49608868764150205 -58 0.5000286257058839 -59 0.4974210841335519 -60 0.49747833554531967 -61 0.4986650011710516 -62 0.4974731308715226 -63 0.49754079163088455 -64 0.4988679834491373 -65 0.49550576417623027 -66 0.49849845160954537 -67 0.49821219455070653 -68 0.499143831160382 -69 0.4962812605719937 -70 0.4983527207432274 -71 0.4967392718661358 -72 0.49860774975928385 -73 0.498769094646993 -74 0.49736903739558125 -75 0.4993988601764384 -76 0.49767611314960836 -77 0.4969682775132069 -78 0.49808728237957683 -79 0.49693704947042444 -80 0.49826424128867725 -81 0.4977906159731439 -82 0.49757201967366693 -83 0.4972649439196398 -84 0.499143831160382 -85 0.49679131860410647 -86 0.49925833398391756 -87 0.49672886251854165 -88 0.4976552944544201 -89 0.49705675696775703 -90 0.49838394878600983 +0 2.5230225810521005E-6 +1 1.00920903242084E-5 +2 6.875236533366975E-5 +3 5.329885202472563E-4 +4 0.0042002018418064845 +5 0.022203229468903747 +6 0.06266998864639838 +7 0.10814873218115302 +8 0.14177305411883437 +9 0.16356692317396243 +10 0.17126781884697867 +11 0.17334742020941088 +12 0.17503784533871578 +13 0.17493061687902106 +14 0.17523842563390943 +15 0.1752680711492368 +16 0.17543395988394098 +17 0.1754093604137757 +18 0.17530654724359782 +19 0.17515895042260626 +20 0.17552605020814938 +21 0.17544972877507253 +22 0.17518544215970733 +23 0.17525671754762204 +24 0.17543017535006938 +25 0.17526744039359152 +26 0.17560363315251673 +27 0.17535259240570206 +28 0.17552352718556832 +29 0.17530087044279047 +30 0.17550838905008198 +31 0.1753841301879652 +32 0.17522707203229468 +33 0.17524157941213575 +34 0.17526933266052733 +35 0.17536773054118832 +36 0.1754642361549136 +37 0.1748927715403053 +38 0.17549072789201464 +39 0.17504667591774944 +40 0.17518922669357892 +41 0.1754093604137757 +42 0.1754024221016778 +43 0.17535763845086413 +44 0.17523337958874732 +45 0.1749892771540305 +46 0.1753576384508641 +47 0.17509650561372522 +48 0.1756194020436483 +49 0.1751211050838905 +50 0.17545792859846093 +51 0.17529582439762836 +52 0.17511038223792103 +53 0.17523968714519994 +54 0.1751110129935663 +55 0.17566797022833355 +56 0.1753853916992557 +57 0.1749949539548379 +58 0.17553614229847356 +59 0.17500946133467896 +60 0.17515768891131578 +61 0.17532168537908416 +62 0.17517345780244734 +63 0.17531790084521257 +64 0.17553109625331148 +65 0.17542765232748833 +66 0.1754793742903999 +67 0.17533051595811783 +68 0.17525987132584836 +69 0.17559984861864514 +70 0.17498044657499684 +71 0.17536709978554307 +72 0.17530465497666203 +73 0.17534880787183044 +74 0.1753431310710231 +75 0.17526428661536522 +76 0.17551848114040622 +77 0.1752592405702031 +78 0.17505550649678317 +79 0.17562192506622934 +80 0.1751772423363189 +81 0.17550334300491988 +82 0.17551280433959882 +83 0.17507758294436732 +84 0.175302131954081 +85 0.17514885833228208 +86 0.1750801059669484 +87 0.17557398763718934 +88 0.17538349943231993 +89 0.17527564021697994 diff --git a/scenario3_selective_immunization.dat b/scenario3_selective_immunization.dat index df63900adb654bc4f463044d214cdbdc23ce30c2..74005c292a49588f38bdb3598a086c5fc3aff812 100644 --- a/scenario3_selective_immunization.dat +++ b/scenario3_selective_immunization.dat @@ -1,90 +1,90 @@ -1 0.0 -2 0.0 -3 0.0 -4 0.0 -5 0.0 -6 0.0 -7 0.0 -8 0.0 -9 0.0 -10 0.0 -11 0.0 -12 0.0 -13 0.0 -14 0.0 -15 0.0 -16 0.0 -17 0.0 -18 0.0 -19 0.0 -20 0.0 -21 0.0 -22 0.0 -23 0.0 -24 0.0 -25 0.0 -26 0.0 -27 0.0 -28 0.0 -29 0.0 -30 0.0 -31 0.0 -32 0.0 -33 0.0 -34 0.0 -35 0.0 -36 0.0 -37 0.0 -38 0.0 -39 0.0 -40 0.0 -41 0.0 -42 0.0 -43 0.0 -44 0.0 -45 0.0 -46 0.0 -47 0.0 -48 0.0 -49 0.0 -50 0.0 -51 0.0 -52 0.0 -53 0.0 -54 0.0 -55 0.0 -56 0.0 -57 0.0 -58 0.0 -59 0.0 -60 0.0 -61 0.0 -62 0.0 -63 0.0 -64 0.0 -65 0.0 -66 0.0 -67 0.0 -68 0.0 -69 0.0 -70 0.0 -71 0.0 -72 0.0 -73 0.0 -74 0.0 -75 0.0 -76 0.0 -77 0.0 -78 0.0 -79 0.0 -80 0.0 -81 0.0 -82 0.0 -83 0.0 -84 0.0 -85 0.0 -86 0.0 -87 0.0 -88 0.0 -89 0.0 -90 0.0 +0 2.7877642639591863E-6 +1 9.290921336275931E-6 +2 2.5552184282742974E-5 +3 4.227183723655387E-5 +4 7.10667945219417E-5 +5 1.3794410745779871E-4 +6 2.730817435205772E-4 +7 5.712304887126052E-4 +8 0.0011359362655491768 +9 0.0021803445124751594 +10 0.003729984208990259 +11 0.005882884471685467 +12 0.008332649766783613 +13 0.011158765619388045 +14 0.014283353296852697 +15 0.017761297072176642 +16 0.021069154377786357 +17 0.024938162608621972 +18 0.028409087031469594 +19 0.03182827318183584 +20 0.03453287499869302 +21 0.0366869933833253 +22 0.038358082921729875 +23 0.03947937602329108 +24 0.04056800370254974 +25 0.04111056044132006 +26 0.041614059512415834 +27 0.04178931411300846 +28 0.041950660354575384 +29 0.04199712761652779 +30 0.0420850593973851 +31 0.042203532234897846 +32 0.04200011386986776 +33 0.042238002685254586 +34 0.04221892265594672 +35 0.04229083695953626 +36 0.04220462979769949 +37 0.04224071878658427 +38 0.04217807398500982 +39 0.042198446335210416 +40 0.04220129047282198 +41 0.042237043135195884 +42 0.04234673679432644 +43 0.04223985128865133 +44 0.04227143884427891 +45 0.04223797535340092 +46 0.042322021737373976 +47 0.04224268804969884 +48 0.04230583724798888 +49 0.042130237130444656 +50 0.0422560823666579 +51 0.0421934306961686 +52 0.04225055333698121 +53 0.042131158139906685 +54 0.04241271195544329 +55 0.04227281776830208 +56 0.04219194825538919 +57 0.04233782809946251 +58 0.042179922532099415 +59 0.0422342163422708 +60 0.042141848933470324 +61 0.042288092915957455 +62 0.042186361508082644 +63 0.042155305764309925 +64 0.04232534767562483 +65 0.04232538461716652 +66 0.04232615584683505 +67 0.04215534493678422 +68 0.042272796479068384 +69 0.04220967674998873 +70 0.04234018210162396 +71 0.0423299382208536 +72 0.042214719608838276 +73 0.042209171251706465 +74 0.04211117133914459 +75 0.04226215929990308 +76 0.04219851746731293 +77 0.04239835724002701 +78 0.04226397984170348 +79 0.042306303610028254 +80 0.04226027920982537 +81 0.04214317845704245 +82 0.042401982540311724 +83 0.04213109118564309 +84 0.04231602140712465 +85 0.04221470109483367 +86 0.04223802304647817 +87 0.0423322443955485 +88 0.04213760877456858 +89 0.04232621600720706 diff --git a/src/main/java/org/example/DBLPNetworkAnalysis.java b/src/main/java/org/example/DBLPNetworkAnalysis.java index 4ae5db6f22e151195427eaad61b07efc814a824b..9eb3a0006904e7cfb1577564799f25988e8d5f5e 100644 --- a/src/main/java/org/example/DBLPNetworkAnalysis.java +++ b/src/main/java/org/example/DBLPNetworkAnalysis.java @@ -37,8 +37,16 @@ public class DBLPNetworkAnalysis { boolean isConnected = Toolkit.isConnected(graph); double minAverageDegreeForConnectivity = Math.log(nodeCount); - // Estimation de la distance moyenne par échantillonnage + // Calculer la distance moyenne dans un réseau aléatoire + + double degreeAverage = Toolkit.averageDegree(graph); + double NetworkDistance = Math.log(graph.getNodeCount()) / Math.log(degreeAverage); + System.out.println("Distance moyenne dans notre réseau : " + NetworkDistance); + calculerDistanceMoyenneEtSauvegarderDistribution(graph, "dist.txt"); + + // Estimation de la distance moyenne par échantillonnage +/* int sampleSize = 1000; List nodes = new ArrayList<>(); graph.nodes().forEach(nodes::add); @@ -74,11 +82,6 @@ public class DBLPNetworkAnalysis { } } - // Calculer la distance moyenne dans un réseau aléatoire - - double degreeAverage = Toolkit.averageDegree(graph); - double NetworkDistance = Math.log(graph.getNodeCount()) / Math.log(degreeAverage); - System.out.println("Distance moyenne dans notre réseau : " + NetworkDistance); // Sauvegarder la distribution des distances dans un fichier try (PrintWriter writer = new PrintWriter(new FileWriter("distance_distribution.dat"))) { @@ -90,7 +93,7 @@ public class DBLPNetworkAnalysis { } catch (IOException e) { e.printStackTrace(); } - +*/ //Calcul de la distribution des degrés calculateDegreeDistribution(graph, "degree_distribution.txt"); @@ -136,6 +139,7 @@ public class DBLPNetworkAnalysis { System.out.println("Réseau aléatoire :"); printGraphMeasures(randomGraph); calculateDegreeDistribution(randomGraph, "random_degree_distribution.txt"); + calculerDistanceMoyenneEtSauvegarderDistribution(randomGraph,"random.txt"); double degreeAverage = Toolkit.averageDegree(randomGraph); double NetworkDistance = Math.log(randomGraph.getNodeCount()) / Math.log(degreeAverage); System.out.println("Distance moyenne du réseau Aléatoire : " + NetworkDistance); @@ -147,6 +151,7 @@ public class DBLPNetworkAnalysis { System.out.println("Réseau Barabási-Albert :"); printGraphMeasures(baGraph); calculateDegreeDistribution(baGraph, "barabasi_degree_distribution.txt"); + calculerDistanceMoyenneEtSauvegarderDistribution(baGraph,"ba.txt"); // --- Sauvegarder les résultats --- @@ -194,6 +199,58 @@ public class DBLPNetworkAnalysis { return graphAlea; } + public static double calculerDistanceMoyenneEtSauvegarderDistribution(Graph graph, String outputFile) { + int sampleSize = 1000; // Taille de l'échantillon + List nodes = new ArrayList<>(); + graph.nodes().forEach(nodes::add); + + Random random = new Random(); + double totalDistance = 0; + int pairCount = 0; + Map distanceDistribution = new HashMap<>(); // Pour stocker les distances + + for (int i = 0; i < sampleSize; i++) { + Node startNode = nodes.get(random.nextInt(nodes.size())); + + // BFS à partir du nœud de départ + BreadthFirstIterator bfs = new BreadthFirstIterator(startNode, true); + Map distances = new HashMap<>(); + + while (bfs.hasNext()) { + Node node = bfs.next(); + int depth = bfs.getDepthOf(node); + distances.put(node, depth); + + // Enregistrer la distribution des distances + if (depth > 0) { + distanceDistribution.put(depth, distanceDistribution.getOrDefault(depth, 0) + 1); + } + } + + for (int distance : distances.values()) { + if (distance > 0) { + totalDistance += distance; + pairCount++; + } + } + } + + double averageDistance = totalDistance / pairCount; + System.out.println("Distance moyenne dans notre réseau : " + averageDistance); + + // Sauvegarder la distribution des distances dans un fichier + try (PrintWriter writer = new PrintWriter(new FileWriter(outputFile))) { + for (Map.Entry entry : distanceDistribution.entrySet()) { + writer.printf(Locale.US, "%d %f%n", entry.getKey(), + (double) entry.getValue() / pairCount); + } + System.out.println("Distribution des distances sauvegardée dans '" + outputFile + "'."); + } catch (IOException e) { + e.printStackTrace(); + } + + return averageDistance; + } // --- Génération d'un réseau Barabasi-Albert --- diff --git a/src/main/java/org/example/Propagation.java b/src/main/java/org/example/Propagation.java index 3a9c60cedf8faab615e80bf9e26c86a758c50066..6fd9e1f60b31c81a123daaff4cea0add07c4a478 100644 --- a/src/main/java/org/example/Propagation.java +++ b/src/main/java/org/example/Propagation.java @@ -64,48 +64,60 @@ public class Propagation { } } } - - // Calcul du degré moyen pour le Groupe 0 (non immunisé) - double totalDegreeGroup0 = 0; - for (Node node : group0) { - totalDegreeGroup0 += node.getDegree(); - } - double averageDegreeGroup0 = group0.isEmpty() ? 0 : totalDegreeGroup0 / group0.size(); - System.out.printf("Degré moyen (Groupe 0 - Non immunisé) : %.9f%n", averageDegreeGroup0); - - // Calcul du degré moyen pour le Groupe 1 (voisins immunisés) - double totalDegreeGroup1 = 0; - for (Node node : group1) { - totalDegreeGroup1 += node.getDegree(); - } - double averageDegreeGroup1 = group1.isEmpty() ? 0 : totalDegreeGroup1 / group1.size(); - System.out.printf("Degré moyen (Groupe 1 - Voisins immunisés) : %.9f%n", averageDegreeGroup1); - // --- Paramètres --- int daysToSimulate = 90; // 3 mois double infectionProbability = 1.0; // β = 1 double recoveryProbability = 0.5; // μ = 0.5 - // Tableau pour stocker les résultats des scénarios + + // Nombre d'itérations pour chaque scénario + int iterations = 10; + +// Tableau pour stocker les résultats des scénarios double[][] results = new double[3][daysToSimulate]; String[] fileNames = {"scenario1_no_control.dat", "scenario2_random_immunization.dat", "scenario3_selective_immunization.dat"}; - // --- Scenarios --- - System.out.println("Scenario 1: No Control"); - results[0] = simulateAndCaptureResults(graph, infectionProbability, recoveryProbability, daysToSimulate, 0, false); +// --- Scénarios avec itérations --- + for (int scenario = 0; scenario < 3; scenario++) { + double[] averageFractions = new double[daysToSimulate]; + Arrays.fill(averageFractions, 0); // Initialiser à zéro pour chaque scénario + + for (int iteration = 0; iteration < iterations; iteration++) { + // Cloner le graphe pour garantir une nouvelle simulation à chaque itération + Graph graphClone = cloneGraph(graph); + + // Définir les paramètres spécifiques au scénario + double immunizationFraction = 0; + boolean randomImmunization = false; + + if (scenario == 1) { // Immunisation aléatoire + immunizationFraction = 0.5; + randomImmunization = true; + } else if (scenario == 2) { // Immunisation sélective + immunizationFraction = 0.5; + randomImmunization = false; + } - System.out.println("Scenario 2: Random Immunization"); - results[1] = simulateAndCaptureResults(graph, infectionProbability, recoveryProbability, daysToSimulate, 0.5, true); + // Exécuter la simulation et capturer les résultats + double[] fractions = simulateAndCaptureResults(graphClone, infectionProbability, recoveryProbability, daysToSimulate, immunizationFraction, randomImmunization); - System.out.println("Scenario 3: Selective Immunization"); - results[2] = simulateAndCaptureResults(graph, infectionProbability, recoveryProbability, daysToSimulate, 0.5, false); + // Ajouter les résultats de cette itération à la moyenne + for (int day = 0; day < daysToSimulate; day++) { + averageFractions[day] += fractions[day]; + } + } - // Sauvegarde des résultats dans des fichiers - saveResultsToFiles(results, fileNames); + // Diviser par le nombre d'itérations pour obtenir la moyenne + for (int day = 0; day < daysToSimulate; day++) { + averageFractions[day] /= iterations; + } - System.out.println("Les résultats ont été sauvegardés dans les fichiers pour Gnuplot."); + // Stocker les résultats du scénario + results[scenario] = averageFractions; - // Calculer les degrés moyens des groupes 0 et 1 + // Enregistrer les résultats dans un fichier + writeResultsToFile(fileNames[scenario], averageFractions); + } @@ -113,6 +125,24 @@ public class Propagation { epidemicThresholdAnalysis(graph,infectionProbability,recoveryProbability); + + // Calcul du degré moyen pour le Groupe 0 (non immunisé) + double totalDegreeGroup0 = 0; + for (Node node : group0) { + totalDegreeGroup0 += node.getDegree(); + } + double averageDegreeGroup0 = group0.isEmpty() ? 0 : totalDegreeGroup0 / group0.size(); + System.out.printf("Degré moyen (Groupe 0 - Non immunisé) : %.9f%n", averageDegreeGroup0); + + // Calcul du degré moyen pour le Groupe 1 (voisins immunisés) + double totalDegreeGroup1 = 0; + for (Node node : group1) { + totalDegreeGroup1 += node.getDegree(); + } + double averageDegreeGroup1 = group1.isEmpty() ? 0 : totalDegreeGroup1 / group1.size(); + System.out.printf("Degré moyen (Groupe 1 - Voisins immunisés) : %.9f%n", averageDegreeGroup1); + + // Réseau modifié après immunisation aléatoire System.out.println("Analyse après immunisation aléatoire :"); Graph randomImmunizedGraph = cloneGraph(graph); @@ -125,6 +155,46 @@ public class Propagation { applySelectiveImmunization(selectiveImmunizedGraph, 0.5); // 50% des voisins des hubs immunisés epidemicThresholdAnalysis(selectiveImmunizedGraph, infectionProbability, recoveryProbability); + + Graph barabasiGraph = DBLPNetworkAnalysis.generateBarabasiAlbertGraph(graph); // Exemple : 3 connexions par nœud + + + System.out.println("Simulation sur réseau Barabási-Albert :"); + runSimulations(barabasiGraph); + + + } + // --- Méthode pour écrire les résultats dans un fichier --- + private static void writeResultsToFile(String fileName, double[] data) { + try (BufferedWriter writer = new BufferedWriter(new FileWriter(fileName))) { + for (int day = 0; day < data.length; day++) { + writer.write(day + " " + data[day]); + writer.newLine(); + } + } catch (IOException e) { + System.err.println("Erreur lors de l'écriture du fichier : " + e.getMessage()); + } + } + + + private static void runSimulations(Graph graph) { + int daysToSimulate = 90; // 3 mois + double infectionProbability = 1.0; // β = 1 + double recoveryProbability = 0.5; // μ = 0.5 + + // Scénario 1 : Aucune immunisation + System.out.println("Scénario 1 : Aucune immunisation"); + simulateAndCaptureResults(graph, infectionProbability, recoveryProbability, daysToSimulate, 0, false); + + // Scénario 2 : Immunisation aléatoire + System.out.println("Scénario 2 : Immunisation aléatoire"); + applyRandomImmunization(graph, 0.5); // Immunisation aléatoire de 50 % + simulateAndCaptureResults(graph, infectionProbability, recoveryProbability, daysToSimulate, 0, true); + + // Scénario 3 : Immunisation sélective + System.out.println("Scénario 3 : Immunisation sélective"); + applySelectiveImmunization(graph, 0.5); // Immunisation sélective de 50 % + simulateAndCaptureResults(graph, infectionProbability, recoveryProbability, daysToSimulate, 0, false); } private static Graph cloneGraph(Graph original) { @@ -159,7 +229,7 @@ public class Propagation { private static void applySelectiveImmunization(Graph graph, double fraction) { Random random = new Random(); - // Créer une liste des nœuds pour éviter les modifications concurrentes du graphe + // Créer une liste des nœuds var nodes = graph.nodes().toList(); for (Node node : nodes) { @@ -191,19 +261,6 @@ public class Propagation { System.out.println("Seuil épidémique réel (c_réel) : " + cReal); System.out.println("Seuil épidémique théorique (c_théorique) : " + cTheoretical); - // Prédiction dans le réseau réel - if (tau > cReal) { - System.out.println("La maladie persiste dans le réseau réel (τ > c_réel).\n"); - } else { - System.out.println("La maladie disparaît dans le réseau réel (τ < c_réel).\n"); - } - - // Comparaison avec le réseau aléatoire - if (cReal < cTheoretical) { - System.out.println("Le réseau réel est plus vulnérable que le réseau aléatoire (c_réel < c_théorique).\n"); - } else { - System.out.println("Le réseau réel est plus résistant que le réseau aléatoire (c_réel >= c_théorique).\n"); - } } @@ -219,24 +276,6 @@ public class Propagation { - private static void saveResultsToFiles(double[][] results, String[] fileNames) { - for (int i = 0; i < results.length; i++) { - try (BufferedWriter writer = new BufferedWriter(new FileWriter(fileNames[i]))) { - for (int day = 0; day < results[i].length; day++) { - writer.write((day + 1) + "\t" + results[i][day]); - writer.newLine(); - } - } catch (IOException e) { - System.err.println("Erreur lors de l'écriture dans le fichier : " + fileNames[i]); - e.printStackTrace(); - } - } - } - - - - - private static double[] simulateAndCaptureResults(Graph graph, double infectionRate, double recoveryRate, int days, double immunizationFraction, boolean randomImmunization) { double[] infectedFractions = new double[days]; Random random = new Random(); @@ -251,10 +290,18 @@ public class Propagation { if (immunizationFraction > 0) { int immunizedCount = (int) (immunizationFraction * graph.getNodeCount()); if (randomImmunization) { - // Immunisation aléatoire : immuniser des nœuds directement + // Récupérer tous les nœuds dans une liste + List allNodes = new ArrayList<>(graph.nodes().toList()); + + // Mélanger la liste pour une sélection aléatoire unique + Collections.shuffle(allNodes, random); + + // Immuniser les premiers `immunizedCount` nœuds for (int i = 0; i < immunizedCount; i++) { - Node node = graph.getNode(random.nextInt(graph.getNodeCount())); - node.setAttribute("immune", true); + Node node = allNodes.get(i); + if (node != null) { + node.setAttribute("immune", true); + } } } else { // Immunisation sélective : immuniser un voisin pour 50% des nœuds existants @@ -323,40 +370,4 @@ public class Propagation { return infectedFractions; } - public static void calculateAverageDegrees(Graph graph, Set immune) { - // Groupes 0 (non immunisés) et 1 (immunisés) - Set group0 = new HashSet<>(); - Set group1 = immune; // Groupe 1 est directement le set 'immune' (les nœuds immunisés) - - // Ajouter 50 % des nœuds au groupe 0 - Random random = new Random(); - List nodes = new ArrayList<>(); - for (Node node : graph) { - nodes.add(node); - } - Collections.shuffle(nodes); // Mélanger les nœuds pour une sélection aléatoire - - int targetConvincers = graph.getNodeCount() / 2; // 50 % des nœuds - for (int i = 0; i < targetConvincers; i++) { - group0.add(nodes.get(i)); // Ajouter au groupe 0 - } - - // Calcul du degré moyen pour le groupe 0 (non immunisé) - double totalDegreeGroup0 = 0; - for (Node node : group0) { - totalDegreeGroup0 += node.getDegree(); - } - double averageDegreeGroup0 = group0.isEmpty() ? 0 : totalDegreeGroup0 / group0.size(); - System.out.println("Degré moyen du groupe 0 (non immunisé) : " + averageDegreeGroup0); - - // Calcul du degré moyen pour le groupe 1 (immunisé) - double totalDegreeGroup1 = 0; - for (Node node : group1) { - totalDegreeGroup1 += node.getDegree(); - } - double averageDegreeGroup1 = group1.isEmpty() ? 0 : totalDegreeGroup1 / group1.size(); - System.out.println("Degré moyen du groupe 1 (immunisé) : " + averageDegreeGroup1); - } - - }