Un package Python pour la modélisation et la gestion d'un réseau routier intelligent.
Project description
🚳️ Réseau Routier Intelligent
Réseau Routier Intelligent est un simulateur Python orienté objet permettant de modéliser et de simuler un réseau routier intelligent. Ce projet vise à offrir une architecture modulaire, extensible et testable, adaptée à la recherche ou à l’expérimentation dans le domaine de la mobilité intelligente.
🎯 Objectifs
- Concevoir une application orientée objet complète.
- Simuler un réseau routier avec plusieurs routes, intersections et véhicules.
- Mettre en œuvre des techniques avancées de programmation objet.
- Créer une architecture modulaire et testable.
- Visualiser les résultats sous forme graphique ou cartographique.
🧠 Contexte
Une start-up spécialisée dans la mobilité intelligente souhaite développer un simulateur modulaire du trafic routier, capable de :
- 🚳️ Modéliser un réseau routier (routes, intersections).
- 🚗 Simuler la circulation de véhicules avec des comportements variés.
- 📊 Fournir des statistiques sur les embouteillages, vitesses moyennes et temps de parcours.
- 🞺 Générer des rapports sous forme de logs, fichiers CSV ou visualisations cartographiques.
🌇️ Architecture
Le projet suit une approche orientée objet et une structure modulaire :
resau_routier_intelligent/
├── data/ #Fichier de configuration au format Json
├── core/ # Classes principales : Route, Intersection, Véhicule
├── simulation/ # Gestion du cycle de simulation et du moteur d’événements
├── models/ # Les modèles utilisés (route,vehicule,reseau)
|── ios/ # Génération et affichage des visualisations et des statistiques
|── exceptions/ # Exceptions personnalisées
└── tests/ # Tests unitaire
⚙️ Installation
Depuis PyPI (après publication) :
pip install resau_routier_intelligent
Ou depuis le dépôt GitHub :
git clone https://github.com/BenLazregAhmed/resau_routier_intelligent.git
cd resau_routier_intelligent
poetry install
🚀 Exemple d’utilisation
"""
Point d'entrée principal du simulateur de trafic routier intelligent
Auteur: Simulateur IA
Date: 2025
"""
import cProfile
import pstats
import io
import os
import sys
import argparse
from pathlib import Path
# Ajout du répertoire racine au path pour les imports
sys.path.append(str(Path(__file__).parent))
from core.simulateur import Simulateur
from core.analyseur import Analyseur
from ios.affichage import AffichageConsole
from ios.export import ExportDonnees
def main():
"""Fonction principale du simulateur."""
# Configuration des arguments en ligne de commande
parser = argparse.ArgumentParser(description='Simulateur de Trafic Routier Intelligent')
parser.add_argument('--config', '-c',
default='../data/config_reseau.json',
help='Fichier de configuration du réseau (défaut: ../data/config_reseau.json)')
parser.add_argument('--tours', '-t',
type=int, default=60,
help='Nombre de tours de simulation (défaut: 60)')
parser.add_argument('--delta', '-d',
type=float, default=1.0,
help='Pas de temps en minutes (défaut: 1.0)')
parser.add_argument('--export-csv',
action='store_true',
help='Exporter les résultats en CSV')
parser.add_argument('--export-json',
action='store_true',
help='Exporter les résultats en JSON')
parser.add_argument('--graphiques', '-g',
action='store_true',
help='Générer des graphiques de visualisation')
parser.add_argument('--silencieux', '-s',
action='store_true',
help='Mode silencieux (pas d\'affichage détaillé)')
parser.add_argument('--demo',
action='store_true',
help='Lancer une démonstration rapide')
args = parser.parse_args()
# Mode démonstration
if args.demo:
lancer_demonstration()
return
try:
print("🚗 SIMULATEUR DE TRAFIC ROUTIER INTELLIGENT")
print("=" * 50)
print(f"Configuration: {args.config}")
print(f"Simulation: {args.tours} tours × {args.delta}min")
print()
# Initialisation du simulateur
if not args.silencieux:
print("🔧 Initialisation du simulateur...")
simulateur = Simulateur(fichier_config=args.config)
if not args.silencieux:
afficher_configuration_reseau(simulateur)
# Lancement de la simulation
simulateur.lancer_simulation(n_tours=args.tours, delta_t=args.delta)
# Analyse des résultats
if not args.silencieux:
print("\n🔍 Analyse des résultats...")
analyseur = Analyseur(simulateur)
# Affichage du rapport détaillé
if not args.silencieux:
AffichageConsole.afficher_rapport_detaille(analyseur)
# Exports demandés
exporteur = ExportDonnees(simulateur)
if args.export_csv:
nom_csv = f"resultats_{args.tours}tours_{args.delta}min.csv"
exporteur.exporter_csv(nom_csv)
if args.export_json:
nom_json = f"resultats_{args.tours}tours_{args.delta}min.json"
exporteur.exporter_json(nom_json)
if args.graphiques:
print("📊 Génération des graphiques...")
exporteur.generer_graphiques()
print("\n✅ Simulation terminée avec succès!")
except KeyboardInterrupt:
print("\n⚠️ Simulation interrompue par l'utilisateur")
sys.exit(1)
except FileNotFoundError as e:
print(f"❌ Erreur: Fichier non trouvé - {e}")
print("💡 Astuce: Utilisez --demo pour une démonstration avec configuration par défaut")
sys.exit(1)
except Exception as e:
print(f"❌ Erreur inattendue: {e}")
sys.exit(1)
def afficher_configuration_reseau(simulateur):
"""Affiche la configuration du réseau chargée."""
reseau = simulateur.reseau
config = simulateur.configuration
print("🗺️ CONFIGURATION DU RÉSEAU:")
print(f" Routes: {len(reseau.routes)}")
print(f" Intersections: {len(reseau.intersections)}")
print(f" Véhicules initiaux: {len(reseau.vehicules)}")
print("\n🛣️ ROUTES CONFIGURÉES:")
for nom_route, route in reseau.routes.items():
connexions = len(route.routes_connectees)
print(f" {nom_route:20s} | {route.longueur:4.1f}km | "
f"{route.limite_vitesse:3.0f}km/h | {connexions} connexion(s)")
if reseau.intersections:
print(f"\n🚦 INTERSECTIONS:")
for nom_intersection, routes_connectees in reseau.intersections.items():
routes_str = ", ".join(routes_connectees)
print(f" {nom_intersection:15s} -> {routes_str}")
print()
def lancer_demonstration():
"""Lance une démonstration rapide du simulateur."""
print("🎯 MODE DÉMONSTRATION")
print("=" * 40)
# Configuration simplifiée pour la démo
print("Création d'un réseau de démonstration...")
simulateur = Simulateur() # Configuration par défaut
print("Configuration automatique terminée!")
afficher_configuration_reseau(simulateur)
# Simulation courte
print("🚀 Lancement d'une simulation de 30 tours...")
simulateur.lancer_simulation(n_tours=60, delta_t=1.0)
# Analyse rapide
analyseur = Analyseur(simulateur)
AffichageConsole.afficher_rapport_detaille(analyseur)
# Export JSON automatique
exporteur = ExportDonnees(simulateur)
exporteur.exporter_json("demo_resultats.json")
print("\n🎉 Démonstration terminée!")
print("💡 Pour une simulation personnalisée, utilisez: python main.py --config votre_config.json")
def verifier_dependances():
"""Vérifie que toutes les dépendances sont installées."""
dependances_manquantes = []
try:
import matplotlib
except ImportError:
dependances_manquantes.append("matplotlib")
try:
import pandas
except ImportError:
dependances_manquantes.append("pandas")
try:
import numpy
except ImportError:
dependances_manquantes.append("numpy")
if dependances_manquantes:
print("❌ Dépendances manquantes:")
for dep in dependances_manquantes:
print(f" - {dep}")
print("\n💡 Installez avec: pip install " + " ".join(dependances_manquantes))
return False
return True
if __name__ == "__main__":
if not verifier_dependances():
print("\n⚠️ Certaines fonctionnalités peuvent être limitées.")
input("Appuyez sur Entrée pour continuer quand même...")
print("\n📈 Démarrage du profilage de la simulation...\n")
profiler = cProfile.Profile()
profiler.enable()
main()
profiler.disable()
print("\n📊 Profilage terminé. Analyse des résultats...\n")
s = io.StringIO()
ps = pstats.Stats(profiler, stream=s).sort_stats("cumtime")
ps.print_stats(30) # affiche les 30 fonctions les plus coûteuses
print(s.getvalue())
python main.py --config <path to your config file or leave empty to use the default one> --tours 60 --export-csv --export-json
📊 Fonctionnalités prévues
| Fonctionnalité | Statut |
|---|---|
| Modélisation des routes et intersections | ✅ |
| Simulation de circulation de véhicules | ✅ |
| Calcul de statistiques (vitesses, congestion) | ✅ |
| Génération de rapports (console / CSV) | ✅ |
| Visualisation graphique du réseau | 🔄 En développement |
Exemple d'exécution
📈 Démarrage du profilage de la simulation...
🚗 SIMULATEUR DE TRAFIC ROUTIER INTELLIGENT
Configuration: C:\Users\21656\Desktop\ING3\python\tp\tp1\resau_routier_intelligent\data\config_reseau.json Simulation: 60 tours × 1.0min
🔧 Initialisation du simulateur... 🗺️ CONFIGURATION DU RÉSEAU: Routes: 2 Intersections: 0 Véhicules initiaux: 0
🛣️ ROUTES CONFIGURÉES: A1 | 5000.0km | 90km/h | 0 connexion(s) B1 | 3000.0km | 50km/h | 0 connexion(s)
🚗 Démarrage de la simulation (60 tours, Δt=1.0min)
Tour 0/60 ( 0.0%) | Véhicules: 1 | Temps: 1.0min Tour 10/60 ( 16.7%) | Véhicules: 5 | Temps: 11.0min Tour 20/60 ( 33.3%) | Véhicules: 8 | Temps: 21.0min Tour 30/60 ( 50.0%) | Véhicules: 12 | Temps: 31.0min Tour 40/60 ( 66.7%) | Véhicules: 16 | Temps: 41.0min Tour 50/60 ( 83.3%) | Véhicules: 18 | Temps: 51.0min
✅ Simulation terminée!
📊 RÉSUMÉ DE LA SIMULATION
Durée totale: 60.0 minutes Nombre de véhicules: 19 Nombre de routes: 2
🛣️ ÉTAT DES ROUTES: A1 | 12 véh. | Vitesse: 78.8 km/h | 🟢 Fluide B1 | 7 véh. | Vitesse: 50.0 km/h | 🟢 Fluide
🔍 Analyse des résultats...
================================================================================
📈 RAPPORT DÉTAILLÉ DE SIMULATION
================================================================================
🌐 PERFORMANCES GLOBALES: Vitesse moyenne du réseau: 55.4 km/h Densité moyenne du trafic: 0.0 véh/km Pic de véhicules simultanés: 19
🟢 TRAFIC FLUIDE: Aucune zone de congestion détectée
⏱️ TEMPS DE PARCOURS: A1 | Théorique: 3333.3min | Réel: 3807.2min | 🔴 +473.8min B1 | Théorique: 3600.0min | Réel: 3600.0min | 🟢 +0.0min
✅ Simulation terminée avec succès!
📊 Profilage terminé. Analyse des résultats...
🧩 Dépendances
Aucune dépendance externe obligatoire. Optionnellement, certaines extensions pourront utiliser :
matplotliboufoliumpour la visualisationpandaspour l’analyse de données
🧪 Tests
Pour exécuter les tests unitaires :
poetry run pytest
📄 Licence
Distribué sous la licence MIT. Voir le fichier LICENSE pour plus d’informations.
👤 Auteur
Ahmed BenLazreg 📧 benlazregahmed328@gmail.com 🔗 GitHub – BenLazregAhmed 🔗 LinkedIn – Ahmed BenLazreg
🌟 Contributions
Les contributions sont les bienvenues ! N’hésitez pas à ouvrir une issue ou à proposer une pull request pour améliorer le simulateur.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file resau_routier_intelligent-0.2.0.tar.gz.
File metadata
- Download URL: resau_routier_intelligent-0.2.0.tar.gz
- Upload date:
- Size: 20.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.1 CPython/3.11.9 Windows/10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e5c949b2331720bb3d6c0423bb11a20a851e6f7cb042ccd16994bef463a5f4b4
|
|
| MD5 |
df759439e63b403fd4f30076ab9927e1
|
|
| BLAKE2b-256 |
9501c5cac3308cb80cd31a7e9da159bd06bb0da99ad05cb6df416e64ad288b27
|
File details
Details for the file resau_routier_intelligent-0.2.0-py3-none-any.whl.
File metadata
- Download URL: resau_routier_intelligent-0.2.0-py3-none-any.whl
- Upload date:
- Size: 23.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.1 CPython/3.11.9 Windows/10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f4ed8478d60dc8f571c495e95eec026bfeb32f4be40c41a46f236bf22923d44e
|
|
| MD5 |
98a2261a52a5d025700b659ced990273
|
|
| BLAKE2b-256 |
b6128a433feb7a4608e7224db8b50244b7ec5eac9ef11ff2c2abae0f09f4e9a8
|