# AlgoRep - Quick Start Guide

## Install & Run (All-in-One)

### Using Poetry (Recommended)
```bash
cd /home/sorti/projects/AlgoRep
poetry install
poetry run python code/main.py
poetry run python code/analysis_static_dynamic.py
poetry run python code/analysis.py
```

### Using pip
```bash
cd /home/sorti/projects/AlgoRep
pip install -r requirements.txt
python3 code/main.py
python3 code/analysis_static_dynamic.py
python3 code/analysis.py
```

---

## What Gets Generated

### Simulation Results
- ✅ `results/simulation_results_dynamic.json` - Dynamic network results
- ✅ `results/simulation_results_static.json` - Static network results
- ✅ `results/comparison_static_dynamic.csv` - Comparison table
- ✅ `results/comparison_*.png` - Impact graphs (3 files)

### Already Present
- ✅ `rapport/Rapport_LEACH_LEACHC.typ` - Full report
- ✅ `rapport/Rapport_LEACH_LEACHC.pdf` - PDF version
- ✅ `code/simpy_simulator.py` - Simpy demo

---

## Test the Improvements

### 1. Test Simpy Event-Driven Simulator
```bash
python3 code/simpy_simulator.py
# Expected: "Simulation completed at time 50.0s"
```

### 2. Run Static vs Dynamic Comparison
```bash
python3 code/analysis_static_dynamic.py
# Generates: CSV + 3 PNG graphs + console summary
```

### 3. Check Static/Dynamic Results
```bash
ls -lh results/simulation_results_*.json
# Both files should exist (~95MB each)
```

---

## Key Features Added

| Feature | File | Impact |
|---------|------|--------|
| **Simpy Integration** | `code/simpy_simulator.py` | Event-driven simulation framework |
| **Static Mode** | `config.py`, `node.py`, `main.py` | Compare static vs dynamic networks |
| **Comparative Analysis** | `code/analysis_static_dynamic.py` | CSV + graphs for comparison |
| **Modern Environment** | `pyproject.toml` | Poetry dependency management |
| **Complete Docs** | `README.md`, `IMPROVEMENTS_SUMMARY.md` | Full documentation |

---

## File Structure

```
/home/sorti/projects/AlgoRep/
├── code/
│   ├── config.py                    # ENABLE_MOBILITY flag
│   ├── node.py                      # move() respects flag
│   ├── metrics.py                   # 10 performance metrics
│   ├── leach.py                     # LEACH protocol
│   ├── leach_c.py                   # LEACH-C protocol
│   ├── main.py                      # Bimode simulator
│   ├── simpy_simulator.py           # ⭐ NEW: Simpy framework
│   ├── analysis.py                  # Graphiques
│   └── analysis_static_dynamic.py   # ⭐ NEW: Comparison
├── results/
│   ├── simulation_results_dynamic.json  # ⭐ NEW
│   ├── simulation_results_static.json   # ⭐ NEW
│   ├── comparison_static_dynamic.csv    # ⭐ NEW
│   ├── comparison_*.png                 # ⭐ NEW (3 files)
│   └── [other existing files]
├── rapport/
│   ├── Rapport_LEACH_LEACHC.typ    # Enhanced report
│   └── Rapport_LEACH_LEACHC.pdf
├── pyproject.toml                   # ⭐ NEW: Poetry config
├── requirements.txt                 # + simpy
├── README.md                        # Enhanced docs
├── IMPROVEMENTS_SUMMARY.md          # ⭐ NEW: Summary
├── CHECKLIST_FINAL.md              # ⭐ NEW: Evaluation checklist
└── QUICK_START.md                  # This file
```

---

## Simulation Parameters

### Scenarios (6 Total)
| # | Packets (bits) | Activity Prob | Nodes | Purpose |
|---|---|---|---|---|
| 1 | 2000 | 0.05 | 100 | Low activity |
| 2 | 2000 | 0.50 | 100 | Medium activity |
| 3 | 2000 | 0.95 | 100 | High activity |
| 4 | 4000 | 0.05 | 100 | Large packets |
| 5 | 4000 | 0.05 | 200 | Scaling test |
| 6 | 4000 | 0.10 | 200 | Large + activity |

