diff --git a/trace_graphe.py b/trace_graphe.py
new file mode 100644
index 0000000000000000000000000000000000000000..abc683faf092e9531a69a27b2b256bc017d0e713
--- /dev/null
+++ b/trace_graphe.py
@@ -0,0 +1,316 @@
+import csv
+import numpy
+import matplotlib.pyplot as plt
+from copy import deepcopy
+
+def extract_data1(filename):
+    f = open(filename, newline = '')
+    liste_selections = ["selection_p_best", "selection_duel_pondere", "selection_duel", "selection_par_rang", "selection_proportionnelle"]
+    listedeliste = [[] for i in range(len(liste_selections))]
+    ligne = f.readline()
+    while ligne != "" :
+        row = ligne.split(",")
+        if row[1] in liste_selections:
+            listedeliste[liste_selections.index(row[1])].append(row[3])
+        ligne = f.readline()
+        numpy.save("choix_selection", listedeliste)
+    
+
+
+def trace_histogramme_selections(listedeliste):
+    listedeliste = [[float(element) for element in numpy.load(listedeliste)[i]] for i in range(5)]
+    liste_selections = ["selection_p_best", "selection_duel_pondere", "selection_duel", "selection_par_rang", "selection_proportionnelle"]
+    plt.figure()
+    for i in range(len(liste_selections)) :
+        moy = moyenne(listedeliste[i])
+        mediane = sorted(listedeliste[i])[len(listedeliste[i])//2]
+        plt.subplot(2,3,i+1)
+        n, bins, patches = plt.hist(listedeliste[i], bins = 40)
+        plt.plot([moy,moy], [0,max(n)], label = "Moyenne")
+        plt.plot([mediane,mediane], [0,max(n)], label = "Médiane")
+        plt.legend()
+        plt.title(liste_selections[i])
+    plt.show()
+
+
+def moyenne(liste):
+    somme = 0
+    for element in liste :
+        somme += element
+    return somme / len(liste)
+
+# extract_data1("Resultatgroupé_final.csv")      
+# trace_histogramme_selections("choix_selection.npy")
+
+
+# >>> On choisit la séléction duel et selections ponderés car elles ont la meilleure moyenne/médiane
+
+def extract_data2(filename):
+    f = open(filename, newline = '')
+    liste_selections = ["selection_duel_pondere", "selection_duel"]
+    dictscore = [{} for i in range(len(liste_selections))]
+    listesurvivants = [[] for i in range(len(liste_selections))]
+    listescore = [[] for i in range(len(liste_selections))]
+    ligne = f.readline()
+    while ligne != "" :
+        row = ligne.split(",")
+        if row[1] in liste_selections:
+            rapport_survivants = float(row[7])/float(row[4])
+            listesurvivants[liste_selections.index(row[1])].append(rapport_survivants)
+            listescore[liste_selections.index(row[1])].append(float(row[3]))
+            if rapport_survivants not in dictscore[liste_selections.index(row[1])] :
+                dictscore[liste_selections.index(row[1])][rapport_survivants] = []
+            dictscore[liste_selections.index(row[1])][rapport_survivants].append(float(row[3]))
+        ligne = f.readline()
+    moyenne_score = [[], []]
+    liste_survivants = [[], []]
+    for i in range(2):
+        liste_survivants[i] = sorted(list(dictscore[i].keys()))
+        for rapport in deepcopy(liste_survivants[i]) :
+            if len(dictscore[i][rapport]) > 1 :    #Cette condition permet de supprimer les jeu de données que nous n'avons pas eu le temps de répéter
+                                                    #On estime alors que le résultat n'est pas représentatif en moyenne et on ne le prend pas en compte
+                moyenne_score[i].append(moyenne(dictscore[i][rapport]))
+            elif len(dictscore[i][rapport]) == 1 :
+                liste_survivants[i].remove(rapport)
+    numpy.save("choix_survivants", [moyenne_score, liste_survivants, listesurvivants, listescore])
+
+def choix_survivant(listedeliste):
+    [moyenne_score, liste_survivants, listesurvivants, listescore] = numpy.load(listedeliste, allow_pickle = True)
+    liste_selections = ["selection_duel_pondere", "selection_duel"]
+    plt.figure()
+    for i in range(len(liste_selections)) :
+        plt.subplot(1,2,i+1)
+        plt.plot(liste_survivants[i], moyenne_score[i], label = "moyenne")
+        plt.plot(listesurvivants[i], listescore[i], ".")
+        plt.legend()
+        plt.title(liste_selections[i])
+        plt.xlabel("Taux de survivants")
+        plt.ylabel("Score")
+    plt.show()
+
+
+# extract_data2("Resultatgroupé_final.csv")
+# choix_survivant("choix_survivants.npy")
+
+# >>> Choix proportion survivant = 0.2
+
+
+
+def extract_data3(filename):
+    f = open(filename, newline = '')
+    liste_selections = ["selection_duel_pondere", "selection_duel"]
+    dictscore = [{} for i in range(len(liste_selections))]
+    listemutations = [[] for i in range(len(liste_selections))]
+    listescore = [[] for i in range(len(liste_selections))]
+    ligne = f.readline()
+    while ligne != "" :
+        row = ligne.split(",")
+        if row[1] in liste_selections:
+            mutation = float(row[6])
+            listemutations[liste_selections.index(row[1])].append(mutation)
+            listescore[liste_selections.index(row[1])].append(float(row[3]))
+            if mutation not in dictscore[liste_selections.index(row[1])] :
+                dictscore[liste_selections.index(row[1])][mutation] = []
+            dictscore[liste_selections.index(row[1])][mutation].append(float(row[3]))
+        ligne = f.readline()
+    moyenne_score = [[], []]
+    liste_mut = [[], []]
+    for i in range(2):
+        liste_mut[i] = sorted(list(dictscore[i].keys()))
+        for mut in deepcopy(liste_mut[i]) :
+            if len(dictscore[i][mut]) > 1 :    #Cette condition permet de supprimer les jeu de données que nous n'avons pas eu le temps de répéter
+                                                    #On estime alors que le résultat n'est pas représentatif en moyenne et on ne le prend pas en compte
+                moyenne_score[i].append(moyenne(dictscore[i][mut]))
+            elif len(dictscore[i][mut]) == 1 :
+                liste_mut[i].remove(mut)
+    numpy.save("choix_mutation", [moyenne_score, liste_mut, listemutations, listescore])
+
+def choix_mutation(listedeliste):
+    [moyenne_score, liste_survivants, listesurvivants, listescore] = numpy.load(listedeliste, allow_pickle = True)
+    liste_selections = ["selection_duel_pondere", "selection_duel"]
+    plt.figure()
+    for i in range(len(liste_selections)) :
+        plt.subplot(1,2,i+1)
+        plt.plot(liste_survivants[i], moyenne_score[i], label = "moyenne")
+        plt.plot(listesurvivants[i], listescore[i], ".")
+        plt.legend()
+        plt.title(liste_selections[i])
+        plt.xlabel("Mutations")
+        plt.ylabel("Score")
+    plt.show()
+
+# extract_data3("Resultatgroupé_final.csv")
+# choix_mutation("choix_mutation.npy")
+
+# >>> Les résultats ne sont pas hyper concluants mais selon le graphe on a 0.005 meilleur pour duel et 0.01 meilleur pour duel ponderé
+
+
+
+# on voulait tracer un graphique en 3d cependant ce projet a été abandonné par manque de temps 
+#Les deux fonctions suivantes ne marchent donc pas
+
+
+# from mpl_toolkits.mplot3d import axes3d
+
+#Structure de donnée utilisée : dict1 = {x:{y:[z1, z2]}}   et    dict2 = {y:{x:[z1, z2]}}
+
+# def extract_data4(filename):
+#     f = open(filename, newline = '')
+#     liste_selections = ["selection_duel_pondere", "selection_duel"]
+#     liste_mutations = [0.005, 0.01]
+#     survivants = 0.2
+#     liste_dict1 = [{}, {}]
+#     liste_dict2 = [{}, {}]
+#     ligne = f.readline()
+#     while ligne != "" :
+#         row = ligne.split(",")
+#         if row[1] in liste_selections:
+#             i = liste_selections.index(row[1])
+#             if liste_mutations[i] == float(row[6]) and survivants == float(row[7])/float(row[4]):
+#                 x = float(row[4])
+#                 y = float(row[5])
+#                 z = float(row[3])
+#                 if x not in liste_dict1[i]:
+#                     liste_dict1[i][x] = {}
+#                 if y not in liste_dict1[i][x]:
+#                     liste_dict1[i][x][y] = []
+#                 liste_dict1[i][x][y].append(z)
+#                 if y not in liste_dict2[i]:
+#                     liste_dict2[i][y] = {}
+#                 if x not in liste_dict2[i][y]:
+#                     liste_dict2[i][y][x] = []
+#                 liste_dict2[i][y][x].append(z)
+#         ligne = f.readline()
+#     LISTE = []
+#     for i in range(2):
+#         X = [0 for k in range(len(liste_dict1[i].keys())) for j in range(len(liste_dict2[i].keys()))]
+#         Y = [0 for k in range(len(liste_dict2[i].keys())) for j in range(len(liste_dict1[i].keys()))]
+#         Z = [
+#         for x in sorted(liste_dict1[i]) :
+#             Y.append([])
+#             Z.append([])
+#             for y in liste_dict1[i][x]:
+#                 Y[-1].append(y)
+#                 Z[-1].append(moyenne(liste_dict1[i][x][y]))
+#         for y in liste_dict2[i] :
+#             X.append([])
+#             for x in liste_dict2[i][y]:
+#                 X[-1].append(x)       
+#         LISTE.append((X,Y,Z))
+#     return LISTE
+
+
+# def graphe(filename):
+#     LISTE = extract_data4(filename)
+#     for i in range(2):
+#         X, Y, Z = LISTE[i]
+#         print(X)
+#         print(Y)
+#         print(Z)
+#         fig = plt.figure()
+#         ax = fig.add_subplot(111, projection='3d')
+#         ax.plot_wireframe(X, Y, Z, rstride=10, cstride=10)
+#         plt.show()
+
+# graphe("Resultatgroupé_final.csv")  >>> Cette fonction a échoué, on abandonne l'idée du graphe 3d par manque de temps 
+
+
+
+
+
+
+def extract_data5(filename):
+    f = open(filename, newline = '')
+    liste_selections = ["selection_duel_pondere", "selection_duel"]
+    dictscore = [{} for i in range(len(liste_selections))]
+    listeindividus = [[] for i in range(len(liste_selections))]
+    listescore = [[] for i in range(len(liste_selections))]
+    ligne = f.readline()
+    while ligne != "" :
+        row = ligne.split(",")
+        if row[1] in liste_selections:
+            individu = float(row[4])
+            listeindividus[liste_selections.index(row[1])].append(individu)
+            listescore[liste_selections.index(row[1])].append(float(row[3]))
+            if individu not in dictscore[liste_selections.index(row[1])] :
+                dictscore[liste_selections.index(row[1])][individu] = []
+            dictscore[liste_selections.index(row[1])][individu].append(float(row[3]))
+        ligne = f.readline()
+    moyenne_score = [[], []]
+    liste_mut = [[], []]
+    for i in range(2):
+        liste_mut[i] = sorted(list(dictscore[i].keys()))
+        for mut in deepcopy(liste_mut[i]) :
+            if len(dictscore[i][mut]) > 1 :    #Cette condition permet de supprimer les jeu de données que nous n'avons pas eu le temps de répéter
+                                                    #On estime alors que le résultat n'est pas représentatif en moyenne et on ne le prend pas en compte
+                moyenne_score[i].append(moyenne(dictscore[i][mut]))
+            elif len(dictscore[i][mut]) == 1 :
+                liste_mut[i].remove(mut)
+    numpy.save("choix_individus", [moyenne_score, liste_mut, listeindividus, listescore])
+            
+def choix_individu(listedeliste):
+    [moyenne_score, liste_survivants, listesurvivants, listescore] = numpy.load(listedeliste, allow_pickle = True)
+    liste_selections = ["selection_duel_pondere", "selection_duel"]
+    plt.figure()
+    for i in range(len(liste_selections)) :
+        plt.subplot(1,2,i+1)
+        plt.plot(liste_survivants[i], moyenne_score[i], label = "moyenne")
+        plt.plot(listesurvivants[i], listescore[i], ".")
+        plt.legend()
+        plt.title(liste_selections[i])
+        plt.xlabel("Taille de la population")
+        plt.ylabel("Score")
+    plt.show()
+            
+
+# extract_data5("Resultatgroupé_final.csv")
+# choix_individu("choix_individus.npy")
+
+
+
+
+def extract_data6(filename):
+    f = open(filename, newline = '')
+    liste_selections = ["selection_duel_pondere", "selection_duel"]
+    dictscore = [{} for i in range(len(liste_selections))]
+    listegenerations = [[] for i in range(len(liste_selections))]
+    listescore = [[] for i in range(len(liste_selections))]
+    ligne = f.readline()
+    while ligne != "" :
+        row = ligne.split(",")
+        if row[1] in liste_selections:
+            generation = float(row[5])
+            listegenerations[liste_selections.index(row[1])].append(generation)
+            listescore[liste_selections.index(row[1])].append(float(row[3]))
+            if generation not in dictscore[liste_selections.index(row[1])] :
+                dictscore[liste_selections.index(row[1])][generation] = []
+            dictscore[liste_selections.index(row[1])][generation].append(float(row[3]))
+        ligne = f.readline()
+    moyenne_score = [[], []]
+    liste_mut = [[], []]
+    for i in range(2):
+        liste_mut[i] = sorted(list(dictscore[i].keys()))
+        for mut in deepcopy(liste_mut[i]) :
+            if len(dictscore[i][mut]) > 1 :    #Cette condition permet de supprimer les jeu de données que nous n'avons pas eu le temps de répéter
+                                                    #On estime alors que le résultat n'est pas représentatif en moyenne et on ne le prend pas en compte
+                moyenne_score[i].append(moyenne(dictscore[i][mut]))
+            elif len(dictscore[i][mut]) == 1 :
+                liste_mut[i].remove(mut)
+    numpy.save("choix_generations", [moyenne_score, liste_mut, listegenerations, listescore])
+            
+def choix_generation(listedeliste):
+    [moyenne_score, liste_survivants, listesurvivants, listescore] = numpy.load(listedeliste, allow_pickle = True)
+    liste_selections = ["selection_duel_pondere", "selection_duel"]
+    plt.figure()
+    for i in range(len(liste_selections)) :
+        plt.subplot(1,2,i+1)
+        plt.plot(liste_survivants[i], moyenne_score[i], label = "moyenne")
+        plt.plot(listesurvivants[i], listescore[i], ".")
+        plt.legend()
+        plt.title(liste_selections[i])
+        plt.xlabel("Nombre de génération")
+        plt.ylabel("Score")
+    plt.show()
+
+# extract_data6("Resultatgroupé_final.csv")
+# choix_generation("choix_generations.npy")
\ No newline at end of file