- Created summary.csv to store simulation results for various scenarios, protocols, and metrics. - Developed run.sh script to automate the simulation process, including dependency checks, simulation execution, and result analysis. - Ensured proper directory structure for results and reports. - Added error handling for Python and matplotlib dependencies.
258 lines
6.9 KiB
Markdown
258 lines
6.9 KiB
Markdown
# Simulation LEACH vs LEACH-C pour Réseaux Dynamiques
|
||
|
||
## Vue d'ensemble
|
||
|
||
Ce projet implémente une simulation complète des protocoles **LEACH** (Low-Energy Adaptive Clustering Hierarchy) et **LEACH-C** (centralisé) pour des réseaux de capteurs sans fil (WSN) avec **mobilité dynamique** des nœuds.
|
||
|
||
**Contexte** : Agriculture de précision - suivi en temps réel de bovins avec capteurs se déplaçant dans un champ.
|
||
|
||
**Deadline** : 5 novembre 2025, 23:42
|
||
|
||
---
|
||
|
||
## Structure du Projet
|
||
|
||
```
|
||
/algo/
|
||
├── code/
|
||
│ ├── config.py # Configuration et constantes
|
||
│ ├── node.py # Classe Node
|
||
│ ├── metrics.py # Classe Metrics (10 métriques)
|
||
│ ├── leach.py # Protocole LEACH décentralisé
|
||
│ ├── leach_c.py # Protocole LEACH-C centralisé
|
||
│ ├── main.py # Contrôleur principal
|
||
│ ├── analysis.py # Analyseur et graphiques
|
||
│ └── run.sh # Script de lancement
|
||
├── results/
|
||
│ ├── simulation_results.json # Résultats bruts
|
||
│ ├── summary.csv # Tableau récapitulatif
|
||
│ ├── 01_FDN_Comparison.png # Graphique FDN
|
||
│ ├── 02_FMR_Comparison.png # Graphique FMR
|
||
│ ├── 03_DLBI_Comparison.png # Graphique DLBI
|
||
│ ├── 04_RSPI_Comparison.png # Graphique RSPI
|
||
│ └── 05_Alive_Nodes_Over_Time.png
|
||
└── rapport/
|
||
└── Rapport_LEACH_LEACHC.typ # Rapport complet (Typst + PDF)
|
||
```
|
||
|
||
---
|
||
|
||
## Comment Exécuter
|
||
|
||
### 1. Installation des dépendances
|
||
|
||
```bash
|
||
pip install matplotlib
|
||
```
|
||
|
||
### 2. Lancer la simulation
|
||
|
||
```bash
|
||
cd /home/paul/algo
|
||
python code/main.py
|
||
```
|
||
|
||
### 3. Générer les graphiques et analyses
|
||
|
||
```bash
|
||
python code/analysis.py
|
||
```
|
||
|
||
Les résultats seront sauvegardés dans `/home/paul/algo/results/`
|
||
|
||
---
|
||
|
||
## Implémentation
|
||
|
||
### Protocoles
|
||
|
||
#### **LEACH (Décentralisé)**
|
||
- Élection aléatoire des cluster heads (probabilité p)
|
||
- Formation de clusters basée sur proximité
|
||
- Communication nœud → CH → BS
|
||
- Agrégation de données au niveau CH
|
||
|
||
#### **LEACH-C (Centralisé)**
|
||
- BS reçoit l'état de tous les nœuds
|
||
- Calcul des clusters optimaux (heuristique : sélection par énergie)
|
||
- Distribution optimale des rôles
|
||
- Moins aléatoire mais plus coûteux en énergie
|
||
|
||
### Mobilité Dynamique
|
||
|
||
- Chaque nœud se déplace aléatoirement chaque round
|
||
- Déplacement max : 5 mètres
|
||
- Restent dans les limites du champ (100m × 100m)
|
||
- Impact majeur sur stabilité et efficacité
|
||
|
||
### Modèle Énergétique
|
||
|
||
```
|
||
E_Tx(l, d) =
|
||
- Si d ≤ d0 : E_elec×l + E_fs×l×d²
|
||
- Si d > d0 : E_elec×l + E_mp×l×d⁴
|
||
|
||
E_Rx(l) = E_elec × l
|
||
E_Agg(l) = E_da × l
|
||
|
||
d0 = sqrt(E_fs / E_mp)
|
||
```
|
||
|
||
---
|
||
|
||
## Métriques Implémentées
|
||
|
||
### 1. **Nœuds Vivants** (Alive Nodes Count)
|
||
Nombre de nœuds actifs après chaque round.
|
||
|
||
### 2. **Paquets vers CH** (Packets to Cluster Head)
|
||
Nombre total de paquets envoyés par les nœuds réguliers vers leurs CHs.
|
||
|
||
### 3. **Paquets vers BS** (Packets to Base Station)
|
||
Nombre total de paquets envoyés par les CHs vers la station de base.
|
||
|
||
### 4. **Énergie Résiduelle** (Residual Energy)
|
||
Énergie restante dans chaque nœud.
|
||
|
||
### 5. **Muted Rounds**
|
||
Nombre de rounds où **aucun CH n'est élu** (communication impossible).
|
||
|
||
### 6. **FMR** (First Muted Round)
|
||
Le round exact où le premier silence apparaît.
|
||
|
||
### 7. **FDN** (First Dead Node)
|
||
Le round quand le **premier nœud** épuise son énergie.
|
||
|
||
### 8. **Last Dead Node**
|
||
Le round quand le **dernier nœud** meurt.
|
||
|
||
### 9. **DLBI** (Dynamic Load Balancing Index)
|
||
|
||
$$DLBI = \frac{1}{N} \sum_{r=1}^{N} DLBI_r$$
|
||
|
||
$$DLBI_r = 1 - \frac{\sum(L_{j,r} - \bar{L}_r)^2}{m_r \times \bar{L}_r^2}$$
|
||
|
||
**Interprétation** : Évalue l'équilibre de charge entre les CHs.
|
||
- Proche de 1 = distribution équilibrée
|
||
- Bas = déséquilibre grave
|
||
|
||
### 10. **RSPI** (Relative Silence Period Index)
|
||
|
||
$$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})}$$
|
||
|
||
**Interprétation** : Moyenne harmonique entre résilience et durée de vie.
|
||
|
||
---
|
||
|
||
## Scénarios de Test
|
||
|
||
| Scénario | Paquets (l) | Probabilité (p) | Nœuds (n) |
|
||
|----------|-------------|-----------------|-----------|
|
||
| 1 | 2000 | 0.05 | 100 |
|
||
| 2 | 2000 | 0.50 | 100 |
|
||
| 3 | 2000 | 0.95 | 100 |
|
||
| 4 | 4000 | 0.05 | 100 |
|
||
| 5 | 4000 | 0.05 | 200 |
|
||
| 6 | 4000 | 0.10 | 200 |
|
||
|
||
---
|
||
|
||
## Résultats
|
||
|
||
Les résultats incluent :
|
||
|
||
1. **Fichier JSON** : Données complètes de chaque round
|
||
2. **CSV récapitulatif** : Tableau avec toutes les métriques
|
||
3. **Graphiques** :
|
||
- FDN Comparison
|
||
- FMR Comparison
|
||
- DLBI Comparison
|
||
- RSPI Comparison
|
||
- Nombre de nœuds vivants au fil du temps
|
||
|
||
---
|
||
|
||
## Points Importants
|
||
|
||
### Dynamique vs Statique
|
||
- **Statique** : Clusters stables, peu d'overhead
|
||
- **Dynamique** : Clusters instables, plus d'énergie perdue, plus réaliste
|
||
|
||
### Rounds Muets (Muted Rounds)
|
||
Quand **aucun nœud n'est élu** comme CH → communication impossible. Problème majeur en réseau dynamique.
|
||
|
||
### LEACH vs LEACH-C
|
||
- **LEACH** : Scalable, décentralisé, mais élection aléatoire
|
||
- **LEACH-C** : Meilleure distribution, plus coûteux énergétiquement
|
||
|
||
### Impact de la Mobilité
|
||
La mobilité dynamique cause :
|
||
- Augmentation de la consommation d'énergie
|
||
- Plus de muted rounds
|
||
- Nécessité de réélections fréquentes
|
||
|
||
---
|
||
|
||
## Technologies Utilisées
|
||
|
||
- **Python 3.x**
|
||
- **Matplotlib** : Visualisation des résultats
|
||
- **JSON** : Sauvegarde des résultats
|
||
- **Simulation événementielle** : Approche discrète des rounds
|
||
|
||
---
|
||
|
||
## Fichiers Principaux
|
||
|
||
### `config.py`
|
||
Configuration globale, paramètres, scénarios.
|
||
|
||
### `node.py`
|
||
Classe représentant un capteur (position, énergie, états).
|
||
|
||
### `metrics.py`
|
||
Collecte des 10 métriques de performance.
|
||
|
||
### `leach.py`
|
||
Implémentation du protocole LEACH décentralisé.
|
||
|
||
### `leach_c.py`
|
||
Implémentation du protocole LEACH-C centralisé.
|
||
|
||
### `main.py`
|
||
Contrôleur principal : crée les nœuds, lance les protocoles.
|
||
|
||
### `analysis.py`
|
||
Analyseur et générateur de graphiques.
|
||
|
||
---
|
||
|
||
## Ressources Académiques
|
||
|
||
1. **LEACH Original** : W. B. Heinzelman et al., "An application-specific protocol architecture for wireless microsensor networks", IEEE Trans. Wireless Commun., 2002
|
||
|
||
2. **LEACH-C** : W. B. Heinzelman et al., "Energy-efficient communication protocol for wireless microsensor networks", Proc. HICSS, 2000
|
||
|
||
3. **Efficacité Énergétique** : N. Wang & H. Zhu, "An energy efficient algorithm based on LEACH protocol", Proc. ICCSEE, 2012
|
||
|
||
---
|
||
|
||
## Checklist
|
||
|
||
- [x] Implémentation LEACH (décentralisé)
|
||
- [x] Implémentation LEACH-C (centralisé)
|
||
- [x] Support mobilité dynamique
|
||
- [x] Modèle énergétique complet
|
||
- [x] 10 métriques de performance
|
||
- [x] 6 scénarios de test
|
||
- [x] Génération de graphiques
|
||
- [x] Rapport complet (10 pages max)
|
||
|
||
---
|
||
|
||
## 📞 Contact
|
||
|
||
Pour des questions ou clarifications, veuillez consulter les spécifications du projet.
|
||
|
||
**Deadline** : 5 novembre 2025, 23:42 ⏰
|