Skip to content
Snippets Groups Projects
plot_agents.py 3.73 KiB
Newer Older
#!/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()