diff --git a/__pycache__/RotTable.cpython-36.pyc b/__pycache__/RotTable.cpython-36.pyc index a8064bb45dbaad46db289f9e730b7dd816423ae4..459e4374c306aebaf525b830c17f00a8820843ca 100644 Binary files a/__pycache__/RotTable.cpython-36.pyc and b/__pycache__/RotTable.cpython-36.pyc differ diff --git a/algogenetique.py b/algogenetique.py index 7c49cd2af0e82ae43dddb7524e47373f1c611d4c..138d8a15f2efd56a7fa7bf34bc150bc638c53cbf 100644 --- a/algogenetique.py +++ b/algogenetique.py @@ -8,7 +8,7 @@ import croisement from Traj3D import * from random import random import matplotlib.pyplot as plt -import time +import time # def main(N,tmax,pmutation, proportion,brin="plasmid_8k.fasta"): # '''lineList = [line.rstrip('\n') for line in open(brin)] @@ -29,8 +29,8 @@ import time # plt.plot([i for i in range(tmax)], L, label = str(pmutation)) # return(best) - def main(N,tmax,pmutation, proportion): + L=[] lineList = [line.rstrip('\n') for line in open("plasmid_8k.fasta")] brin = ''.join(lineList[1:]) @@ -41,7 +41,7 @@ def main(N,tmax,pmutation, proportion): # S1.append(int(individu.score)) # maximum=int(max(S1)) for i in range(tmax): - print(i) + #print(i) mini=People.indiv[0].score best=People.indiv[0] People.reproduction(p = proportion, proba_mutation= pmutation) diff --git a/individu.py b/individu.py index 20958d3de778f360a6da39856777dffe233336bf..08744e8f0dc9a3ca276c4ff3b75c3ab6dd5cb4be 100644 --- a/individu.py +++ b/individu.py @@ -9,37 +9,41 @@ 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 - self.score = self.evaluate("AAAGGATCTTCTTGAGATCCTTTTTTTCTGCGCGTAATCTGCTGCCAGTAAACGAAAAAACCGCCTGGGGAGGCGGTTTAGTCGAA") - - def evaluate(self, brin): + 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 = brin[0:numb_ajout] - last_seq = brin[-numb_ajout:] + fisrt_seq = self.brin[0:numb_ajout] + last_seq = self.brin[-numb_ajout:] - traj.compute(last_seq + brin + fisrt_seq, self.table) + 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 = max(list_distance) - return max(list_distance) + #return max(list_distance) def mutation(self, proba = P1): @@ -56,15 +60,34 @@ class Individu(): #sur l'axe z il y a un moins table_rotations[doublet2][coord] = - table_rotations[doublet][coord] + def mutation_with_numbers(self, proba = P1, number_of_mutations = 5): + 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()) diff --git a/population.py b/population.py index 104f66bb97b274d923f7dcf554ea4fe3599ef717..7d2507349ff1cdf2d946cdb03a6cdf7eca96da7a 100644 --- a/population.py +++ b/population.py @@ -15,7 +15,7 @@ class Population: self.n = len(liste_individus) self.indiv = liste_individus for i in range(0,self.n): - self.indiv[i].evaluate("AAAGGATCTTCTTGAGATCCTTTTTTTCTGCGCGTAATCTGCTGCCAGTAAACGAAAAAACCGCCTGGGGAGGCGGTTTAGTCGAA") + self.indiv[i].evaluate() return self @@ -68,7 +68,7 @@ class Population: meilleur = self.indiv[0] for individu in self.indiv : if meilleur.score > individu.score: - print("meilleur, individu: ", meilleur.score, individu.score) + #print("meilleur, individu: ", meilleur.score, individu.score) meilleur = individu newself = [meilleur] vu=set() @@ -83,7 +83,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) @@ -170,7 +170,7 @@ class Population: lineList = [line.rstrip('\n') for line in open("plasmid_8k.fasta")] brin = ''.join(lineList[1:]) child.mutation(proba_mutation) - child.evaluate(brin) + child.evaluate() newself.append(couple_enfant[0]) newself.append(couple_enfant[1]) self = self.modifier_population(newself) @@ -186,7 +186,7 @@ def test(): popu = Population(4) print("\n POPULATION INITIALE \n") for individu in popu.indiv : - individu.evaluate("AAAGGATCTTCTTGAGATCCTTTTTTTCTGCGCGTAATCTGCTGCCAGTAAACGAAAAAACCGCCTGGGGAGGCGGTTTAGTCGAA") + individu.evaluate() afficher(popu) popu.reproduction(selection = popu.selection_duel) print("\n REPRODUCTION \n")