diff --git a/README.md b/README.md index 7bba7923fc98a8c8f731404404a41a1e7df6dc74..5e3ad594798d420817138bfe47201f841ad8c1d3 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ Sont fournis : Le groupe est composé de Loïc Busson, Claire Zhao, Sandra Ayumi, Rodrigo Kappes, Solal O'Sullivan, Chloé Muller, Gauthier Roy et Carlos Santos Garcia. Pour utiliser notre algorithme génétique, appeler la fonction main() du fichier algogenetique.py en introduisant le nombre d'individus par générations, le nombre de générations, la probabilité de mutation et le nombre d'individus séléctionnés à chaque itération. L'algorithme évalue les individus sur la séquence de nucléotides choisie. Il affiche aussi la trajectoire de la séquence voulue avec la meilleure table de rotations générée par l'algorithme à la dernière étape. Les fichiers introduits par nous sont: -- individu.py -- +- individu.py: Création de la classe Individu (attributs et méthodes) qui permettent de donner un score à chaque table de rotations et l'apparition de mutations. +- population.py: Création de la classe Population. Une population à un attribut "indiv" qui est une liste d'individus, chacun caractérisé par sa table de rotations. Cette classe permet de faire la séléction des individus à garder à chaque itération par de différentes méthodes et d'actualiser la population. - algogenetique.py : Rassemble les fonctionnalités des autres algorithmes pour faire tourner l'algorithme génétique et afficher la trajectoire après l'algorithme génétique. - croisement.py : Fonctions de croisement utilisées pour la génération des enfants au moment de la diff --git a/__pycache__/individu.cpython-37.pyc b/__pycache__/individu.cpython-37.pyc index 35557e4070ba1d2d0c008c67f366796605baa71d..32b398e808901aa0ca8d048b9b3c1ebb2f6c5133 100644 Binary files a/__pycache__/individu.cpython-37.pyc and b/__pycache__/individu.cpython-37.pyc differ diff --git a/algogenetique.py b/algogenetique.py index 1a0fa8348f1102079f6a2b06f22c0be8f79638e4..c445a682f6fd8e67ff7f88e147ab0f0d5b4b1cf6 100644 --- a/algogenetique.py +++ b/algogenetique.py @@ -33,8 +33,11 @@ def main(N,tmax,pmutation, proportion): if individu.score<mini: best=individu mini=individu.score + + S2=[individu.score for individu in People.indiv] + avg = sum(S2)/len(S2) L.append(mini) - print(i,":",mini) + print(i,"avg:",avg,"best score:", mini) plt.subplot(221) plt.plot([i for i in range(tmax)], L) @@ -56,7 +59,7 @@ def main(N,tmax,pmutation, proportion): lineList = [line.rstrip('\n') for line in open("plasmid_8k.fasta")] brin = ''.join(lineList[1:]) -best,People = main(20,10,0.01,10) +best,People = main(50,20,0.05,25) test = Traj3D() test.compute(brin, best.table) test.draw("first_plot") diff --git a/individu.py b/individu.py index dc25ddd300c92098d8f6c758c87ff36199fe2990..b7e0cbaad4d97b7527fd5a311dde14846c6f30da 100644 --- a/individu.py +++ b/individu.py @@ -33,8 +33,9 @@ class Individu(): list_distance = [] - begining = np.array(traj_array[0:2*numb_ajout]) - end = np.array(traj_array[-2*numb_ajout:]) + begining = traj_array[0:2*numb_ajout] + end = traj_array[-2*numb_ajout:] + for i in range(numb_ajout): nuc_coordonate_beg = begining[i] @@ -97,7 +98,7 @@ class Individu(): table_rotation_not_seen.remove(doublet) for coord in range(3): - value = table_rotations[doublet][coord] + np.random.uniform( low = - self.table.orta()[doublet][coord + 3]/10, high = - self.table.orta()[doublet][coord + 3]/10) + value = table_rotations[doublet][coord] + np.random.normal(0, self.table.orta()[doublet][coord + 3]/15) if value > self.table.orta()[doublet][coord] + self.table.orta()[doublet][coord + 3]: value = self.table.orta()[doublet][coord] + self.table.orta()[doublet][coord + 3] elif value < self.table.orta()[doublet][coord] - self.table.orta()[doublet][coord + 3]: diff --git a/population.py b/population.py index 28a8700140b4f50e4fbad62f36110da084087edd..1a9301aef80ada02598b9a556590f604a64e93c4 100644 --- a/population.py +++ b/population.py @@ -163,9 +163,7 @@ class Population: y=copy.deepcopy(newself[t]) couple_enfant = enfant(x,y) for child in couple_enfant : - lineList = [line.rstrip('\n') for line in open("plasmid_8k.fasta")] - brin = ''.join(lineList[1:]) - child.mutation(proba_mutation) + child.mutation_close_values(proba_mutation, number_of_mutations = 2) child.evaluate() newself.append(couple_enfant[0]) newself.append(couple_enfant[1])