Skip to content
Snippets Groups Projects
Commit fa64667a authored by Busson Loic's avatar Busson Loic
Browse files

Merge branch 'master' of...

Merge branch 'master' of https://gitlab-research.centralesupelec.fr/2019santosgc/ei-jeux-evolutionnaires
parents dd1f5ce5 3b29da84
No related branches found
No related tags found
No related merge requests found
No preview for this file type
No preview for this file type
No preview for this file type
......@@ -8,30 +8,59 @@ import croisement
from Traj3D import *
from random import random
import matplotlib.pyplot as plt
import time
# Debut du decompte du temps
start_time = time.time()
def main(N,tmax,pmutation, proportion,brin="plasmid_8k.fasta"):
def main(N,tmax,pmutation, proportion):
L=[]
lineList = [line.rstrip('\n') for line in open("plasmid_8k.fasta")]
brin = ''.join(lineList[1:])
People=Population(N)
S1=[]
for individu in People.indiv:
individu.evaluate()
S1.append(int(individu.score))
maximum=int(max(S1))
for i in range(tmax):
#print(i)
max=0
best=None
mini=People.indiv[0].score
best=People.indiv[0]
People.reproduction(p = proportion, proba_mutation= pmutation)
for individu in People.indiv:
if individu.score>max:
if individu.score<mini:
best=individu
max=individu.score
L.append(1/max)
print(i,":",1/max)
mini=individu.score
L.append(mini)
print(i,":",mini)
plt.subplot(221)
plt.plot([i for i in range(tmax)], L)
plt.subplot(223)
plt.hist(S1, range = (0, maximum+10), bins = 20, color = 'red')
S2=[individu.score for individu in People.indiv]
print("Score final: ",best.score)
plt.subplot(224)
plt.hist(S2, range = (0,maximum+10), bins = 20, color = 'blue')
plt.show()
return(best, People)
return(best,People)
lineList = [line.rstrip('\n') for line in open("plasmid_8k.fasta")]
brin = ''.join(lineList[1:])
best,People = main(200,10,0.01,100)
test = Traj3D()
test.compute(brin, best.table)
test.draw("first_plot")
best,People = main(60,100,0.01,25)
traj = Traj3D()
traj.compute(best.brin,best.table)
traj.draw("plot")
# Affichage du temps d execution
print("Temps d'execution : %s secondes " % (time.time() - start_time))
first_plot.png

2.35 KiB | W: | H:

first_plot.png

2.35 KiB | W: | H:

first_plot.png
first_plot.png
first_plot.png
first_plot.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -9,40 +9,40 @@ P1 = 0.015
class Individu():
def __init__(self, table):
lineList = [line.rstrip('\n') for line in open("plasmid_8k.fasta")]
brin = ''.join(lineList[1:])
self.table = table
lineList = [line.rstrip('\n') for line in open("plasmid_8k.fasta")]
self.brin = ''.join(lineList[1:])
#self.brin = "AAAGGATCTTCTTGAGATCCTTTTTTTCTGCGCGTAATCTGCTGCCAGTAAACGAAAAAACCGCCTGGGGAGGCGGTTTAGTCGAA"
self.score = self.evaluate()
def evaluate(self):
traj = Traj3D()
numb_ajout = 3
numb_ajout = 6
fisrt_seq = self.brin[0:numb_ajout]
last_seq = self.brin[-numb_ajout:]
traj.compute(last_seq + self.brin + fisrt_seq, self.table)
traj_array = np.array(traj.getTraj())
list_distance = []
for i in range(numb_ajout):
first_nuc_coordonate = traj_array[numb_ajout+i, 0:3]
first_nuc_coordonate_compute = traj_array[-(numb_ajout-i), 0:3]
last_nuc_coordonate = traj_array[-(2*numb_ajout-i), 0:3]
last_nuc_coordonate_compute = traj_array[i, 0:3]
begining = traj_array[0:2*numb_ajout, 0:3]
end = traj_array[-2*numb_ajout:, 0:3]
distance_first_nuc = np.linalg.norm(first_nuc_coordonate - first_nuc_coordonate_compute, ord=2)
distance_last_nuc = np.linalg.norm(last_nuc_coordonate - last_nuc_coordonate_compute, ord=2)
for i in range(numb_ajout):
list_distance += [distance_first_nuc, distance_last_nuc]
nuc_coordonate_beg = begining[i]
nuc_coordonate_end = end[i]
distance_nuc = np.linalg.norm(nuc_coordonate_beg - nuc_coordonate_end, ord=2)
list_distance += [distance_nuc]
self.score = 1/max(list_distance)
self.score = max(list_distance)
return 1/max(list_distance)
#return max(list_distance)
def mutation_with_numbers(self, proba = P1):
......@@ -79,14 +79,32 @@ class Individu():
else :
#sur l'axe z il y a un moins
table_rotations[doublet2][coord] = - table_rotations[doublet][coord]
table_rotations = self.table.rot_table
for i in range(0,number_of_mutations):
tir = random()
if tir < proba :
doubletNumber = randrange(0,8)
counter = 0
for doublet in table_rotations:
if counter==doubletNumber:
break
counter+=1
for coord in range(3):
table_rotations[doublet][coord] =np.random.uniform(low = self.table.orta()[doublet][coord] - self.table.orta()[doublet][coord + 3], high = self.table.orta()[doublet][coord] + self.table.orta()[doublet][coord + 3])
doublet2 = self.table.corr()[doublet]
if coord == 0 or coord == 1 :
table_rotations[doublet2][coord] = table_rotations[doublet][coord]
else :
#sur l'axe z il y a un moins
table_rotations[doublet2][coord] = - table_rotations[doublet][coord]
# individu1 = Individu(RotTable())
# print(individu1.table.rot_table)
# individu1.mutation()
# table = RotTable()
# test = Individu(table)
# test.evaluate("AAAGGATCTTCTTGAGATCCTTTTTTTCTGCGCGTAATCTGCTGCCAGTAAACGAAAAAACCGCCTGGGGAGGCGGTTTAGTCGAA")
# print(test.score)
#table = RotTable()
#test = Individu(table)
#test.evaluate("AAAGGATCTTCTTGAGATCCTTTTTTTCTGCGCGTAATCTGCTGCCAGTAAACGAAAAAACCGCCTGGGGAGGCGGTTTAGTCGAA")
#print(test.score)
# qqun=Individu(RotTable())
......
from random import *
from individu import Individu
from RotTable import RotTable
......@@ -14,8 +13,6 @@ class Population:
"""Fonction qui renvoie une nouvelle instance de population a partir d'une liste d'individus"""
self.n = len(liste_individus)
self.indiv = liste_individus
for i in range(0,self.n):
self.indiv[i].evaluate()
return self
def selection_p_best(self,p=None):
......@@ -66,7 +63,7 @@ class Population:
p = (self.n)//2
meilleur = self.indiv[0]
for individu in self.indiv :
if meilleur.score < individu.score:
if meilleur.score > individu.score:
#print("meilleur, individu: ", meilleur.score, individu.score)
meilleur = individu
newself = [meilleur]
......@@ -82,7 +79,7 @@ class Population:
x=self.indiv[m]
y=self.indiv[t]
if x.score>=y.score:
if x.score<y.score:
newself.append(x)
else:
newself.append(y)
......@@ -166,6 +163,8 @@ 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.evaluate()
newself.append(couple_enfant[0])
......@@ -204,5 +203,6 @@ def test():
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment