diff options
Diffstat (limited to 'ero1/demo.py')
| -rw-r--r-- | ero1/demo.py | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/ero1/demo.py b/ero1/demo.py new file mode 100644 index 0000000..d8042be --- /dev/null +++ b/ero1/demo.py @@ -0,0 +1,111 @@ +# 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)
\ No newline at end of file |
