summaryrefslogtreecommitdiff
path: root/ero1/demo.py
diff options
context:
space:
mode:
Diffstat (limited to 'ero1/demo.py')
-rw-r--r--ero1/demo.py111
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