Skip to content
Snippets Groups Projects
Commit db399e5d authored by Gauthier Roy's avatar Gauthier Roy
Browse files

Merge branch 'master' of...

parents cf714845 6f372729
No related branches found
No related tags found
No related merge requests found
...@@ -42,7 +42,7 @@ Sont fournis : ...@@ -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. 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. 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: 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. - 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 - croisement.py : Fonctions de croisement utilisées pour la génération des enfants au moment de la
No preview for this file type
...@@ -33,8 +33,11 @@ def main(N,tmax,pmutation, proportion): ...@@ -33,8 +33,11 @@ def main(N,tmax,pmutation, proportion):
if individu.score<mini: if individu.score<mini:
best=individu best=individu
mini=individu.score mini=individu.score
S2=[individu.score for individu in People.indiv]
avg = sum(S2)/len(S2)
L.append(mini) L.append(mini)
print(i,":",mini) print(i,"avg:",avg,"best score:", mini)
plt.subplot(221) plt.subplot(221)
plt.plot([i for i in range(tmax)], L) plt.plot([i for i in range(tmax)], L)
...@@ -56,7 +59,7 @@ def main(N,tmax,pmutation, proportion): ...@@ -56,7 +59,7 @@ def main(N,tmax,pmutation, proportion):
lineList = [line.rstrip('\n') for line in open("plasmid_8k.fasta")] lineList = [line.rstrip('\n') for line in open("plasmid_8k.fasta")]
brin = ''.join(lineList[1:]) brin = ''.join(lineList[1:])
best,People = main(20,10,0.01,10) best,People = main(50,20,0.05,25)
test = Traj3D() test = Traj3D()
test.compute(brin, best.table) test.compute(brin, best.table)
test.draw("first_plot") test.draw("first_plot")
......
...@@ -33,8 +33,9 @@ class Individu(): ...@@ -33,8 +33,9 @@ class Individu():
list_distance = [] list_distance = []
begining = np.array(traj_array[0:2*numb_ajout]) begining = traj_array[0:2*numb_ajout]
end = np.array(traj_array[-2*numb_ajout:]) end = traj_array[-2*numb_ajout:]
for i in range(numb_ajout): for i in range(numb_ajout):
nuc_coordonate_beg = begining[i] nuc_coordonate_beg = begining[i]
...@@ -97,7 +98,7 @@ class Individu(): ...@@ -97,7 +98,7 @@ class Individu():
table_rotation_not_seen.remove(doublet) table_rotation_not_seen.remove(doublet)
for coord in range(3): 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]: 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] 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]: elif value < self.table.orta()[doublet][coord] - self.table.orta()[doublet][coord + 3]:
......
...@@ -163,9 +163,7 @@ class Population: ...@@ -163,9 +163,7 @@ class Population:
y=copy.deepcopy(newself[t]) y=copy.deepcopy(newself[t])
couple_enfant = enfant(x,y) couple_enfant = enfant(x,y)
for child in couple_enfant : for child in couple_enfant :
lineList = [line.rstrip('\n') for line in open("plasmid_8k.fasta")] child.mutation_close_values(proba_mutation, number_of_mutations = 2)
brin = ''.join(lineList[1:])
child.mutation(proba_mutation)
child.evaluate() child.evaluate()
newself.append(couple_enfant[0]) newself.append(couple_enfant[0])
newself.append(couple_enfant[1]) newself.append(couple_enfant[1])
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment