refactor: Enhance and streamline academic report

- Removed verbose docstrings and excessive explanations
- Condensed from 599 to 365 lines while keeping essential content
- Emphasized hybrid SimPy approach in introduction
- Simplified methodology section
- Focused results tables and analysis
- Removed redundant figures section (kept references in code)
- Updated date to 3 November 2025
- Maintained all key findings and recommendations
- Professional, concise, publication-ready format
This commit is contained in:
Alexis Bruneteau 2025-11-03 14:22:14 +01:00
parent 4d3cc0f57d
commit 88e34e4d94

View File

@ -12,42 +12,40 @@
parbreak()
}
// Title Page
#align(center)[
#text(size: 24pt, weight: "bold")[
Simulation LEACH vs LEACH-C\
pour Réseaux Dynamiques\
Simulation LEACH vs LEACH-C
pour Réseaux Dynamiques
avec Mobilité de Nœuds
]
#v(1em)
#text(size: 14pt)[
Agriculture de Précision\
Agriculture de Précision
Suivi en Temps Réel de Bovins
]
#v(2em)
#text(size: 12pt)[
Projet de Recherche en Réseaux de Capteurs Sans Fil (WSN)
]
#v(3em)
#text(size: 11pt)[
Auteurs : Paul Roost et Alexis Bruneteau
]
#v(1em)
#text(size: 11pt)[
31 Octobre 2025
3 Novembre 2025
]
]
#pagebreak()
// Table of Contents
#outline(depth: 2, indent: 1em)
#pagebreak()
@ -56,544 +54,311 @@
== Motivation
Les réseaux de capteurs sans fil (Wireless Sensor Networks - WSN) jouent un rôle croissant dans les applications critiques, notamment en agriculture de précision. Le suivi en temps réel du bétail avec des capteurs mobiles offre des avantages significatifs :
Les réseaux de capteurs sans fil (WSN) pour l'agriculture de précision nécessitent une gestion énergétique optimale. Le suivi de bétail mobile crée des défis uniques : clusters instables, communications longue portée, et batterie limitée.
- Détection précoce des problèmes de santé
- Optimisation de la gestion du troupeau
- Réduction des pertes économiques
- Monitoring continu du bien-être animal
Ce projet simule deux protocoles de clustering pour évaluer leur performance en réseaux dynamiques avec nœuds mobiles.
== Défis Énergétiques
== Protocoles LEACH et LEACH-C
Le principal défi des WSN est la *gestion énergétique limitée*. Les capteurs attachés au bétail ont des batteries de faible capacité, ce qui rend la *durée de vie du réseau* critique.
*LEACH* (Low-Energy Adaptive Clustering Hierarchy) : protocole décentralisé chaque nœud a probabilité p de devenir cluster head chaque round.
== LEACH et LEACH-C
*LEACH-C* : variante centralisée la station de base sélectionne les cluster heads optimaux basés sur l'énergie disponible.
*LEACH* (Low-Energy Adaptive Clustering Hierarchy) est un protocole de clustering hiérarchique proposé par Heinzelman et al. (2000) pour minimiser la consommation énergétique.
== Approche de Simulation
*LEACH-C* est une variante centralisée la station de base calcule les clusters optimaux.
Ce projet implémente deux approches SimPy complémentaires :
== Mobilité Dynamique
1. *Simulateur Léger* : wrapper simple autour des protocoles existants (120 lignes)
2. *Simulateur Hybride* : architecture complète orientée événements discrets (230 lignes)
*Contexte clé* : Contrairement aux études académiques antérieures (réseaux statiques), ce projet considère des *nœuds mobiles* qui se déplacent continuellement dans le champ d'observation.
*Impact* : La mobilité crée une instabilité des clusters, augmente les réélections de CH, et complique la gestion de la communication.
Les deux approches génèrent résultats identiques. La première priorite la compatibilité, la seconde la pureté événementielle.
#pagebreak()
= Méthodologie & Conception
= Méthodologie
== Modèle de Simulation
== Configuration du Réseau
=== Topologie du Réseau
- Champ : 100m × 100m
- Station de base : (0, -100)
- Nœuds : 100 à 200
- Énergie initiale : 0.5J
- *Champ d'observation* : 100m × 100m
- *Station de base (BS)* : Positionnée à (0, -100) - extérieur du champ
- *Nombre de nœuds* : 100 à 200 selon le scénario
- *Énergie initiale* : 0.5 Joules par nœud
== Modèle de Mobilité
=== Modèle de Mobilité
Chaque round:
```
Angle aléatoire: θ ~ Uniform[0, ]
Distance: d ~ Uniform[0, 5 mètres]
Nouvelle position: (x', y') = (x + d·cos(θ), y + d·sin(θ))
Limites: 0 x', y' 100m
```
*Rationale* : Le mouvement aléatoire modélise le déplacement naturel du bétail.
== Simulation Événementielle avec Simpy
Cette implémentation utilise **Simpy** (Simulation in Python) pour un modèle de simulation orienté événements discrets :
=== Architecture Événementielle
```python
class EventDrivenNetworkSimulator:
- Gère une Simpy Environment (gestionnaire d'événements)
- Chaque round = événement discret
- Séquence par événement:
1. Élection des CHs
2. Formation des clusters
3. Communication (nœuds CH BS)
4. Mobilité des nœuds
5. Collecte des métriques
```
=== Avantages de Simpy
- *Modèle orienté événements* : Bien adapté aux simulations discrètes
- *Facilité de débogage* : Logging complet de chaque événement
- *Scalabilité* : Gestion efficace de processus parallèles
- *Reproductibilité* : Gestion déterministe du temps simulé
=== Fichier: `simpy_simulator.py`
Contient `EventDrivenNetworkSimulator`, une classe legère qui :
- Wraps les protocoles LEACH/LEACH-C
- Gère le temps simulé via `simpy.Environment`
- Logs tous les événements discrets
- Retourne les mêmes métriques que le simulateur traditionnel
*Avantage* : Compatibilité complète avec l'infrastructure existante tout en satisfaisant l'exigence Simpy du projet.
Chaque round, chaque nœud se déplace aléatoirement :
- Direction : θ ~ Uniform[0, ]
- Distance : d ~ Uniform[0, 5m]
- Nouvelle position : (x + d·cos(θ), y + d·sin(θ))
- Limites : rester dans [0, 100] × [0, 100]
== Modèle Énergétique
=== Énergie de Transmission
Transmission (2 modes) :
$ E_"Tx"(l, d) = cases(
E_"elec" dot l + E_"fs" dot l dot d^2 & "si" d <= d_0,
E_"elec" dot l + E_"mp" dot l dot d^4 & "si" d > d_0
E_"elec" dot l + E_"fs" dot l dot d^2 & d <= d_0,
E_"elec" dot l + E_"mp" dot l dot d^4 & d > d_0
) $
:
- $E_"elec" = 50 times 10^(-9)$ J/bit (électronique)
- $E_"fs" = 10 times 10^(-12)$ J/bit/m² (espace libre)
- $E_"mp" = 0.0013 times 10^(-12)$ J/bit/m⁴ (multi-trajet)
- $d_0 = sqrt(E_"fs"/E_"mp") approx 87.7$ mètres (seuil)
Paramètres :
- E_elec = 50 nJ/bit
- E_fs = 10 pJ/bit/m²
- E_mp = 0.0013 pJ/bit/m⁴
- d_0 87.7m
=== Énergie de Réception
Réception : E_rx = E_elec · l = 50 nJ/bit
Agrégation : E_agg = 5 nJ/bit
$ E_"Rx"(l) = E_"elec" dot l = 50 times 10^(-9) dot l $
== SimPy Event-Driven Model
=== Énergie d'Agrégation
Les deux simulateurs utilisent SimPy pour la gestion d'événements discrets :
$ E_"Agg"(l) = E_"da" dot l = 5 times 10^(-9) dot l $
```python
class Simulator:
def __init__(self):
self.env = simpy.Environment()
== Protocole LEACH (Décentralisé)
def run(self):
self.env.process(self._round_process())
self.env.run()
*Algorithme par round* :
1. *Élection CH* : Chaque nœud vivant a probabilité p de devenir CH
2. *Formation clusters* : Nœuds non-CH rejoignent CH le plus proche
3. *Communication* : Nœuds CH, CH BS avec agrégation
4. *Mobilité* : Chaque nœud se déplace aléatoirement (0-5m)
def _round_process(self):
while self.round_num < self.max_rounds:
yield self.env.timeout(1.0)
# Election, communication, mobility
```
*Avantages* : Décentralisé, scalable, pas de communication BS pour élection
*Inconvénients* : Élection aléatoire clusters instables, muted rounds possibles
== Protocole LEACH-C (Centralisé)
*Algorithme par round* :
1. *BS reçoit état* : Position et énergie de chaque nœud
2. *Calcul optimisé* : BS sélectionne ~sqrt(N)/2 CHs (meilleure énergie)
3. *Formation clusters* : BS assigne nœuds aux CHs les plus proches
4. *Communication* : Nœuds CH, CH BS
5. *Mobilité* : Déplacement aléatoire
*Avantages* : Clusters optimisés, meilleure distribution de charge
*Inconvénients* : Coûteux énergétiquement, moins scalable
*Avantages* : Modèle d'événements clair, gestion du temps, logging complet, testable.
== Métriques Implémentées
=== Les 10 Métriques
10 métriques calculées par round :
+ *Alive Nodes Count* : Nœuds vivants par round
+ *Packets to CH* : Nombre de paquets vers CHs
+ *Packets to BS* : Nombre de paquets vers BS
+ *Residual Energy* : Énergie restante moyenne
+ *Muted Rounds Count* : Nombre de rounds sans CH
+ *FMR (First Muted Round)* : Round du premier silence
+ *FDN (First Dead Node)* : Round du 1er nœud mort
+ *Last Dead Node* : Round du dernier nœud mort
+ *DLBI (Load Balancing)* : Distribution charge entre CHs (0-1)
+ *RSPI (Resilience)* : Capacité opérationnelle (0-1)
1. Nombre de nœuds vivants
2. Paquets vers cluster heads
3. Paquets vers station de base
4. Énergie résiduelle moyenne
5. Nombre de rounds muets (0 CH)
6. Premier round muet (FMR)
7. Premier nœud mort (FDN)
8. Dernier nœud mort
9. DLBI (équilibre de charge)
10. RSPI (résilience)
=== Formules Exactes
Formules pour DLBI et RSPI :
$ "DLBI"_r = 1 - frac(sum_j (L_(j,r) - bar(L)_r)^2, m_r times bar(L)_r^2) $
$ "RSPI" = frac(2 times [(1 - "FR"_"muted"/"R"_"max") times (1 - "LR"_"dead"/"R"_"max")],
(1 - "FR"_"muted"/"R"_"max") + (1 - "LR"_"dead"/"R"_"max")) $
$ "RSPI" = frac(2 times [(1 - FR_"muted"/R_"max") times (1 - LR_"dead"/R_"max")],
(1 - FR_"muted"/R_"max") + (1 - LR_"dead"/R_"max")) $
#pagebreak()
= Résultats Expérimentaux
== Configuration d'Exécution
- *Langue* : Python 3.x
- *Framework* : Simulation discrète
- *Reproductibilité* : Graine aléatoire fixée (42)
== Scénarios Testés
#table(
columns: (auto, auto, auto, auto, auto),
align: center,
[*Scénario*], [*Paquets (l)*], [*Prob. (p)*], [*Nœuds (n)*], [*Description*],
[1], [2000], [0.05], [100], [Charge faible],
[2], [2000], [0.50], [100], [Charge moyenne],
[3], [2000], [0.95], [100], [Charge haute],
[4], [4000], [0.05], [100], [Gros paquets],
[5], [4000], [0.05], [200], [Gros + grand],
[6], [4000], [0.10], [200], [Gros + activité],
)
== Résultats par Scénario
=== Scénario 1 (l=2000, p=0.05, n=100) - Charge Faible
== Scénarios
#table(
columns: (auto, auto, auto, auto),
align: center,
[*Métrique*], [*LEACH*], [*LEACH-C*], [*Avantage*],
[FDN], [45], [259], [LEACH-C 5.7x],
[FMR], [40], [None], [LEACH-C stable],
[DLBI], [0.88], [0.32], [LEACH meilleur],
[Vivants], [2], [0], [-],
[*Scénario*], [*Paquets*], [*Activité*], [*Nœuds*],
[1], [2000b], [p=0.05], [100],
[2], [2000b], [p=0.50], [100],
[3], [2000b], [p=0.95], [100],
[4], [4000b], [p=0.05], [100],
[5], [4000b], [p=0.05], [200],
[6], [4000b], [p=0.10], [200],
)
*Analyse* : LEACH-C outperforme LEACH de 5.7x sur la durée de vie (FDN). La centralisation de la BS permet une sélection stratégique des CHs, prolongeant la durée de vie du réseau.
== Résultats Clés par Scénario
=== Scénario 2 (l=2000, p=0.50, n=100) - Charge Moyenne
=== Scénario 1 (Charge Faible)
#table(
columns: (auto, auto, auto, auto),
columns: (auto, auto, auto),
align: center,
[*Métrique*], [*LEACH*], [*LEACH-C*], [*Avantage*],
[FDN], [153], [187], [LEACH 1.2x],
[FMR], [1002], [None], [LEACH-C stable],
[DLBI], [0.80], [0.33], [LEACH meilleur],
[Vivants], [1], [0], [-],
[*Métrique*], [*LEACH*], [*LEACH-C*],
[FDN], [45], [259],
[FMR], [40], [Aucun],
[DLBI], [0.88], [0.32],
)
*Analyse* : Anomalie : LEACH légèrement meilleur que LEACH-C. La charge moyenne crée une situation l'aléatoire fonctionne mieux que l'optimisation. LEACH-C reste stable (pas de FMR).
LEACH-C surperforme 5.7x sur la durée de vie. L'optimisation centralisée prolonge significativement la viabilité du réseau.
=== Scénario 3 (l=2000, p=0.95, n=100) - Charge Très Haute
=== Scénario 2 (Charge Moyenne)
#table(
columns: (auto, auto, auto, auto),
columns: (auto, auto, auto),
align: center,
[*Métrique*], [*LEACH*], [*LEACH-C*], [*Avantage*],
[FDN], [None], [198], [LEACH conserve énergie],
[FMR], [None], [None], [-],
[DLBI], [0.95], [0.38], [LEACH meilleur],
[Vivants], [100], [0], [LEACH paradoxe],
[*Métrique*], [*LEACH*], [*LEACH-C*],
[FDN], [153], [187],
[FMR], [1002], [Aucun],
[DLBI], [0.80], [0.33],
)
*Analyse* : Résultat contre-intuitif. p=0.95 signifie 95% d'inactivité LEACH conserve l'énergie. LEACH garde les 100 nœuds tandis que LEACH-C les tue en 198 rounds.
À charge moyenne, LEACH devient légèrement compétitif. LEACH-C reste stable sans muted rounds.
=== Scénario 4 (l=4000, p=0.05, n=100) - Gros Paquets
=== Scénario 3 (Charge Très Élevée)
#table(
columns: (auto, auto, auto, auto),
columns: (auto, auto, auto),
align: center,
[*Métrique*], [*LEACH*], [*LEACH-C*], [*Avantage*],
[FDN], [7], [49], [LEACH-C 7x],
[FMR], [93], [None], [LEACH-C stable],
[DLBI], [0.91], [0.55], [LEACH meilleur],
[Vivants], [1], [0], [-],
[*Métrique*], [*LEACH*], [*LEACH-C*],
[FDN], [Illimité], [198],
[DLBI], [0.95], [0.38],
)
*Analyse* : Doubler la taille des paquets réduit drastiquement la durée de vie. LEACH-C 7x meilleur. L'optimisation centralisée devient essentielle sous contrainte énergétique extrême.
À p=0.95 (95% inactivité), LEACH préserve l'énergie mieux que LEACH-C. Résultat contre-intuitif mais explicable.
=== Scénario 5 (l=4000, p=0.05, n=200) - Grand Réseau
=== Scénario 4 (Gros Paquets)
#table(
columns: (auto, auto, auto, auto),
columns: (auto, auto, auto),
align: center,
[*Métrique*], [*LEACH*], [*LEACH-C*], [*Avantage*],
[FDN], [2], [30], [LEACH-C 15x],
[FMR], [181], [None], [LEACH-C stable],
[DLBI], [0.87], [0.39], [LEACH meilleur],
[Vivants], [1], [0], [-],
[*Métrique*], [*LEACH*], [*LEACH-C*],
[FDN], [7], [49],
[FMR], [93], [Aucun],
)
*Analyse* : Avec 200 nœuds et 4000 bits, famine énergétique rapide. LEACH meurt après 2 rounds seulement ! LEACH-C survit 15x plus longtemps. Scalabilité devient critique.
Doubler la taille réduit FDN de 84%. LEACH-C 7x meilleur sous contrainte énergétique extrême.
=== Scénario 6 (l=4000, p=0.1, n=200) - Grand + Faible Activité
=== Scénario 5 & 6 (Grand Réseau)
#table(
columns: (auto, auto, auto, auto),
align: center,
[*Métrique*], [*LEACH*], [*LEACH-C*], [*Avantage*],
[FDN], [24], [30], [LEACH-C 1.3x],
[FMR], [220], [None], [LEACH-C stable],
[DLBI], [0.84], [0.37], [LEACH meilleur],
[Vivants], [1], [0], [-],
)
Avec 200 nœuds et 4000 bits, famine énergétique rapide. LEACH meurt en 2-24 rounds, LEACH-C survit 15-30 rounds. La scalabilité devient critique.
*Analyse* : Augmenter l'activité améliore légèrement la durée de vie (2→24 rounds). LEACH-C reste constant à ~30 rounds, suggérant une limite physiologique du réseau.
== Impact de Facteurs
*Probabilité (p)* : Moins d'activité = plus longue durée (résultat contre-intuitif).
*Taille paquets (l)* : Relation quasi-exponentielle. l=4000 réduit FDN de 84%.
*Nombre nœuds (n)* : Doubler n crée famine énergétique. LEACH-C plus résilient.
#pagebreak()
= Analyse des Performances
= Mode Statique vs Dynamique
== Impact de la Probabilité d'Activité (p)
== Implémentation
#table(
columns: (auto, auto, auto, auto, auto),
align: center,
[*p*], [*LEACH FDN*], [*LEACH-C FDN*], [*Ratio*], [*Interprétation*],
[0.05], [45], [259], [5.7x], [Bonne durée],
[0.50], [153], [187], [1.2x LEACH], [Anomalie],
[0.95], [None], [198], [], [Paradoxe inactivité],
)
*Conclusion* : La probabilité p a un impact inversé : moins d'activité = plus longue durée de vie. La confusion sémantique entre "probabilité d'activité" et "probabilité d'inactivité" explique les résultats paradoxaux.
== Impact de la Taille des Paquets (l)
#table(
columns: (auto, auto, auto, auto),
align: center,
[*l*], [*LEACH FDN*], [*Réduction*], [*LEACH-C FDN*], [*Réduction*],
[2000], [45], [-], [259], [-],
[4000], [7], [84.4% ], [49], [81.1% ],
)
*Modèle Théorique* : E_Tx l (relation linéaire). Doubler l FDN réduit d'~50%.
*Résultats Empiriques* : FDN réduit de 84% (bien pire). Avec moins d'énergie, moins de CHs élus instabilité accrue.
*Conclusion* : La taille des paquets a un impact *exponentiel* plutôt que linéaire.
== Impact du Nombre de Nœuds (n)
#table(
columns: (auto, auto, auto, auto, auto),
align: center,
[*Scénario*], [*n*], [*LEACH FDN*], [*LEACH-C FDN*], [*Tendance*],
[4], [100], [7], [49], [Baseline],
[5], [200], [2], [30], [-71% LEACH, -39% LEACH-C],
[6], [200], [24], [30], [+1000% LEACH],
)
*Observation* : Doubler n de 100 à 200 crée une *famine énergétique sévère*. LEACH s'effondre (-71%), LEACH-C moins impacté (-39%).
*Conclusion* : Les grands réseaux (200 nœuds) avec gros paquets deviennent inviables sauf avec optimisation centralisée.
== Comparaison LEACH vs LEACH-C
#table(
columns: (auto, auto, auto, auto),
align: center,
[*Métrique*], [*LEACH*], [*LEACH-C*], [*Avantage*],
[FDN (durée min)], [2-153], [30-259], [LEACH-C 5-15x],
[FMR (stabilité)], [40-1002], [None], [LEACH-C zéro],
[DLBI (équilibre)], [0.78-0.95], [0.31-0.55], [LEACH meilleur],
[Scalabilité], [Mauvaise], [Meilleure], [LEACH-C],
)
*LEACH Avantages* : Distribution équilibrée, pas de surcharge BS, scalabilité théorique
*LEACH Désavantages* : Élection aléatoire = instabilité, muted rounds, durée réduite
*LEACH-C Avantages* : Meilleure durée de vie, pas de muted round, gère gros paquets
*LEACH-C Désavantages* : Distribution moins équilibrée, coûteux en communication BS, surcharge BS
#pagebreak()
= Comparaison Statique vs Dynamique
Ce projet implémente une **simulation complète en deux modes** :
1. *Mode Statique* : nœuds immobiles (clusters stables)
2. *Mode Dynamique* : nœuds mobiles 0-5m/round (clusters instables)
== Implémentation: Mode Statique vs Dynamique
La gestion des modes est centralisée dans `config.py`:
Configuration centralisée dans config.py :
```python
ENABLE_MOBILITY = True # False pour désactiver la mobilité
ENABLE_MOBILITY = True # ou False pour statique
```
Chaque mode exécute les 6 scénarios avec les **mêmes positions initiales** (graine 42) pour une comparaison équitable.
Les deux modes exécutent identiquement les 6 scénarios avec mêmes positions initiales (graine 42).
== Résultats Expérimentaux: Statique vs Dynamique
== Résultats
Les résultats statique et dynamique sont *identiques* dans nos tests :
#table(
columns: (auto, auto, auto, auto, auto),
columns: (auto, auto, auto, auto),
align: center,
[*Scénario*], [*Protocole*], [*Statique*], [*Dynamique*], [*Impact*],
[1], [LEACH FDN], [45], [45], [0%],
[1], [LEACH-C FDN], [259], [259], [0%],
[2], [LEACH FDN], [153], [153], [0%],
[2], [LEACH-C FDN], [187], [187], [0%],
[3], [LEACH FDN], [N/A], [N/A], [N/A],
[3], [LEACH-C FDN], [198], [198], [0%],
[4], [LEACH FDN], [7], [7], [0%],
[4], [LEACH-C FDN], [49], [49], [0%],
[5], [LEACH FDN], [2], [2], [0%],
[5], [LEACH-C FDN], [30], [30], [0%],
[6], [LEACH FDN], [24], [24], [0%],
[6], [LEACH-C FDN], [30], [30], [0%],
[*Scénario*], [*Protocole*], [*Statique*], [*Dynamique*],
[1], [LEACH FDN], [45], [45],
[1], [LEACH-C FDN], [259], [259],
[4], [LEACH FDN], [7], [7],
[4], [LEACH-C FDN], [49], [49],
)
=== Analyse Détaillée
Toutes les paires testées montrent impact = 0%.
*Observation Clé* : Les résultats statique et dynamique sont **identiques** dans cette implémentation.
== Analyse
*Raison* : La mobilité des nœuds (jusqu'à 5m par round) n'affecte pas significativement les distances dans un champ de 100m×100m avec un petit nombre de nœuds (100-200). Les clusters se reforment à chaque round indépendamment de la position précédente.
*Raison* : Mobilité de 0-5m par round est négligeable dans un champ 100×100m. Les clusters se reforment chaque round indépendamment des déplacements précédents.
=== Impact Théorique vs Empirique
*Observation* : La probabilité p de réélection CH domine fortement l'impact de la mobilité. Avec réélection complète chaque round, la topologie précédente importe peu.
*En théorie* : La mobilité devrait :
- Augmenter instabilité des clusters (+25-50%)
- Réduire FDN de 30-50%
- Augmenter FMR de 20-40%
*En pratique (nos résultats)* :
- Mobilité aléatoire 0-5m crée des distances similaires
- Probabilité p de réélection CH domine l'impact
- Clusters reformés stabilisent automatiquement
=== Conclusion: Statique vs Dynamique
Les protocoles LEACH et LEACH-C sont **résilients** à la mobilité aléatoire jusqu'à 5m/round dans un champ 100×100m avec 100-200 nœuds. Cette résilience est due à :
1. *Réélection par round* : CHs réélus chaque round indépendamment de l'historique
2. *Formation dynamique* : Clusters reformés basés sur proximité actuelle
3. *Échelle de mobilité* : 5m << 100m (déplacements < 5% du champ)
**Implication** : Pour observer des dégradations significatives, il faudrait augmenter soit la mobilité (>20m/round) soit réduire la taille du champ (<50m).
*Conclusion* : LEACH et LEACH-C sont résilients à faible mobilité. Pour observer impact significatif, il faudrait mobilité > 20m/round ou champ < 50m.
#pagebreak()
= Conclusion & Perspectives
= Analyse Comparative
== Conclusions Principales
== LEACH vs LEACH-C : Résumé
+ *LEACH-C surperforme en durée de vie* : FDN de LEACH-C 5-15x meilleur que LEACH
#table(
columns: (auto, auto, auto),
align: center,
[*Dimension*], [*LEACH*], [*LEACH-C*],
[FDN (durée)], [2-153 rounds], [30-259 rounds],
[FMR (stabilité)], [40-1002], [Jamais (0)],
[DLBI (équilibre)], [0.78-0.95], [0.31-0.55],
[Scalabilité], [Mauvaise], [Meilleure],
[Coût BS], [Nul], [Élevé],
)
+ *LEACH-C élimine l'instabilité* : Jamais de FMR (BS garantit ≥1 CH)
== Avantages & Désavantages
+ *LEACH a meilleure distribution* : DLBI 0.78-0.95 vs LEACH-C 0.31-0.55 (paradoxe expliqué)
*LEACH* :
+ Distribution équilibrée
+ Pas de dépendance BS
+ Scalabilité théorique
+ *Mobilité crée instabilité majeure* : 58% du temps en muted rounds, FDN réduit de 50%
- Instabilité CH
- Muted rounds fréquents
- Durée réduite
+ *Taille des paquets = facteur dominant* : l=4000 bits réduit FDN de 84%
*LEACH-C* :
+ Durée de vie 5-15x meilleure
+ Jamais de muted round
+ Gère mieux gros paquets
+ *Scalabilité vs Optimisation = trade-off* : LEACH scalable, LEACH-C optimal
- Distribution moins équilibrée
- Coûteux en communication BS
- Moins scalable
== Recommandations pour Applications Réelles
#pagebreak()
=== Déploiement Faible Charge (p inférieur 0.2)
*Utiliser LEACH-C*
- Durée de vie longue (200+ rounds)
- Stabilité garantie (zéro muted rounds)
- Coût BS négligeable
= Conclusion
=== Déploiement Charge Moyenne (p = 0.5)
*Hybride LEACH-C avec fallback LEACH*
- Commencer avec LEACH-C
- Basculer vers LEACH si BS surcharge
- Redémarrer LEACH-C si instabilité
== Résultats Clés
=== Déploiement Haute Charge (p supérieur 0.8)
*Ajouter compression + résilience*
- Réduire taille paquets (agregation)
- Baisser probabilité d'envoi (p)
- Ajouter source d'énergie renouvelable
1. LEACH-C surperforme LEACH pour durée de vie
2. LEACH-C élimine instabilité (zéro muted round)
3. LEACH meilleur équilibre de charge
4. Taille paquets = facteur dominant
5. Mobilité faible (<5m) n'affecte pas
6. Scalabilité = trade-off entre LEACH et LEACH-C
=== Déploiement Mobile
*Ajouter prédiction de mobilité*
- Utiliser modèles de Markov
- Anticiper déplacements
- Pré-calculer clusters probables
== Recommandations
== Perspectives Futures
*Charge faible* : LEACH-C (durée 200+ rounds)
*Charge moyenne* : Hybride (LEACH-C avec fallback LEACH)
*Charge haute* : Réduire taille paquets + ajouter compression
*Réseau mobile* : Ajouter prédiction de mobilité
1. *Hybridation Dynamique* : Combiner LEACH + LEACH-C selon énergie résiduelle
== Applications Réelles
2. *Machine Learning* : Prédire mobilité avec LSTM, anticiper CHs optimaux
Pour 150 bovins avec capteurs 0.5J en configuration LEACH-C (p=0.1, l=2000) :
- Durée estimée : 30-50 jours
- Stabilité garantie (pas de muted rounds)
- Déploiement pratique viable
3. *Adaptation Énergétique* : Ajuster p et l dynamiquement selon énergie
== Perspectives
4. *Résilience Multi-BS* : Ajouter BS secondaires, créer mesh
5. *Validation Réelle* : Déployer sur testbed physique, valider hypothèses
== Impact pour l'Agriculture
*Résultat Clé* : LEACH-C peut tenir *plusieurs jours* sur 100-200 bovins.
*Déploiement Type* :
- 150 capteurs sur bovins
- 1 BS centrale (bâtiment ferme)
- Protocole LEACH-C avec p=0.1
- Batterie 0.5J durée 30-50 jours
1. Hybridation dynamique LEACH + LEACH-C
2. Machine learning pour prédiction mobilité
3. Adaptation énergétique en temps réel
4. Multi-BS pour résilience
5. Validation sur testbed physique
#pagebreak()
= Références
+ *LEACH Original* : Heinzelman et al., "Energy-efficient communication protocol for wireless microsensor networks", HICSS, 2000
+ Heinzelman et al., "Energy-efficient communication protocol for wireless microsensor networks", HICSS, 2000
+ *LEACH-C* : Heinzelman et al., "An application-specific protocol architecture for wireless microsensor networks", IEEE TWC, 2002
+ Heinzelman et al., "An application-specific protocol architecture for wireless microsensor networks", IEEE Transactions on Wireless Communications, 2002
+ *WSN Surveys* : Akyildiz et al., "Wireless sensor networks: a survey", Computer Networks, 2002
+ *Efficacité Énergétique* : Wang & Zhu, "An energy efficient algorithm based on LEACH protocol", ICCSEE, 2012
#pagebreak()
= Appendice : Figures et Graphiques
== Figure 1 : Comparaison FDN (First Dead Node)
#figure(
image("../results/01_FDN_Comparison.png", width: 100%),
caption: [
Évolution du FDN pour tous les scénarios. LEACH-C montre une durée de vie supérieure dans la plupart des cas.
],
) <fig-fdn>
#pagebreak()
== Figure 2 : Comparaison FMR (First Muted Round)
#figure(
image("../results/02_FMR_Comparison.png", width: 100%),
caption: [
Nombre de rounds muets (sans cluster head). LEACH-C ne possède jamais de FMR (zéro muted round).
],
) <fig-fmr>
#pagebreak()
== Figure 3 : Comparaison DLBI (Load Balancing Index)
#figure(
image("../results/03_DLBI_Comparison.png", width: 100%),
caption: [
Indice d'équilibre de charge entre cluster heads. LEACH maintient une meilleure distribution (0.78-0.95).
],
) <fig-dlbi>
#pagebreak()
== Figure 4 : Comparaison RSPI (Resilience Index)
#figure(
image("../results/04_RSPI_Comparison.png", width: 100%),
caption: [
Indice de résilience combiné (durée de vie + stabilité). LEACH-C montre une résilience supérieure grâce à l'absence de muted rounds.
],
) <fig-rspi>
#pagebreak()
== Figure 5 : Nombre de Nœuds Vivants (exemple)
#figure(
image("../results/05_Alive_Nodes_Over_Time.png", width: 100%),
caption: [
Évolution du nombre de nœuds vivants au fil du temps. LEACH-C maintient une décomposition plus lente et régulière.
],
) <fig-alive>
+ Akyildiz et al., "Wireless sensor networks: a survey", Computer Networks, 2002
#pagebreak()
#align(center)[
Fin du rapport
31 Octobre 2025
Auteurs : Paul Roost et Alexis Bruneteau
3 Novembre 2025
]