# IMPORT FOR DEMO from src.demo.ask_variable import ask_variable from src.demo.print_demo import print_demo from src.demo.demo_exec import demo_exec # LIB IMPORT import os, time def display_status(drone=None, déneigeuse=None, arrondissement=None, debug=None): ''' Affiche le statut de la démonstration. Parameters: arrondissement : L'arrondissement choisi. drone : Le drone choisi. déneigeuse : La déneigeuse choisie. debug : Le mode debug choisi. ''' os.system('cls' if os.name == 'nt' else 'clear') print("") if arrondissement: print_demo("Arrondissement choisi : " + arrondissement, 1) if drone: print_demo("Drone choisi : " + drone, 1) if déneigeuse: print_demo("Déneigeuse choisi : " + déneigeuse, 1) if debug is not None: print_demo("Debug : " + ("Oui" if debug else "Non"), 1) print("") if __name__ == "__main__": ''' Départ de la démonstration. ''' try: os.system('cls' if os.name == 'nt' else 'clear') # ---------------------- CHOIX DU PARCOURS DE DRONE --------------------------- Q_drone = "Quel parcours de drone voulez-vous faire ?" A_drone = [ ("Postier Chinois V1 : Cette version est la version naïve avec NetworkX qui est plus longue mais distances plus optimisées. (Environ 30min)", "postier_chinoisV1"), ("Postier Chinois V2 : Cette version le plus rapide mais les distances sont moins optimisées. (Environ 3min)", "postier_chinoisV2"), ("Postier Chinois V3 : Cette version est une version intermédiaire entre la V1 et la V2 avec une distance optimisée et un calcul rapide. (Environ 4min)", "postier_chinoisV3"), ("Drones Sauvegardés : Charger un fichier sauvegarde des chemins générés par les algorithmes ci-dessus en YML.", "fichier") ] drone = ask_variable(Q_drone, A_drone) if drone == "fichier": Q_drone = "Quel fichier souhaitez-vous charger ?" A_drone = [] num=0 display_status(drone) for racine, repertoires, fichiers in os.walk("paths"): for fichier in fichiers: if fichier.endswith(".yml"): num+=1 (mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime) = os.stat(f"paths/{fichier}") A_drone.append((f"{fichier} - {time.ctime(mtime)}",f"paths/{fichier}")) drone = ask_variable(Q_drone, A_drone) display_status(drone) # ---------------------- CHOIX DU PARCOURS DE DÉNEIGEUSE --------------------------- Q_déneigeuse = "Quel parcours de déneigeuse voulez-vous faire ?" A_déneigeuse = [ ("Hierholzer V1 : Cette première version est rapide à l'exécution mais reste bloquée dans les impasses/cycles.", "hierholzer_v1"), ("Hierholzer V2 : Cette deuxième version est rapide à l'exécution mais les distances ne sont pas optimisées.", "hierholzer_v2"), ("Postier Chinois orienté : Cet algorithme est un glouton qui cherche à équilibrer le graphe pour en extraire un circuit eulérien. (Uniquement sur 1 arrondissement)", "oriented_cpt"), ("Implémentation naïve : Une implémentation simple mais qui fournit un parcours très peu optimal, basée sur le parcours du drone. (Uniquement sur 1 arrondissement | Uniquement sur 1 déneigeuse)", "naive"), ] déneigeuse = ask_variable(Q_déneigeuse, A_déneigeuse) display_status(drone, déneigeuse) # ---------------------- CHOIX DE L'ARRONDISSEMENT --------------------------- Q_arrondissement = "Sur quel arrondissement voulez-vous faire le parcours ?" A_arrondissement = [ ("Outremont", "Outremont"), ("Verdun", "Verdun"), ("Anjou", "Anjou"), ("Rivière-des-Prairies–Pointe-aux-Trembles","Rivière-des-Prairies–Pointe-aux-Trembles"), ("Le Plateau-Mont-Royal", "Le Plateau-Mont-Royal") ] if déneigeuse == "naive" or déneigeuse == "oriented_cpt": print_demo("/!\\ L'algorithme de déneigeuse choisi ne dispose pas de la possibilité d'effectuer les 5 arrondissements en une seule fois.") else: A_arrondissement.append(("Tous les secteurs ci-dessus", "all")) arrondissement = ask_variable(Q_arrondissement, A_arrondissement) arrondissements = ["Outremont", "Verdun", "Anjou", "Rivière-des-Prairies–Pointe-aux-Trembles", "Le Plateau-Mont-Royal"] if arrondissement == "all" else [arrondissement] display_status(drone, déneigeuse, arrondissement) # ---------------------- CHOIX DU MODE DEBUG --------------------------- Q_debug = "Voulez-vous activer le mode debug ?" A_debug = [("Oui", True), ("Non", False)] debug = ask_variable(Q_debug, A_debug) display_status(drone, déneigeuse, arrondissement, debug) # ---------------------- EXECUTION DE LA DEMONSTRATION --------------------------- demo_exec(arrondissements, drone, déneigeuse, debug) except KeyboardInterrupt: # Si l'utilisateur appuie sur Ctrl+C ou arrête le programme. print_demo("Arrêt du programme", 1)