1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
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)
|