### Performance Metrics (10 Total)
1. Alive Nodes Count
2. Packets to Cluster Head
3. Packets to Base Station
4. Residual Energy
5. Muted Rounds Count
6. First Muted Round (FMR)
7. First Dead Node (FDN)
8. Last Dead Node
9. Dynamic Load Balancing Index (DLBI)
10. Relative Silence Period Index (RSPI)

---

## Key Improvements

### ✅ Static vs Dynamic Mode
- Toggle via `config.py:ENABLE_MOBILITY`
- Independent simulations
- Separate results JSON files
- Quantified comparison analysis

### ✅ Simpy Integration
- Event-driven discrete simulation
- Proper time management
- Event logging
- Framework compliance

### ✅ Analysis Enhancements
- CSV comparison table
- Impact graphs (PNG)
- Statistical summary
- DRY code patterns

### ✅ Professional Setup
- Poetry environment
- Full documentation
- Quality code (KISS+DRY)
- Production-ready

---

## Execution Flow

```
main.py
├─→ PHASE 1: Dynamic simulations
│   ├─→ Initialize 100-200 nodes
│   ├─→ Run LEACH protocol
│   ├─→ Run LEACH-C protocol
│   └─→ Collect metrics
├─→ PHASE 2: Static simulations (same seeds)
│   ├─→ Initialize 100-200 nodes
│   ├─→ Run LEACH protocol
│   ├─→ Run LEACH-C protocol
│   └─→ Collect metrics
└─→ Generate comparison summary

analysis_static_dynamic.py
├─→ Load both JSON files
├─→ Compute impact % for each metric
├─→ Generate CSV table
├─→ Plot 3 comparison graphs
└─→ Print detailed summary
```

---

## Expected Output

### Console
```
============================================================
PHASE 1: SIMULATIONS DYNAMIQUES (avec mobilité)
============================================================
Scenario: Scenario_1_Small_Low
  Exécution LEACH...
    - FDN: 45
    - DLBI: 0.8794
  Exécution LEACH-C...
    - FDN: 259
    - DLBI: 0.3187
[... 5 more scenarios ...]

============================================================
PHASE 2: SIMULATIONS STATIQUES (sans mobilité)
============================================================
[... same 6 scenarios ...]

======================================================================
RÉSUMÉ DES RÉSULTATS - DYNAMIQUE vs STATIQUE
======================================================================
Scenario_1_Small_Low:
  LEACH:
    FDN: Dynamic=45, Static=45, Impact=0%
    DLBI: Dynamic=0.88, Static=0.88, Impact=0%
  LEACH-C:
    FDN: Dynamic=259, Static=259, Impact=0%
    DLBI: Dynamic=0.32, Static=0.32, Impact=0%
```

### Files Generated
```
✓ simulation_results_dynamic.json (95MB)
✓ simulation_results_static.json (95MB)
✓ comparison_static_dynamic.csv (50KB)
✓ comparison_first_dead_node_round.png (150KB)
✓ comparison_first_muted_round.png (150KB)
✓ comparison_dlbi.png (150KB)
```

---

## Troubleshooting

### Issue: "ModuleNotFoundError: simpy"
**Solution**: `pip install simpy --break-system-packages` or `poetry install`

### Issue: "FileNotFoundError: results/"
**Solution**: Run `python3 code/main.py` first to generate results

### Issue: Matplotlib not found
**Solution**: `pip install matplotlib --break-system-packages` or `poetry install`

---

## Verification Checklist

Before submission:
- [ ] Run `python3 code/main.py` successfully
- [ ] Check `results/simulation_results_dynamic.json` exists
- [ ] Check `results/simulation_results_static.json` exists
- [ ] Run `python3 code/analysis_static_dynamic.py` successfully
- [ ] Check CSV and PNG files generated
- [ ] Test `python3 code/simpy_simulator.py`
- [ ] Review `IMPROVEMENTS_SUMMARY.md`
- [ ] Read updated `rapport/Rapport_LEACH_LEACHC.typ`

---

## Questions?

See:
- `IMPROVEMENTS_SUMMARY.md` - Detailed explanation of all improvements
- `CHECKLIST_FINAL.md` - Complete evaluation checklist
- `README.md` - Full project documentation
- `rapport/Rapport_LEACH_LEACHC.typ` - Academic report

---

**Good luck! 🚀**
