Example #1
0
 def __init__(self, temps, delta):
     """
     Initialisation de la classe Simulation
     :param temps: durée de la simulation en secondes
     :param delta: pas de temps de la simulation
     """
     self.temps = temps
     self.delta = delta
     self.route = Route(self.delta)
     self.analyse = False  # Permet de ne pas afficher les graphiques et de sauvegarder automatiquement
     self.sauvegarde = True  # Permet de ne pas effectuer de sauvegarde de la simulation
     self.animation = False  # Permet de créer un fichier vidéo de la simulation dans le dossier 'Animation/'
Example #2
0
class Simulation(object):

    """
    Présentation de la classe Simulation:
    Cette classe permet la gestion globale de la simulation: initialisation, mise à jour de la route et du temps
    """

    def __init__(self, temps, delta):
        """
        Initialisation de la classe Simulation
        :param temps: durée de la simulation en secondes
        :param delta: pas de temps de la simulation
        """
        self.temps = temps
        self.delta = delta
        self.route = Route(self.delta)
        self.analyse = False  # Permet de ne pas afficher les graphiques et de sauvegarder automatiquement
        self.sauvegarde = True  # Permet de ne pas effectuer de sauvegarde de la simulation
        self.animation = False  # Permet de créer un fichier vidéo de la simulation dans le dossier 'Animation/'

    def initialisation(self, fonction, affichage=True):
        """
        Lance l'initialisation de la route
        :param fonction: fonction python qui donne la densité du trafic en fonction de la position x
        :param affichage: booléen qui permet d'afficher et de confirmer la génération du trafic
        """
        return self.route.preparation(fonction, affichage)

    def parametres(self, flux, densite):
        """
        Permet de désactiver l'enregistrement du flux ou/et de la densité dans la simulation
        :param flux: booléen
        :param densite: booléen
        """
        if not flux:
            self.route.desactiver_flux()
        if not densite:
            self.route.desactiver_densite()

    def lancer(self):
        """
        Début de la simulation
        """
        t_debut = clock()
        if len(self.route.sections) == 0:  # Vérifie s'il y a au minimum une section dans la route
            print("Il faut au moins une section !")
            return None

        temps_total = 0
        p = 0  # Avancement de la simulation entre 0 et 1
        i = 0  # Sert à incrémenter la variable 'p'
        indice = 0  # Nombre de tours dans la boucle effectués

        while temps_total <= self.temps:  # Boucle principale du programme
            self.route.update(self.delta, temps_total, indice)
            indice += 1
            temps_total += self.delta  # Mise à jour du temps
            i += self.delta / self.temps
            if i >= 0.1:  # On affiche l'avancement 'p'
                p += 0.1
                i -= 0.1
                print("Avancement de la simulation : " + str(round(p*100)) + "% (" + str(round(temps_total)) + "s de " + str(self.temps) + "s).")
        print("Fin de la simulation")
        print("Simulation réalisée en ", round(clock() - t_debut, 2), "secondes")

        if not self.analyse:
            """ Début des analyses """
            rep = input("Analyse de la simulation ? (o/n)")
            while rep == "o":
                self.route.analyse_voitures()
                self.route.analyse_trafic()
                rep = input("Analyse de la simulation ? (o/n)")
            """ Fin des analyses """

            """ Sauvegarde de l'animation """
            if self.animation:
                print("Génération de l'animation...")
                self.route.animation()

            """ Sauvegarde des données """
            if self.sauvegarde:
                rep = input("Sauvegarde ? (o/n)")
                if rep == "o":
                    self.route.sauvegarde()
        else:
            self.route.sauvegarde()

        print("Arrêt de la simulation")