Newer
Older
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
112
113
114
115
116
117
118
119
120
121
#!/usr/bin/python3.5
# This Python file uses the following encoding: utf-8
#Télécharger matplotlib et numpy
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import sys
import string
import re
if (len(sys.argv)!=2) :
print("Mettez en paramètre le fichier de statistique")
quit()
integrity = re.compile("stat_agent_(\w*)_\d+_\d+\.txt")
check = integrity.search(sys.argv[1])
if check == None :
print("Mauvais paramètre "+sys.argv[1])
quit()
rom = check.group(1)
#./neo_src/stat_agent_5_10.txt par exemple
fichier_stats = open(sys.argv[1])
lines = fichier_stats.readlines()
#Booléen de contrôle
good_file = False
good_options = False
#Les différentes regexp utilisées
emplacement = re.compile("Emplacement executable : (\w*), Rom : (\w*)")
options = re.compile("Mutation : ([0-9.]+), Croisement : ([0-9.]+), Taille du pool : ([0-9.]+), Population : ([0-9.]+)")
performance = re.compile("([0-9.]+);([0-9.]+)")
exception = re.compile(".*;([0-9.]+)")
#paramètres de l'agent
path = ''
mut = ''
cross = ''
pool = ''
pop = ''
rom = ''
#Tableau pour le plot
generations = []
scores = []
#Pour gérer les exceptions
follower = -1
for line in lines :
#print(line)
line.lstrip()
line.rstrip('\n')
#Vérifie la première ligne
if (good_file == False) :
first_line = emplacement.search(line)
if first_line != None :
path = first_line.group(1)
print(path)
rom = first_line.group(2)
print(rom)
good_file = True
continue
if first_line == None :
break
#Vérifie la deuxième ligne ssi la première ligne est vérifiée
if(good_file and not(good_options)) :
second_line = options.search(line)
if second_line != None :
mut = second_line.group(1)
cross = second_line.group(2)
pool = second_line.group(3)
pop = second_line.group(4)
good_options = True
continue
if second_line == None :
break
#Stocke les performances d'un agent dans les tableaux generations et scores
if(good_file and good_options):
#print(line)
generation = performance.search(line)
if generation != None :
print("good format")
scores.append(generation.group(1))
generations.append(generation.group(2))
if generation == None :
#Si jamais la ligne n'a pas une bonne tête
print("exception")
#Capte une ligne du type "-nan;15"
bad_generation = exception.search(line)
if bad_generation != None :
generations.append(bad_generation.group(1))
#Si jamais on a une erreur à la première génération
if follower > 0 :
i = scores[follower]
scores.append(i)
else :
scores.append(0)
if bad_generation == None :
print("not handled")
#on saute la ligne et on continue la lecture du fichier
continue
follower+=1
if(good_file and good_options) :
#Création des figures
fig, ax = plt.subplots()
#Création des points
ax.plot(generations,scores,".")
#Création de la légende
ax.set(xlabel="generation",ylabel="score",title=path+" on "+rom+" with M="+mut+", C="+cross+", P="+pool+", and Pop="+pop)
#Création de la grille et scaling des axes
ax.grid(True)
ax.axis('equal')
#Montre la fenêtre
plt.show()
#Sauvegarde la figure dans le dossier courant
fig.savefig(fichier_stats.name+"_fig.png",format="png")
else :
print("Problème lors de la lecture du fichier de statistiques")
fichier_stats.close()