Skip to main content

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 :

  • matplotlib ou folium pour la visualisation
  • pandas pour 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

resau_routier_intelligent-0.1.0.tar.gz (57.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

resau_routier_intelligent-0.1.0-py3-none-any.whl (75.4 kB view details)

Uploaded Python 3

File details

Details for the file resau_routier_intelligent-0.1.0.tar.gz.

File metadata

  • Download URL: resau_routier_intelligent-0.1.0.tar.gz
  • Upload date:
  • Size: 57.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.12.1 Windows/11

File hashes

Hashes for resau_routier_intelligent-0.1.0.tar.gz
Algorithm Hash digest
SHA256 bcf05575c45865dd412c49c075c725e02bf2d1c5c4af6d27312749495e2b0ead
MD5 d0923cbed766be196b9b76033b46f135
BLAKE2b-256 e74c9c5ce555e6709766a2a3ee8149a14e92e1ab89b7b01e461bdd39ce38a7bc

See more details on using hashes here.

File details

Details for the file resau_routier_intelligent-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for resau_routier_intelligent-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f42c4941083f98420b380f89460c33b85223f6d66de2ee3df3d33f7f8a73176a
MD5 5f09a8badca695298356e9bf6888f4b5
BLAKE2b-256 6ddb4c70487217e6cb15e14e53f64049a072cc1c250ba5d4a01b682822afe4e6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page