Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
# Nouvelles Fonctionnalités - Visualisations Avancées
## 📊 Vue d'ensemble
Deux nouvelles visualisations scientifiques ont été ajoutées pour enrichir l'analyse et la validation du modèle de simulation:
1. **Séries temporelles** - Évolution du nombre de clients dans le système
2. **Histogramme** - Distribution des temps de traitement
Ces visualisations permettent de:
- ✅ Valider la convergence vers l'état d'équilibre
- ✅ Vérifier la distribution exponentielle des temps de service
- ✅ Identifier visuellement les instabilités du système
- ✅ Produire des graphiques scientifiques pour le rapport
---
## 1. Graphique de Séries Temporelles
### Description
Affiche l'évolution du nombre total de clients dans le système au fil du temps.
### Utilité scientifique
- **Convergence**: Montre visuellement si le système converge vers un état stable
- **État d'équilibre**: La stabilisation de la courbe indique l'atteinte de l'équilibre statistique
- **Détection d'instabilité**: Une courbe croissante indique un système instable (ρ ≥ 1)
- **Période de warmup**: Permet de vérifier que la période de préchauffage est suffisante
### Caractéristiques techniques
- **Échantillonnage**: Toutes les 1000 unités de temps
- **Période**: Après warmup uniquement (données en régime permanent)
- **Données**: Nombre de clients dans coordinateur + tous les serveurs
- **Graphique**: Chart.js Line chart avec remplissage
### Interprétation
```
Courbe stable → Système en équilibre ✓
Courbe croissante → Système instable (λ > μ) ✗
Oscillations → Possible sous-estimation du warmup
```
---
## 2. Histogramme des Temps de Traitement
### Description
Affiche la distribution des temps de traitement total pour toutes les requêtes complétées.
### Utilité scientifique
- **Validation théorique**: Les systèmes M/M/1 suivent une distribution exponentielle
- **Vérification du modèle**: L'histogramme doit montrer une décroissance exponentielle
- **Statistiques**: Fournit min, max, moyenne et écart-type des temps de traitement
- **Comparaison**: Permet de vérifier que la moyenne simulée ≈ 1/μ théorique
### Caractéristiques techniques
- **Bins**: 20 intervalles automatiques
- **Données**: Temps total dans le système (wait + service) pour chaque requête
- **Statistiques**:
- Minimum
- Maximum
- Moyenne (devrait ≈ W analytique)
- Écart-type
- **Graphique**: Chart.js Bar chart
### Interprétation
```
Décroissance exponentielle → Modèle M/M/1 validé ✓
Distribution uniforme → Problème dans le modèle ✗
Moyenne ≈ W_analytique → Cohérence sim/analytique ✓
```
---
## 🔧 Implémentation Technique
### Backend (Python)
#### Collecte des données (simulation.py)
```python
# Séries temporelles - échantillonnage périodique
time_series_interval = 1000.0 # Toutes les 1000 unités
def collect_time_series_sample():
- Compte clients dans chaque file
- Enregistre timestamp
- Stocke dans listes pour export
# Histogramme - construction automatique
def _create_histogram(data):
- 20 bins calculés automatiquement
- Statistiques (min, max, mean, std_dev)
- Fréquences par bin
```
#### Nouveaux champs dans SimulationResults
```python
time_series_data: Optional[dict] = {
"timestamps": List[float],
"customers_in_system": List[int],
"customers_per_queue": Dict[str, List[int]]
}
histogram_data: Optional[dict] = {
"bins": List[float], # 21 valeurs (bin edges)
"frequencies": List[int], # 20 valeurs
"min_value": float,
"max_value": float,
"mean": float,
"std_dev": float
}
```
### Frontend (React + TypeScript)
#### Nouveaux composants
**TimeSeriesChart.tsx**
- Material-UI Paper avec Chart.js Line
- Responsive (400px height)
- Tooltip avec formatage des unités
- Description pédagogique
**ProcessingTimeHistogram.tsx**
- Material-UI Paper avec Chart.js Bar
- Affichage des statistiques en Stack horizontal
- Bins formatés en intervalles (ex: "0-100")
- Explication de la distribution exponentielle
#### Intégration
```typescript
// Dans ResultsDisplay.tsx - Onglet Visualisations
{simulationResults?.time_series && (
<TimeSeriesChart timeSeriesData={simulationResults.time_series} />
)}
{simulationResults?.processing_time_histogram && (
<ProcessingTimeHistogram histogramData={simulationResults.processing_time_histogram} />
)}
```
---
## 📸 Utilisation dans le Rapport
### Captures d'écran recommandées
1. **Système stable (Scenario 2)**
- Série temporelle: Courbe qui se stabilise
- Histogramme: Décroissance exponentielle claire
2. **Système instable (Scenario 1)**
- Série temporelle: Courbe croissante continue
- Permet de démontrer visuellement l'instabilité
3. **Comparaison 3 vs 4 serveurs**
- Séries temporelles côte à côte
- Montre l'impact du nombre de serveurs
### Analyse à inclure
**Section "Convergence vers l'équilibre"**
```
Le graphique de séries temporelles (Figure X) montre que le système
atteint son état d'équilibre après environ Y unités de temps de
simulation. La stabilisation de la courbe valide le choix de notre
période de warmup de 10,000 unités.
```
**Section "Validation du modèle M/M/1"**
```
L'histogramme des temps de traitement (Figure Y) montre une
décroissance exponentielle caractéristique des systèmes M/M/1.
La moyenne observée (Z unités) est cohérente avec la prédiction
analytique de W = L/λ.
```
---
## 📊 Exemples de Résultats
### Scénario Stable
```
Série temporelle:
- Départ: fluctuations importantes
- Après warmup: stabilisation autour de L ≈ 10 clients
- Validation: ✓ Système stable
Histogramme:
- Forme: Décroissance exponentielle
- Moyenne: 125.5 unités (≈ W_analytique = 124.3)
- Écart-type: 98.2 unités
- Validation: ✓ Distribution conforme au modèle M/M/1
```
### Scénario Instable
```
Série temporelle:
- Croissance linéaire continue
- Pas de stabilisation
- Validation: ✗ Système instable (ρ > 1)
Histogramme:
- Forme: Étalement vers les valeurs élevées
- Moyenne: Augmente avec le temps
- Validation: ✗ Instabilité confirmée
```
---
## 🎯 Avantages pour le TP
### 1. Validation Scientifique Renforcée
- ✅ Preuve visuelle de la convergence
- ✅ Vérification de la distribution théorique
- ✅ Détection précoce des erreurs de modélisation
### 2. Qualité du Rapport
- ✅ Graphiques professionnels prêts pour insertion
- ✅ Données statistiques complètes
- ✅ Démonstration de rigueur scientifique
### 3. Compréhension du Système
- ✅ Visualisation intuitive du comportement dynamique
- ✅ Identification visuelle des problèmes
- ✅ Support pédagogique pour l'explication
---
## 📚 Références Théoriques
### Distribution Exponentielle
Pour un système M/M/1 avec taux d'arrivée λ et taux de service μ:
```
f(t) = (μ - λ) * e^(-(μ-λ)t) pour t ≥ 0
Moyenne: E[T] = 1/(μ - λ) = W
Écart-type: σ = 1/(μ - λ) = W
```
### Convergence vers l'État Stable
```
L(t) → L_steady_state = ρ/(1-ρ) quand t → ∞
Condition: ρ < 1 (système stable)
```
---
## 🔍 Tests et Validation
### Tests Backend
```bash
pytest tests/test_simulation.py -v
# ✓ 21/21 tests passent
# Dont: génération histogramme, collecte séries temporelles
```
### Build Frontend
```bash
npm run build
# ✓ Build successful
# Bundle: 720.12 kB (gzip 231.51 kB)
```
---
## 🚀 Prochaines Améliorations Possibles
1. **Séries temporelles par file**
- Graphiques séparés pour coordinator et chaque serveur
- Permet d'identifier les goulots d'étranglement
2. **Histogramme par file**
- Distribution des temps d'attente vs temps de service
- Validation fine du modèle
3. **Export haute résolution**
- PDF vectoriel pour impression
- SVG pour inclusion dans LaTeX
4. **Animation temps réel**
- Visualisation live pendant la simulation
- Utile pour démonstrations
---
**Date**: 2025-12-31
**Version**: 1.0
**Auteur**: Projet MED - Modélisation Incertitude et Simulation